qdevelop-v0.28/0000755000175000017500000000000011362261070012422 5ustar jlbrdjlbrdqdevelop-v0.28/ui/0000755000175000017500000000000011362261070013037 5ustar jlbrdjlbrdqdevelop-v0.28/resources/0000755000175000017500000000000011362261070014434 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/0000755000175000017500000000000011362261064014106 5ustar jlbrdjlbrdqdevelop-v0.28/src/0000755000175000017500000000000011362261066013216 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/0000755000175000017500000000000011362261070013306 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/0000755000175000017500000000000011362261070013723 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/0000755000175000017500000000000011362261070016432 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/0000755000175000017500000000000011362261070015701 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/0000755000175000017500000000000011362261067017163 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/0000755000175000017500000000000011362261070015320 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/0000755000175000017500000000000011362261064017557 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/0000755000175000017500000000000011362261064020173 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/0000755000175000017500000000000011362261070014767 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/0000755000175000017500000000000011362261065015217 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/0000755000175000017500000000000011362261070014075 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/tmp/0000755000175000017500000000000011362261070014106 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/props/0000755000175000017500000000000011362261062014452 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/prop-base/0000755000175000017500000000000011362261070015176 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/text-base/0000755000175000017500000000000011362261070015202 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/tmp/0000755000175000017500000000000011362261070014523 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/props/0000755000175000017500000000000011362261070015066 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/prop-base/0000755000175000017500000000000011362261070015613 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/text-base/0000755000175000017500000000000011362261070015617 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/0000755000175000017500000000000011362261070017316 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/0000755000175000017500000000000011362261070016565 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/0000755000175000017500000000000011362261070020041 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/tmp/0000755000175000017500000000000011362261070016120 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/props/0000755000175000017500000000000011362261066016470 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/prop-base/0000755000175000017500000000000011362261066017215 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/text-base/0000755000175000017500000000000011362261070017214 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/0000755000175000017500000000000011362261064022300 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/0000755000175000017500000000000011362261070020440 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/0000755000175000017500000000000011362261064022714 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/0000755000175000017500000000000011362261070021054 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/tmp/0000755000175000017500000000000011362261064015572 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/props/0000755000175000017500000000000011362261064016135 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/prop-base/0000755000175000017500000000000011362261064016662 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/text-base/0000755000175000017500000000000011362261064016666 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/0000755000175000017500000000000011362261070016077 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/tmp/0000755000175000017500000000000011362261066014702 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/props/0000755000175000017500000000000011362261064015243 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/prop-base/0000755000175000017500000000000011362261064015770 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/text-base/0000755000175000017500000000000011362261066015776 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/tmp/props/0000755000175000017500000000000011362261062015252 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/tmp/prop-base/0000755000175000017500000000000011362261062015777 5ustar jlbrdjlbrdqdevelop-v0.28/.svn/tmp/text-base/0000755000175000017500000000000011362261070016002 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/tmp/props/0000755000175000017500000000000011362261070015666 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/tmp/prop-base/0000755000175000017500000000000011362261070016413 5ustar jlbrdjlbrdqdevelop-v0.28/ui/.svn/tmp/text-base/0000755000175000017500000000000011362261070016417 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/tmp/0000755000175000017500000000000011362261070020116 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/props/0000755000175000017500000000000011362261070020461 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/prop-base/0000755000175000017500000000000011362261070021206 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/text-base/0000755000175000017500000000000011362261070021212 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/tmp/0000755000175000017500000000000011362261070017365 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/props/0000755000175000017500000000000011362261067017736 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/prop-base/0000755000175000017500000000000011362261070020455 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/text-base/0000755000175000017500000000000011362261070020461 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/tmp/0000755000175000017500000000000011362261067020647 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/props/0000755000175000017500000000000011362261066021211 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/prop-base/0000755000175000017500000000000011362261066021736 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/text-base/0000755000175000017500000000000011362261067021743 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/tmp/props/0000755000175000017500000000000011362261066017270 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/tmp/prop-base/0000755000175000017500000000000011362261066020015 5ustar jlbrdjlbrdqdevelop-v0.28/resources/.svn/tmp/text-base/0000755000175000017500000000000011362261070020014 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/0000755000175000017500000000000011362261070023161 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/tmp/0000755000175000017500000000000011362261064021243 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/props/0000755000175000017500000000000011362261064021606 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/prop-base/0000755000175000017500000000000011362261064022333 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/0000755000175000017500000000000011362261064022337 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/0000755000175000017500000000000011362261070023575 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/tmp/0000755000175000017500000000000011362261064021657 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/props/0000755000175000017500000000000011362261064022222 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/prop-base/0000755000175000017500000000000011362261064022747 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/0000755000175000017500000000000011362261064022753 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/tmp/props/0000755000175000017500000000000011362261064016735 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/tmp/prop-base/0000755000175000017500000000000011362261064017462 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/.svn/tmp/text-base/0000755000175000017500000000000011362261064017466 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/tmp/0000755000175000017500000000000011362261065016703 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/props/0000755000175000017500000000000011362261065017246 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/prop-base/0000755000175000017500000000000011362261065017773 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/text-base/0000755000175000017500000000000011362261065017777 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/tmp/props/0000755000175000017500000000000011362261064016043 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/tmp/prop-base/0000755000175000017500000000000011362261064016570 5ustar jlbrdjlbrdqdevelop-v0.28/src/.svn/tmp/text-base/0000755000175000017500000000000011362261066016576 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/tmp/props/0000755000175000017500000000000011362261070021261 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/tmp/prop-base/0000755000175000017500000000000011362261070022006 5ustar jlbrdjlbrdqdevelop-v0.28/resources/templates/.svn/tmp/text-base/0000755000175000017500000000000011362261070022012 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/tmp/props/0000755000175000017500000000000011362261067020536 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/tmp/prop-base/0000755000175000017500000000000011362261067021263 5ustar jlbrdjlbrdqdevelop-v0.28/resources/images/.svn/tmp/text-base/0000755000175000017500000000000011362261070021261 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/tmp/props/0000755000175000017500000000000011362261066022011 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/tmp/prop-base/0000755000175000017500000000000011362261066022536 5ustar jlbrdjlbrdqdevelop-v0.28/resources/translations/.svn/tmp/text-base/0000755000175000017500000000000011362261067022543 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/tmp/0000755000175000017500000000000011362261064023764 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/props/0000755000175000017500000000000011362261064024327 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/prop-base/0000755000175000017500000000000011362261064025054 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/text-base/0000755000175000017500000000000011362261064025060 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/tmp/props/0000755000175000017500000000000011362261064022406 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/tmp/prop-base/0000755000175000017500000000000011362261064023133 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/.svn/tmp/text-base/0000755000175000017500000000000011362261064023137 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/tmp/0000755000175000017500000000000011362261064024400 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/props/0000755000175000017500000000000011362261064024743 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/prop-base/0000755000175000017500000000000011362261064025470 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/0000755000175000017500000000000011362261064025474 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/tmp/props/0000755000175000017500000000000011362261064023022 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/tmp/prop-base/0000755000175000017500000000000011362261064023547 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/.svn/tmp/text-base/0000755000175000017500000000000011362261064023553 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/tmp/props/0000755000175000017500000000000011362261065020046 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/tmp/prop-base/0000755000175000017500000000000011362261065020573 5ustar jlbrdjlbrdqdevelop-v0.28/src/QIComplete/.svn/tmp/text-base/0000755000175000017500000000000011362261065020577 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/tmp/props/0000755000175000017500000000000011362261064025127 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/tmp/prop-base/0000755000175000017500000000000011362261064025654 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/formatting-astyle/translations/.svn/tmp/text-base/0000755000175000017500000000000011362261064025660 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/tmp/props/0000755000175000017500000000000011362261064025543 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/tmp/prop-base/0000755000175000017500000000000011362261064026270 5ustar jlbrdjlbrdqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/tmp/text-base/0000755000175000017500000000000011362261064026274 5ustar jlbrdjlbrdqdevelop-v0.28/QDevelop.pro0000644000175000017500000000733611362261070014674 0ustar jlbrdjlbrdCONFIG += qt uitools warn_on release DESTDIR += bin FORMS += ui/about.ui \ ui/addexistant.ui \ ui/addnew.ui \ ui/addnewclass.ui \ ui/addnewclassmethod.ui \ ui/addnewclassvariable.ui \ ui/addscope.ui \ ui/addsetget.ui \ ui/exechoice.ui \ ui/findfiles.ui \ ui/findwidget.ui \ ui/gotoline.ui \ ui/main.ui \ ui/newimplementation.ui \ ui/newproject.ui \ ui/newvariable.ui \ ui/openfile.ui \ ui/options.ui \ ui/parameters.ui \ ui/projectpropertie.ui \ ui/replacewidget.ui \ ui/shortcuts.ui \ ui/subclassing.ui \ ui/toolsControl.ui \ ui/warning.ui \ ui/breakpointcondition.ui \ ui/registers.ui HEADERS += src/InitCompletion.h \ src/QIComplete/parse.h \ src/QIComplete/readtags.h \ src/QIComplete/tree.h \ src/addexistantimpl.h \ src/addnewclassimpl.h \ src/addnewclassmethodimpl.h \ src/addnewclassvariableimpl.h \ src/addnewimpl.h \ src/addscopeimpl.h \ src/addsetgetimpl.h \ src/assistant.h \ src/build.h \ src/cpphighlighter.h \ src/debug.h \ src/designer.h \ src/editor.h \ src/findfileimpl.h \ src/lineedit.h \ src/linenumbers.h \ src/logbuild.h \ src/mainimpl.h \ src/misc.h \ src/newprojectimpl.h \ src/openfileimpl.h \ src/optionsimpl.h \ src/parametersimpl.h \ src/pluginsinterfaces.h \ src/projectmanager.h \ src/projectpropertieimpl.h \ src/selectionborder.h \ src/shortcutsimpl.h \ src/stackimpl.h \ src/subclassingimpl.h \ src/tabwidget.h \ src/textEdit.h \ src/toolscontrolimpl.h \ src/treeclasses.h \ src/treeproject.h \ src/registersimpl.h INCLUDEPATH += . src src/ui MOC_DIR += build/moc QT += core gui network sql RCC_DIR += build/rcc RC_FILE += QDevelop.rc RESOURCES += resources/resources.qrc SOURCES += src/InitCompletion.cpp \ src/QIComplete/parse.cpp \ src/QIComplete/readtags.cpp \ src/QIComplete/tree.cpp \ src/addexistantimpl.cpp \ src/addnewclassimpl.cpp \ src/addnewclassmethodimpl.cpp \ src/addnewclassvariableimpl.cpp \ src/addnewimpl.cpp \ src/addscopeimpl.cpp \ src/addsetgetimpl.cpp \ src/assistant.cpp \ src/build.cpp \ src/cpphighlighter.cpp \ src/debug.cpp \ src/designer.cpp \ src/editor.cpp \ src/findfileimpl.cpp \ src/lineedit.cpp \ src/linenumbers.cpp \ src/logbuild.cpp \ src/main.cpp \ src/mainimpl.cpp \ src/misc.cpp \ src/newprojectimpl.cpp \ src/openfileimpl.cpp \ src/optionsimpl.cpp \ src/parametersimpl.cpp \ src/projectmanager.cpp \ src/projectpropertieimpl.cpp \ src/selectionborder.cpp \ src/shortcutsimpl.cpp \ src/stackimpl.cpp \ src/subclassingimpl.cpp \ src/tabwidget.cpp \ src/textEdit.cpp \ src/toolscontrolimpl.cpp \ src/treeclasses.cpp \ src/treeproject.cpp \ src/registersimpl.cpp TEMPLATE = app TRANSLATIONS += resources/translations/QDevelop_Chinese.ts \ resources/translations/QDevelop_Czech.ts \ resources/translations/QDevelop_Dutch.ts \ resources/translations/QDevelop_French.ts \ resources/translations/QDevelop_German.ts \ resources/translations/QDevelop_Italian.ts \ resources/translations/QDevelop_Polish.ts \ resources/translations/QDevelop_Portuguese.ts \ resources/translations/QDevelop_Russian.ts \ resources/translations/QDevelop_Spanish.ts \ resources/translations/QDevelop_Turkish.ts \ resources/translations/QDevelop_Ukrainian.ts \ resources/translations/QDevelop_Hungarian.ts \ resources/translations/QDevelop_Japanese.ts \ resources/translations/QDevelop_Vietnamese.ts UI_DIR += build/ui macx { TARGET = QDevelop ICON += resources/images/qdevelop.icns OBJECTS_DIR += build/o/mac } unix { TARGET = qdevelop OBJECTS_DIR += build/o/unix target.path += /usr/bin/ INSTALLS += target } win32 { TARGET = QDevelop OBJECTS_DIR += build/o/win32 CONFIG -= debug_and_release } !exists(resources/translations/QDevelop_Russian.qm) { error(Please run \"lrelease QDevelop.pro\" before building the project) } qdevelop-v0.28/CMakeLists.txt0000644000175000017500000001636711362261070015177 0ustar jlbrdjlbrd# qdevelop CMakeLists.txt # # To build qdevelop, you will need cmake 2.4.3 (should also work with 2.4.0 and above # but not tested). To build the application run this commands: # # mkdir cbuild # cd cbuild # cmake ../ # make # # Please indent this file using tabs, and set the tabs to 8 spaces :) # # If you don't konw cmake, here are some links for you: # http://wiki.qtcentre.org/index.php?title=Compiling_Qt4_apps_with_CMake # http://qtnode.net/wiki/Qt_with_cmake#cmake_for_Qt_4 PROJECT(QDevelop) CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0) SET(QDEV "qdevelop" CACHE STRING "Name of the executeable") # verbose - off # SET( CMAKE_VERBOSE_MAKEFILE ON ) # do optimizations on GCC based compilers # if you want to speed up compilations, set this to -O0, # which reduces compilation time from 2:30 to 1:30 on my system SET( OPTIMIZATION_FLAGS "-O2") ## TODO mmmm.... # CHECK_C_COMPILER_FLAG( ${OPTIMIZATION_FLAGS} HAS_OPTIMIZATION_FLAGS ) # if (HAS_OPTIMIZATION_FLAGS) # ADD_DEFINITIONS( ${OPTIMIZATION_FLAGS} ) # endif (HAS_OPTIMIZATION_FLAGS) ADD_DEFINITIONS( ${OPTIMIZATION_FLAGS} ) # input files SET( qdevelop_UIS ui/about.ui ui/addexistant.ui ui/addnew.ui ui/addnewclass.ui ui/addnewclassmethod.ui ui/addnewclassvariable.ui ui/addsetget.ui ui/addscope.ui ui/breakpointcondition.ui ui/exechoice.ui ui/findfiles.ui ui/findwidget.ui ui/gotoline.ui ui/main.ui ui/newimplementation.ui ui/newproject.ui ui/newvariable.ui ui/options.ui ui/openfile.ui ui/parameters.ui ui/projectpropertie.ui ui/registers.ui ui/replacewidget.ui ui/shortcuts.ui ui/subclassing.ui ui/toolsControl.ui ui/warning.ui ) SET( qdevelop_SRCS src/InitCompletion.cpp src/QIComplete/parse.cpp src/QIComplete/readtags.cpp src/QIComplete/tree.cpp src/addexistantimpl.cpp src/addnewimpl.cpp src/addnewclassimpl.cpp src/addscopeimpl.cpp src/addsetgetimpl.cpp src/addnewclassmethodimpl.cpp src/addnewclassvariableimpl.cpp src/assistant.cpp src/build.cpp src/cpphighlighter.cpp src/debug.cpp src/designer.cpp src/editor.cpp src/findfileimpl.cpp src/lineedit.cpp src/logbuild.cpp src/linenumbers.cpp src/main.cpp src/mainimpl.cpp src/misc.cpp src/newprojectimpl.cpp src/optionsimpl.cpp src/openfileimpl.cpp src/parametersimpl.cpp src/projectmanager.cpp src/projectpropertieimpl.cpp src/registersimpl.cpp src/selectionborder.cpp src/shortcutsimpl.cpp src/stackimpl.cpp src/subclassingimpl.cpp src/tabwidget.cpp src/textEdit.cpp src/treeclasses.cpp src/treeproject.cpp src/toolscontrolimpl.cpp ) SET( qdevelop_MOC_HDRS src/InitCompletion.h src/addexistantimpl.h src/addnewimpl.h src/addnewclassimpl.h src/addnewclassmethodimpl.h src/addnewclassvariableimpl.h src/addscopeimpl.h src/addsetgetimpl.h src/assistant.h src/build.h src/debug.h src/editor.h src/findfileimpl.h src/linenumbers.h src/logbuild.h src/mainimpl.h src/newprojectimpl.h src/optionsimpl.h src/openfileimpl.h src/parametersimpl.h src/projectmanager.h src/projectpropertieimpl.h src/registersimpl.h src/shortcutsimpl.h src/stackimpl.h src/subclassingimpl.h src/tabwidget.h src/textEdit.h src/treeclasses.h src/treeproject.h src/toolscontrolimpl.h ) SET( qdevelop_RCS QDevelop.rc ) SET( qdevelop_RESOURCES resources/resources.qrc ) SET( qdevelop_TS resources/translations/QDevelop_Chinese.ts resources/translations/QDevelop_Czech.ts resources/translations/QDevelop_Dutch.ts resources/translations/QDevelop_French.ts resources/translations/QDevelop_German.ts resources/translations/QDevelop_Hungarian.ts resources/translations/QDevelop_Italian.ts resources/translations/QDevelop_Japanese.ts resources/translations/QDevelop_Polish.ts resources/translations/QDevelop_Portuguese.ts resources/translations/QDevelop_Russian.ts resources/translations/QDevelop_Spanish.ts resources/translations/QDevelop_Turkish.ts resources/translations/QDevelop_Ukrainian.ts resources/translations/QDevelop_Vietnamese.ts ) FIND_PACKAGE( Qt4 REQUIRED ) INCLUDE(${QT_USE_FILE}) SET( QT_USE_QTASSISTANT ) SET( QT_USE_QTDESIGNER ) SET( QT_USE_QTNETWORK ) SET( QT_USE_QTSQL ) SET( QT_USE_QTXML ) SET( QT_USE_QTUITOOLS ) # qt4 definitinos QT4_WRAP_UI ( qdevelop_UIS_H ${qdevelop_UIS} ) QT4_WRAP_CPP ( qdevelop_MOC_SRCS ${qdevelop_MOC_HDRS} ) QT4_ADD_RESOURCES ( qdevelop_RESOURCES ${qdevelop_RESOURCES} ) QT4_AUTOMOC ( ${qdevelop_SRCS} ) QT4_ADD_TRANSLATION ( qdevelop_QM ${qdevelop_TS} ) # definitions for the project ADD_DEFINITIONS( -Wall -DQT_NO_DEBUG ${QT_DEFINITIONS} ) # include directories INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${QT_INCLUDE_DIR}/QtUiTools ${CMAKE_BINARY_DIR} . src src/ui ) IF( MINGW ) # resource compilation for MinGW ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/QDevelop.rc -o ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o ) SET( qdevelop_SRCS ${qdevelop_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o) SET( QT_UITOOLSLIB QtUiTools QtDesigner4 ) ELSE( MINGW ) SET(qdevelop_SRCS ${qdevelop_SRCS} QDevelop.rc) SET(QT_UITOOLSLIB ${QT_QTUITOOLS_LIBRARY} QtDesigner ) ENDIF( MINGW ) # the main build target ADD_EXECUTABLE( ${QDEV} ${qdevelop_SRCS} ${qdevelop_UIS_H} ${qdevelop_MOC_SRCS} ${qdevelop_UIS} ${qdevelop_RESOURCES} ${qdevelop_QM} ) IF( MINGW ) SET_TARGET_PROPERTIES( ${QDEV} PROPERTIES LINK_FLAGS "-mwindows" ) ENDIF( MINGW ) TARGET_LINK_LIBRARIES( ${QDEV} ${QT_UITOOLSLIB} ${QT_QTSQL_LIBRARY} ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTNETWORK_LIBRARY} ) # Plugins support IF (AUTOPLUGINS) FILE (GLOB PLUGINS ${QDevelop_SOURCE_DIR}/plugins/*) FOREACH (PLG ${PLUGINS}) STRING (REGEX MATCH \\.svn FAIL ${PLG}) STRING (COMPARE EQUAL "${FAIL}" "" IS_EMPTY) IF (IS_EMPTY) SET (PLG_HXX "") SET (PLG_CXX "") SET (PLG_UI "") SET (PLG_MOC "") SET (PLG_UIC "") SET (PLG_TS "") SET (PLG_QM "") STRING (REPLACE "${QDevelop_SOURCE_DIR}/plugins/" "" PLG_NAME ${PLG}) MESSAGE (STATUS "Preparing plugin ${PLG_NAME} for building") FILE (GLOB PLG_HXX ${PLG}/*.h) FILE (GLOB PLG_CXX ${PLG}/*.cpp) FILE (GLOB PLG_UI ${PLG}/*.ui) FILE (GLOB PLG_TS ${PLG}/translations/*.ts) QT4_ADD_TRANSLATION (PLG_QM ${PLG_TS}) QT4_WRAP_CPP (PLG_MOC ${PLG_HXX}) QT4_WRAP_UI (PLG_UIC ${PLG_UI}) ADD_LIBRARY (${PLG_NAME} SHARED ${PLG_CXX} ${PLG_MOC} ${PLG_UIC} ${PLG_QM}) TARGET_LINK_LIBRARIES (${PLG_NAME} ${QT_UITOOLSLIB} ${QT_QTSQL_LIBRARY} ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTNETWORK_LIBRARY}) SET_TARGET_PROPERTIES (${PLG_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY plugins LIBRARY_OUTPUT_DIRECTORY plugins) ADD_DEPENDENCIES (${PLG_NAME} ${QDEV}) IF (WIN32) INSTALL (TARGETS ${PLG_NAME} DESTINATION bin/plugins) INSTALL (FILES ${PLG_QM} DESTINATION translations/${PLG_NAME}) ELSE (NOT WIN32) INSTALL (TARGETS ${PLG_NAME} DESTINATION lib/qdevelop/plugins) INSTALL (FILES ${PLG_QM} DESTINATION lib/qdevelop/translations/${PLG_NAME}) ENDIF (WIN32) ENDIF (IS_EMPTY) ENDFOREACH (PLG) ENDIF (AUTOPLUGINS) INSTALL (TARGETS ${QDEV} RUNTIME DESTINATION bin) IF (WIN32) INSTALL (FILES ${qdevelop_QM} DESTINATION translations) ELSE (NOT WIN32) INSTALL (FILES ${qdevelop_QM} DESTINATION lib/qdevelop/translations) ENDIF (WIN32) qdevelop-v0.28/Setup.iss0000644000175000017500000000451111362261070014243 0ustar jlbrdjlbrd; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=QDevelop AppVerName=QDevelop AppPublisher=Jean-Luc Biord DefaultDirName={pf}\QDevelop DefaultGroupName=QDevelop InfoAfterFile=README.txt OutputBaseFilename=setup-QDevelop SetupIconFile=resources\images\logo.ico Compression=lzma SolidCompression=yes VersionInfoVersion=1.0.0.0 [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "bin\QDevelop.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "resources\translations\*.qm"; DestDir: "{app}\translations"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtCore4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtXml4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtGui4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtNetwork4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtSql4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\plugins\sqldrivers\qsqlite4.dll"; DestDir: "{app}\QtPlugins\sqldrivers"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\plugins\sqldrivers\libqsqlite4.a"; DestDir: "{app}\QtPlugins\sqldrivers"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\mingw\bin\mingwm10.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "README.txt"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "ChangeLog.txt"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "bin\plugins\*.*"; DestDir: "{app}\plugins"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\QDevelop"; Filename: "{app}\QDevelop.exe" Name: "{userdesktop}\QDevelop"; Filename: "{app}\QDevelop.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\QDevelop"; Filename: "{app}\QDevelop"; Tasks: quicklaunchicon [Run] Filename: "{app}\QDevelop.exe"; Description: "{cm:LaunchProgram,QDevelop}"; Flags: nowait postinstall skipifsilent qdevelop-v0.28/README.cmake0000644000175000017500000000246611362261070014371 0ustar jlbrdjlbrd QDevelop - A Development Environment for Qt4 (C) 2006 Jean-Luc Biord Compiling using cmake ~~~~~~~~~~~~~~~~~~~~~ Since Version 0.20, it's possible to compile the application using cmake. Please note that the official build tool for QDevelop is still qmake, and cmake it in early beta stage. The IDE cannot handle cmake projects yet, but this may change in the future. You need to use cmake version 2.4.3 (2.4.0 and above shuold work, but only 2.4.3 and above have been tested). The compilation was tested under Linux, and on Win32 the compilation does work, but QDevelop loads up with a console window. To build QDevelop, we need to create a new subdirectory to build off source, we call cmake, and the finally make: mkdir cbuild cd cbuild cmake -G "MinGW Makefiles" ../ make Why using cmake? ~~~~~~~~~~~~~~~~ Quite frankly, qmake is nice, but it's a toy. You cannot set dependencies, you cannot make conditional compile time switches (or at lest not in an automated way, when packaging for example). Using cmake, you also have a percentage which displays how much the compilation is going on. The output is MUCH nicer: by default you do not see the "gcc -c ..." messages, instead you see nice messages saying that the file is being compiled (in color!). - diego - diegoiast@gmail.com qdevelop-v0.28/README.txt0000644000175000017500000000534211362261070014124 0ustar jlbrdjlbrd QDevelop - A Development Environment for Qt4 (C) 2006-2010 Jean-Luc Biord Installation ~~~~~~~~~~~~ Download is available from http://biord-software.org/qdevelop, the official website. You need Qt (from Trolltech) at least version 4.3 to be able to compile QDevelop. Most Linux distributions normally already package the latest version of Qt, so it is likely that you need to worry about this. However, you need the development package as well (sometimes named as qt-devel or qt4-devel, it varies depends on the distributions). The simplest way to compile QDevelop package is: 1. Extract the source zip. 2.`cd' to the directory containing the package's source code and type `qmake' (`qmake -recursive' with Qt 4.3.x) to generate the Makefile for your system. 3. Type `make' on Linux or `mingw32-make` on Windows to compile the package. 4. The executable file QDevelop (QDevelop.exe under Windows) is built on bin/ directory. If you want to have code completion, install the package ctags. Under Linux, ctags is normally installed with development packages. For Windows, ctags is accessible here : http://freefr.dl.sourceforge.net/project/ctags/ctags/5.8/ctags58.zip If you want to have debugging functionalities, you must install gdb. Like ctags, gdb is normally installed with development packages under Linux. gdb for Windows is available here : http://www.mingw.org/download.shtml/ You can also compile QDevelop using cmake, but this is not fully supported yet. For more information read the documentation found in README.cmake. Command line options ~~~~~~~~~~~~~~~~~~~~ QDevelop may be launched with some parameters: QDevelop [-l translation] [file(s)] [project] -l translation When QDevelop starts, it detect automatically the language of installed system. If you want to use another language, use this option. Available languages are English, French, German and Dutch. [file(s)] Open the files in editors. [project] Open the (.pro) file in QDevelop. The other files are closed before open the project. Documentation ~~~~~~~~~~~~~ Up to date documentation can be found at: http://biord-software.org/qdevelop License ~~~~~~~~~~~~~ Copyright (C) 2006-2010 Jean-Luc Biord QDevelop 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. qdevelop-v0.28/copying0000644000175000017500000004311011362261070014014 0ustar jlbrdjlbrd GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qdevelop-v0.28/qdevelop.spec0000644000175000017500000000317611362261070015124 0ustar jlbrdjlbrdSummary : A Development Environment for Qt4 Name : qdevelop Version : 0.25 Release : 1 License : GPL Group : Development/C++ URL : http://qdevelop.org/ Source : %{name}-%{version}.tar.gz Packager : Diego Iastrubni BuildRoot : %{_tmppath}/%{name}-%{version}-%{release}-builtroot BuildRequires : cmake libqt4-devel Requires : libqt4-devel ctags gdb %description QDevelop is a development environment entirely dedicated to Qt4. QDevelop requires Qt4, gcc under Linux or MinGW under Windows, possibly gdb for program debugging and ctags for code completion. QDevelop is available in English, French, German, Dutch, Polish, Spanish, Chinese, Russian, Italian, Ukrainian, Czech and Portuguese. If you want to translate in your language, please contact me. QDevelop is not a Kdevelop like or reduced. It's an independent IDE dedicated to Qt and is totally independent of KDevelop. Less complete, but faster, light and especially multi-platforms. QDevelop and KDevelop have different code sources. %prep %setup mkdir cbuild cd cbuild; cmake ../ %build make -C cbuild %install [ "%{buildroot}" != '/' ] && rm -rf %{buildroot} #mkdir -p $RPM_BUILD_ROOT/%{instaldir_bin} #cp cmake/QDevelop $RPM_BUILD_ROOT/%{instaldir_bin} mkdir -p %{buildroot}/usr/bin cp cbuild/QDevelop %{buildroot}/usr/bin/qdevelop %clean rm -fr cbuild %post # empty %preun # empty %postun # empty %files %defattr(-,root,root) %doc copying %doc ChangeLog.txt %doc README.txt /usr/bin/* %{instaldir_bin}/* %changelog * Sat Dec 8 2007 Diego Iastrubni - 0.25-1 - first package version qdevelop-v0.28/qdevelop.desktop0000644000175000017500000000063311362261070015636 0ustar jlbrdjlbrd[Desktop Entry] Name=QDevelop GenericName=QDevelop Comment=A development environment dedicated to Qt4 Comment[ru]=Среда разработки для Qt4 Comment[fr]=Un environnement de développement intégré pour Qt4. Comment[de]=Eine Entwicklungsumgebung für Qt4 Exec=qdevelop Icon=qdevelop Terminal=false Type=Application Categories=Qt;Development;IDE; MimeType=application/vnd.nokia.qt.qmakeprofile qdevelop-v0.28/ChangeLog.txt0000644000175000017500000004663011362261070015023 0ustar jlbrdjlbrdMarch 20 2010 Version 0.28: - Localization support for plugins - Added formating-astyle plugin (former AStyle-Plugin) for formatting and indenting source code - Added tools-regexp-planner (based on "RegExp Planner" project) for testing regular expressions - CMake build system now supports building and installing of plugins - Fix issue 352, 353, 361, 365, 374, - Add qdevelop.desktop, which will be used by the Linux packagers - Show quotes in error message - Plugins building support in the main CMakeLists.txt. If enabled, CMake will try to detect and build plugins in the "plugins" subdirectory. It will also prepare them to be installed via "make install". The feature is disabled by default, to enable it use something like: $ cmake ../ -DAUTOPLUGINS=1 February 20 2009 Version 0.27: - Fixed a lot of issues (among them several segfaults, incorrect work with relative paths, some translation issues) - Several editor improvements: word wrap, right margin line - Changable autohide delay for find and replace widgets - Updated English, French, Russian, German, Polish, Portuguese, Czech, Hungarian and Italian translations - Option for autoclosing comment blocks in editor - Better interaction with Qt Assistant >= 4.4.0 - Menu item for forcing qmake debug or release mode without changing project file - The "Find in Files" function now supports simple replacing as well - Smart click feature: ctrl+left click on some keyword in editor for "Goto implementation" command, meta(super,win)+left click - for "Goto declaration" - QDevelop settings file is hidden on *NIX (renamed to .qdevelop) - Partly fixed multiple error messages when unable to connect to SqLite database - Better error and warning detection in make output, detection of linker errors - Compiling QDevelop via CMake now supports install feature - Plugins path is no longer hardcoded to be /usr/lib/qdevelop/plugins but is relative to executable path - Fixed 'Add new item': on right-clicking on 'Headers' etc subtrees it misdetected project to which new file should belong - Fixed problem with spaces in executable name - Following keywords are now highlighted: emit, qobject_cast, forever - Added link_pkgconfig to project properties (CONFIG qmake variable) - "Sort" feature was temporary dropped because it would brake any complicated project file - will return in 0.28 - Several important fixes for Mac OS X November 05 2008 Version 0.26: - Fix many issues - The Replace widget is now embeded in editors as the Find widget. - Mac OS enhancements - Update the gui, now all dock windows are QDockWidget, and not widgets - Assistant can be started and controled with the version 4.4.0 of Qt. Works also with previous versions. December 12 2007 Version 0.25: - Display white spaces on text editors (revisions 192, 236, 237) - Open dialog remembers filter used (revision 193) - Support for extra parameters for make (revision 194) - Improve creation of sub-projects, speed updates to the text editor under some Linux versions of Qt4 (revision 194) - Added encoding support to load/save files, defaults to UTF8 (revision 198) - Improvement of the code completion (revisions 199, 200, 203, 208, 210-213, 220-223, 225, 251-252 ) - In "Options Dialog", allow to define the Qt include directory used to build the Qt classes database. (revision 204) - The "Find in Files" function shows the filenames with the relative names in the window of files found. Thanks to Simon Viennot . (revision 209) - CMake support: QDevelop can be built using cmake (revisions 216, 219, 238, 257, 272) - Added shortcuts to most GUI items (revisions 217, - GUI has been simplified to reduce space screen (revision 227, 231, 235, 249, 263) - Added conditional breakpoints in debugging functions. (revision 230) - Now it's possible to disable the editor toolbars. The button to switch to header/source is instead displayed in the outer editor toolbar. (revision 236) - Middle click on line numbers makes a break point, left click a bookmark (revision 237) - Middle click on a dialog in the project explorer will preview the dialog (revision 238) - On text editors, hide the mouse cursor only if the editor has the focus. (revision 244) - Fixed segfault when opening a non-sourcecode file (i.e. a file where the inner editor toolbar is not displayed) (revision 248) - Added functionality to modify registers (revision 249, 250) - Changed home key: It now first moves the cursor to the first character of the current line, and after pressing it again, to the beginning of the line. The same behaviour is used for shift+home. (revisions 253, 255) - New feature: Editor mode. It will toggle the display visibility state of all dockwidgets and display only the editor. Shortcut control+E (revisions 256, 264) - English "translations" updated (revisions 271,273) - A new feature allows to compile automatically (every 5 seconds) the files (.cpp) edited. This compilation is made in background in a temporary file. The warnings and errors are marqued in the column numbers by the yellow and red warning panels. If the mouse is moved in a panel, a tooltip is showed and gives the message given from the compiler. (revisions 261-262, 265-270) August 11 2007 Version 0.24: Corrections and improvements: - Source/header navigation after files are renamed is working once more (fixes issue 137) - Updated translations for * Chinese (Henri Girard ) * Vietnamese (Chuong.Nguyen@eng.monash.edu.au) * Italian (Rafael Venancio ) * Portuguese (Rafael Venancio ) * Spanish (Jorge Daniel Sampayo Vargas ) * Turkish (fatih.asici@gmail.com) * German (Ralf Jung ) - The build log window is now a sub-class of QTextEdit. It is possible to copy and paste by right-click the texts in this window (fixes issue 136 and 141) - Make moving up/down in files explorer equivalent to clicking items, and Return equivalent to clicking Open (fixes issue 154) - Updated the shape of the tabs on the output dock window (revisions 182, 183) - Improove handleing of pro files (revision 185,187) - Fixed various crashes related for the code completion (revision 184,188) - The list of include directories is parsed by the code completion each time it is necessary (fixes issue 145) - Commet/Uncomment line fixes, thanks to Simon Viennot (fixes issues 101, 113 and 131). - Fixed function/method names color bug (fixes issues 77 and 96) - Line numbers are consistant with text editor, improved undo/redo behavior, enhanced find in document behavior, Removed Undo and Redo from editor context menu and moved Goto Implementation and Goto Declaration to the top. Thanks to Branimir Karadzic (revision 144) - Fixed templates for win32-msvc2005 target. Thanks to Branimir Karadzic . (revision 145) - Find in files funtions has been improoved (revision 147). - Completion improvement: If a function has many overloaded versions, the code completion choose the version with the biggest number of parameters, overcome some problems with ctags and Qt macros (revision 151) - When adding files to a project if the directories do not exixt, create them (revision 154) - New text format used in the source, which allows to translate more easily. Thanks to Simon Viennot . (revision 155) - Indentation should be working once more (fixes issue 18) - When creating a new dialog, the template will use by default QDialogButtonBox (fixes issue 83) - Order of widgets in tools control is revised, also use QDialogButtonBox instead of normal buttons (fixes issue 89) - Improved save and restore of MainWindow position, size and state (fixes issue 103). - Break IDE closing with Cancel button if project changes are not saved (fixes issue 107) Adds: - Add "Goto Declaration" and "Goto Implementation" entries in the popup menu showed by right-click in an editor. After the right-click on a word, the program find the member object or function and his class then, if possible allows to go to the implementation and the declaration files. - Since Qt 4.3.0, Designer can be controlled as Assistant by socket. That allows to open all UI files with one instance of Designer. - Added an entry to the main menu to open class methods combo box for fast lookup without using mouse. Thanks to Branimir Karadzic . (revision 146) - Hide mouse cursor while typing code (fixes issue 24) May 29 2007 Version 0.23 Corrections: - Prevents the opening of the same file in several tab. The code completion works now with the classes created in the project. When the IDE auto-completes some code, it also add the "()" after the cursor, and place the cursor in the best position possible. - Fix a problem with packaged versions of QDevelop. With these versions, the code completion did not work. Adds: - Add Portuguese translation thanks to Giuliano Santana - Add Vietnamese translation. Thanks to Chuong Nguyen - In subclassing, the code is now added in editor if the file is opened in tab (before, the code was added always in files on disk, even with the file opened). April 11 2007 Version 0.22 Corrections: - Fixed cmake compilation. Now executable is called QDevelop. I think I will have to revert this for UNIX* environemtns, in which the binary should be named qdevelop. - Update the code to accept the plugins in subdirectory of executable directory. - Fix the kind for field implementation (int to string) in table classesbrowser in database. - Fix items alignment default in projectpropertie.ui - In project database, opened files are now saved with relative paths to the project directory. If project directory is moved to other path, the files are correctly reopened. This commit saves relative paths for files in classes browser too. - Fix a crash when "Refresh contents" is called on tree browser without project opened. Adds: - Add czech translation language. - Add Ukrainian translation. - The application accept now "GNU make" as previously but also others like "FreeBSD make". - With a right-click on a class name in classes browser, it is possible to: - Add a new method to the class (can be a slot or a signal) - Add a new variable member - With a right-click on a member variable of a class in classes browser, it is possible to: - Add set and get methods for this variable member. Version 0.21-svn Adds: - Colorized matching for ( and { October 26 2006 Version 0.20 Name: - QIde becomes QDevelop at October 4, 2006 Corrections: - A crash if a file is opened without project - Bug in classes explorer when a sub-project have a name identical of the main project. - Deletion of Auto-Hide docks, not working with Qt 4.2 - The settings are now written in qdevelop.ini file in the user home directory. - The database of project is named "qdevelop-settings.db" in project directory. - New C++ highlighter Adds: - The Default projects directory can be set in options dialog. - Bookmarks. Bookmarks can be toggled on menu bar and by right-click in margin number or editor. - Add "Next Bookmark" and "Previous Bookmark" to menu Bookmark. - Add Bookmarks toolbar. - Save bookmarks and breakpoints in project settings - Add "console" to CONFIG variable in (.pro) file for new projects to have qDebug() written on debug console under Windows. - Modification of the class browser to understand functions overloading. - When a project is closed, the content of class browser is saved in database project.db. With this database, the content is reloaded very quickly during the loading of the project. This feature require to have the SQL driver sqlite enable. On build enter the option -qt-sql-sqlite after the configure command. - Moving tabs with mouse to switch between us - Detection when a file was modified by another program and ask for save or reload. - Two tabs to show debugged variables program. Deletion of line edit "Debug command", obsolete with new tabs. - Templates to create a project (based on dialog or main window). - The code completion list contains the name and signature of functions. - Entries "Close Other Tabs" and "Close All Tabs" in popup menu showed by right-click on editor Tab. - Add Polish, Spanish, Chinese and Russian translations - The application can be build using cmake (experimental!) September 25 2006 Version 0.19 Corrections: - The code is entirely translated in English, variables, function names and file names. - Improvement of completion, much faster (5 or 6 times). An improved code increases its reliability. - The location of qmake is determined in this order: 1. Read in INI file the lasted saved location. If it not saved, use : QLibraryInfo::location( QLibraryInfo::BinariesPath )+"/qmake"; 2. Test if the location finded on 1 is good, otherwise display a dialog for choose qmake location In options dialog, it is possible to change the location of qmake anytime. Adds: - The classes explorer to navigate into classes and members. By right-click, each item can display the two files of a member or function: implementation and declaration. The double-click shows the implementation if available. The items are updated in real time when the text in editor is modified and the interval between two updates can be configured in options dialog. This new feature require ctags. - The project QIde is now a single project without plugin projects (dockplugin, lineedithistoplugin and treeprojectplugin), not requires to build the application. - On close, "Replace" and "Find in files" dialogs saves their options to reuse on next showing. - Menu "Debug | Parameters" to configure the arguments of program, his working directory and environment variables. - Menu "Debug | Calls Stack" to show all functions called. Is equivalent to the 'backtrace' gdb command. In the dialog, when a line is activated, the file is opened on good line. August 28 2006 Version 0.18-a Corrections: - A crash when "Edit | Toggle comment" is choose on unselected line. - A crash when Enter key is pressed in a header. - Widgets in preview dialogs are now connected. - Audo-hide dock does not work on Qt 4.2.x and this feature is disabled for this version. - Problem if current line color is disabled in options dialog. Adds: - Actions "Comment" and "Uncomment". August 27 2006 Version 0.18 Corrections : - Now detect translated "error" and "warning" strings in gcc logs to show lines on red and blue and to permit the double-click to open editors. - Crash on starts when last project is not present - Rewriting of cpp syntax highlighter. Work well and more quickly. Highlighting is now enabled only for .c, .cpp, .cc and .h files only. - Remove stranges characters in Build Log window. - The location of qmake is set during QIde compilation then used to call qmake. But sometimes this location is not good thus in options dialog it is possible configure it. - Rewriting of parser who populates the combo classes and methods. Now requires ctags and normally works with all styles of code. Adds : - Auto brackets in editor. When "{" is pressed, "}" gets added to the text automatically and text between is indented. - Highlight current line - On dialogs, a right-click on item preview the dialog, without opening Designer. Each widget shows a tooltip containing his name and classname. - Dutch translation - Find in files - Improvement of the Qt contextual help. When F1 is pressed on word in editor, Assistant is launched. - If the word is an Qt object, the corresponding page is displayed (qstring.html if the word is QString). - If the word is a function, the page called is the class of this function and in the page the anchor corresponding of the word is displayed. Example : in code : QString foo="ab"; foo = foo.remove("a"); If F1 is pressed on the word "remove", Assistant shows the page qstring.html at the place of the anchor "remove". That does not work every time because the anchor names are not always identical to the names of functions. - The Project explorer have now two view modes accessible by right click then choose "Show As". - Close a tab by right-click on it even if it is not the currrent tab. August 12 2006 Version 0.17 Corrections : - Some small defaults. Adds : - Code completion available thanks to Fr�d�ric Julian and his excellent work. Completion need ctags under Linux and Windows. On Linux it is normaly installed with package developement. On Windows it should be downloaded on the site of ctags: http://ctags.sourceforge.net/ - Possibility to change background color of editors in options dialog. - Goto line dialog. - Replace dialog. - Find works like in Firefox at bottom of editors. August 6 2006 Version 0.16 Corrections : - Add good templates (QDialog, QMainWindow and QWidget) for forms (.ui) append. - The find method of executable name was rewritten and work better. - Shortcuts dialog was rewritten to delete empty lines. - Good compatibility 64bits. Adds : - On editor, the tabs can be replaced by spaces. - The end-of-line can be configured to Default, Unix or Windows mode. In Linux mode, the lines are terminated by "\n". In Windows by "\r\n". In default mode, the end-of-line terminators are translated to the local encoding. - By right-clic on Dialog (.ui) on "Project Explorer", it is possible to create or update the files subclassed. The auto-connect slots can be selected and created on implementation files. July 18 2006 Version 0.15 Corrections : - Complete rewriting of the auto-hide docks. The docks have now a button to make them maskable, like VS. Adds : - A dialog to configure all shortcuts. - Compatibility 64bits. Without guarantee of working fine currently. July 16 2006 Version 0.14 Corrections : - The number margin correctly adapts its size to number digits Adds : - To maximize the size of editors, the docks "Explorer of project" and "Outputs" are automatically masked. - The project configuration dialog has two modes: normal (by default) and advanced. - In project configuration dialog, a list of Qt variables is proposed when a variable is added. - The application accepts a list of files or project in parameter which are automatically open. - Some short cuts keyboard : - F9 : Toggled breakpoint on editor July 15, 2006 Version 0.13 Corrections : - Better management of the long files in the editor Adds : - Translation in German. Thanks to Adrian Debbeler - Some short cuts keyboard : - Shift+F5 : Stop program debugging - Shift+F11 : In debugging, step out - Esc : Return and set focus to current editor. - Find box says when the text is not found, like Kate. July 13, 2006 Version 0.12 Corrections: - Maximum Size for the combo ?Methods?. Problem with the too long methods. Adds - Checking of the version debug or release before execute a program. With warning when the editing version is not available. - The interface is now in English. Addition of the French translation. - Some short cuts keyboard: - Shift+F12 Switch between header and sources - Ctrl+W Close the current editor - Alt+Right Next Tab - Alt+Left Previous Tab July 12, 2006 Version 0.11 Corrections: - Pb with the : character on string. In particular on Windows paths - Modification of the module ?Property of project? for better managing the scopes. Adds: - Possibility of changing the colors of editor. - When user double-click on file name, DEPENDPATH variable is read to find file. - With right-click on project explorer, run lupdate and lrelease directly. July 9, 2006: 0.10 Beta June 1, 2006: Beginning of the development qdevelop-v0.28/QDevelop.rc0000644000175000017500000000011511362261070014464 0ustar jlbrdjlbrdIDI_ICON1 ICON DISCARDABLE "resources/images/logo.ico" qdevelop-v0.28/ui/addnew.ui0000644000175000017500000002056011362261070014643 0ustar jlbrdjlbrd AddNew 0 0 554 231 Add New Item :/divers/images/logo.png 9 6 0 6 Files false 9 6 Translation :/treeview/images/linguist.png Resources :/treeview/images/qrc.png Dialog :/treeview/images/designer.png Header :/treeview/images/h.png Sources :/treeview/images/cpp.png true 0 6 0 6 0 6 Project or Scope: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File Name : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 6 newfile.cpp 1 0 6 ... 0 6 Qt::Horizontal 40 20 OK Cancel Qt::Vertical 20 126 filename location directoryButton comboProjects source header dialog resource translation okButton cancelButton cancelButton clicked() AddNew reject() 290 172 171 122 qdevelop-v0.28/ui/openfile.ui0000644000175000017500000000436011362261070015202 0ustar jlbrdjlbrd OpenFile 0 0 496 406 Open File in Project 0 370 491 33 0 6 Qt::Horizontal 131 31 OK Cancel 10 10 481 321 true true 10 340 481 22 cancelButton clicked() OpenFile reject() 369 253 179 282 qdevelop-v0.28/ui/toolsControl.ui0000644000175000017500000002762111362261070016107 0ustar jlbrdjlbrd ToolsControl 0 0 519 427 External Tools 9 6 Please enter the path to the external programs: 0 6 :/divers/images/good.png ctags: ... :/divers/images/good.png linguist: ... ... :/divers/images/good.png :/divers/images/good.png ... :/divers/images/good.png ... true false assistant: true false :/divers/images/good.png ... true false gdb: ... :/divers/images/good.png designer: :/divers/images/good.png true false true false true false ... lupdate: lrelease: qmake: true false true false true false make: :/divers/images/good.png ... Qt::Vertical 501 16 false Check environment on start true 0 6 &Test Qt::Horizontal 131 31 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok qmake make gdb ctags linguist lupdate lrelease designer assistant checkEnvironmentOnStartup test qmakeLocation makeLocation gdbLocation ctagsLocation linguistLocation lupdateLocation lreleaseLocation designerLocation assistantLocation qdevelop-v0.28/ui/projectpropertie.ui0000644000175000017500000011312411362261070017000 0ustar jlbrdjlbrd ProjectPropertie 0 0 573 554 0 0 Dialog :/divers/images/logo.png:/divers/images/logo.png true 9 6 6 0 0 0 Project Template 9 6 app true lib subdirs 6 0 0 0 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Default directories 9 6 Dialogs: ... ... Sources: 0 0 0 Configuration 9 6 6 0 6 0 6 0 General : 6 0 6 0 Version 9 6 build_all debug true release debug_and_release Qt::Vertical QSizePolicy::Maximum 20 40 6 0 Warnings 9 6 warn_off warn_on false Qt::Vertical 101 21 6 0 Qt Libraries 9 6 6 0 6 0 core network sql xml gui script 6 0 opengl svg qt3support webkit phonon xmlpatterns Qt::Vertical 20 20 Qt::Horizontal 40 20 Qt::Vertical 20 40 Variables 9 6 6 0 6 0 6 0 0 0 Variable : 0 0 6 0 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png Qt::Horizontal 40 20 6 0 0 0 Values : 0 0 6 0 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png ... :/toolbar/images/edit.png:/toolbar/images/edit.png Qt::Horizontal 131 20 Advanced options Advanced Options 9 6 6 0 6 0 6 0 app_bundle assistant console designer dll 6 0 exceptions lib_bundle link_pkgconfig no_lflags_merge opengl 6 0 plugin ppc qaxcontainer qaxserver qt false 6 0 qtestlib resources rtti staticlib stl 6 0 thread uic3 uitools windows x11 x86 Qt::Vertical 20 40 6 0 Free CONFIG variables : 6 0 6 0 Qt::Horizontal 40 20 OK Cancel cancelButton clicked(bool) ProjectPropertie reject() 496 617 475 267 qdevelop-v0.28/ui/newvariable.ui0000644000175000017500000001327511362261070015705 0ustar jlbrdjlbrd NewVariable 0 0 436 269 Dialog 9 6 0 6 New Variable : Qt::Horizontal 40 20 Qt Variables 9 6 User Variable true false 9 6 Variable : 0 6 Operator : = += -= *= ~= Qt::Horizontal 40 20 0 6 Qt::Horizontal 131 31 OK Cancel okButton clicked() NewVariable accept() 331 196 96 233 cancelButton clicked() NewVariable reject() 424 196 179 233 groupUserVariable toggled(bool) groupBox setDisabled(bool) 46 131 56 71 qdevelop-v0.28/ui/newimplementation.ui0000644000175000017500000001231611362261070017140 0ustar jlbrdjlbrd NewImplementation 0 0 426 187 New Implementation true 9 6 0 6 0 6 Class Name : File Name : Location : 0 6 false false 0 6 true 4 0 0 0 ... Qt::Vertical 20 40 0 6 Qt::Horizontal 40 20 false &Ok false C&ancel okButton clicked() NewImplementation accept() 188 218 99 227 cancelButton clicked() NewImplementation reject() 283 223 305 179 qdevelop-v0.28/ui/addnewclassvariable.ui0000644000175000017500000002530711362261070017403 0ustar jlbrdjlbrd AddNewClassVariable 0 0 358 270 Add New Variable 9 9 9 9 6 6 Create get/set methods false 9 9 9 9 6 6 false inline true false inline true false set method false get method Qt::Vertical 340 20 6 0 0 0 0 Qt::Horizontal 131 31 OK Cancel 6 0 0 0 0 6 0 0 0 0 Variable Name: Type: Scope: 6 0 0 0 0 6 0 0 0 0 true Qt::Horizontal 40 20 6 0 0 0 0 true false Qt::Horizontal 40 20 variableName type scope get getName getInline set setName setInline okButton cancelButton cancelButton clicked() AddNewClassVariable reject() 347 257 325 123 get toggled(bool) getName setEnabled(bool) 65 147 148 149 get toggled(bool) getInline setEnabled(bool) 77 135 293 149 set toggled(bool) setName setEnabled(bool) 80 175 145 175 set toggled(bool) setInline setEnabled(bool) 23 174 315 178 qdevelop-v0.28/ui/shortcuts.ui0000644000175000017500000000553311362261070015442 0ustar jlbrdjlbrd Shortcuts 0 0 400 300 Configure Shortcuts true 9 6 true false 0 Action Shortcut 0 6 Default Qt::Horizontal 131 31 OK Cancel okButton clicked() Shortcuts accept() 278 253 96 254 cancelButton clicked() Shortcuts reject() 369 253 179 282 qdevelop-v0.28/ui/exechoice.ui0000644000175000017500000000663311362261070015342 0ustar jlbrdjlbrd ExeChoice 0 0 389 172 QDevelop :/divers/images/logo.png 9 6 0 6 Qt::Vertical 77 21 OK Cancel 0 6 Choose program to Debug : Don't ask question anymore true okButton clicked() ExeChoice accept() 351 38 233 29 cancelButton clicked() ExeChoice reject() 330 66 197 125 list doubleClicked(QModelIndex) ExeChoice accept() 126 113 169 115 qdevelop-v0.28/ui/options.ui0000644000175000017500000010656711362261070015110 0ustar jlbrdjlbrd Options 0 0 578 563 Options :/divers/images/logo.png:/divers/images/logo.png true 9 6 0 General 9 6 Save all before build false Automatic compilation 0 6 Qt include directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... Default projects directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... ... Qt documentation directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Make extra parameters: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... User plugins directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Prompt before quit Reload last project when the application starts false 6 0 Show classes explorer Qt::Horizontal 40 20 Interval between updates: 1 seconds Qt::Horizontal 40 20 Close button in each tab (does not work with all styles) Qt::Vertical 20 40 Editor 9 6 Qt::Vertical 20 40 6 0 6 0 Font: End of line Tab size Files encoding: Current line background Text background Text color 6 0 6 0 0 0 Default Unix Dos/Windows 6 0 Replace Tab by spaces 6 0 ... Qt::Horizontal 40 20 6 0 ... Qt::Horizontal 40 20 6 0 ... Qt::Horizontal 40 20 options 9 6 6 0 Matching ( and { 6 0 ... Qt::Horizontal 40 20 Right margin line Column: rightMarginPos false 1 200 80 Qt::Horizontal 40 20 Hide Find/Replace panels after false 1 60 10 sec. Qt::Horizontal 40 20 Selection border Auto-Brackets Complete Code Autoindent Line numbers Syntax highlighting false Display editor toolbars Display white spaces Auto-Comments Word wrap Ctrl+click = Go to implementation, Meta+click = Go to declaration groupBox_6 Syntax highlighting 9 6 Qt::Vertical 20 40 6 0 6 0 Function/method names : Preprocessor : Qt words : Keywords : Single comments : Multiline comments : Quotation strings : 6 0 ... ... ... ... ... ... ... MS Shell Dlg 2 9 50 false false false false QTextEdit::NoWrap true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> 6 0 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults groupHighlightCurrentLine toggled(bool) lineColor setEnabled(bool) 110 63 110 63 showTreeClasses toggled(bool) interval setEnabled(bool) 84 170 393 169 match toggled(bool) matching setEnabled(bool) 110 63 110 63 buttonBox accepted() Options accept() 317 494 314 473 buttonBox rejected() Options reject() 209 491 201 474 rightMarginLine toggled(bool) rightMarginPos setEnabled(bool) 102 450 149 450 hideFindReplace toggled(bool) findReplaceDelay setEnabled(bool) 135 460 269 460 qdevelop-v0.28/ui/addnewclassmethod.ui0000644000175000017500000002343711362261070017100 0ustar jlbrdjlbrd AddNewClassMethod 0 0 358 225 Add New Method 9 9 9 9 6 6 6 0 0 0 0 6 0 0 0 0 Method Name: Return type: Parameters: Scope: 6 0 0 0 0 6 0 0 0 0 true Qt::Horizontal 40 20 6 0 0 0 0 true false Qt::Horizontal 40 20 6 0 0 0 0 Inline Virtual Static Pure 6 0 0 0 0 Qt::Horizontal 131 31 OK Cancel Qt::Vertical 340 16 methodName returnType scope parameters Inline Virtual Static Pure okButton cancelButton cancelButton clicked() AddNewClassMethod reject() 347 212 179 224 Pure toggled(bool) Virtual setOn(bool) 282 149 114 154 Pure toggled(bool) Static setDisabled(bool) 287 142 218 149 Pure toggled(bool) Virtual setDisabled(bool) 269 139 125 141 Pure toggled(bool) Inline setDisabled(bool) 307 147 50 147 qdevelop-v0.28/ui/addnewclass.ui0000644000175000017500000002510511362261070015671 0ustar jlbrdjlbrd AddNewClass 0 0 447 440 Add New Class 9 6 6 0 Qt::Horizontal 40 20 false OK Cancel Inheritance 9 6 6 0 false Qt::Horizontal 40 20 Inherits another class Ancestor: false false Ancestor's include filename: Scope: Filenames 9 6 6 0 6 0 Header filename: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Implementation filename: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 0 0 6 0 ... 6 0 6 0 Project or Scope: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Class name: Constructor arguments: 6 0 Virtual destructor checkboxInherits toggled(bool) ancestor setEnabled(bool) 80 145 210 172 checkboxInherits toggled(bool) ancestorFilename setEnabled(bool) 107 146 201 200 checkboxInherits toggled(bool) scope setEnabled(bool) 65 147 193 228 cancelButton clicked() AddNewClass reject() 396 434 67 443 qdevelop-v0.28/ui/findwidget.ui0000644000175000017500000001203211362261070015520 0ustar jlbrdjlbrd FindWidget 0 0 772 27 Form 0 0 0 6 :/toolbar/images/cross.png true 0 0 0 0 150 0 Previous :/divers/images/previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/divers/images/next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive Whole words QFrame::Box QFrame::Raised 0 0 0 0 6 :/divers/images/wrap.png Reached end of page, continued from top Qt::Horizontal 41 21 qdevelop-v0.28/ui/main.ui0000644000175000017500000014355611362261070014340 0ustar jlbrdjlbrd Main 0 0 1601 590 0 0 QDevelop :/divers/images/logo.png:/divers/images/logo.png true QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::VerticalTabs false 0 0 1601 21 &Edit &Bookmarks &Debug &? true &Project &Last Projects B&uild En&force qmake mode &File Las&t Files &View true &Toolbars true true Dock windows true &Tools &Plugins settings Plugins Ed&itors Files toolbar Qt::Horizontal TopToolBarArea false Edit Toolbar Edit Toolbar Edit Toolbar Edit Toolbar Qt::Horizontal TopToolBarArea false Build and Debug Toolbar Qt::Horizontal TopToolBarArea false Call Stacks 2 0 0 Registers 2 0 0 0 0 Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Build 8 0 0 0 0 Lucida Console QFrame::NoFrame true Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Outputs 8 0 0 0 0 Lucida Console QFrame::NoFrame true Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Local Variables 8 0 0 QFrame::NoFrame true QAbstractItemView::SelectRows Name Type Address Value Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Other Variables 8 0 0 6 0 6 0 Qt::Vertical QSizePolicy::Maximum 20 40 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png Qt::Vertical 20 40 true QAbstractItemView::SelectRows Name Type Address Value Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Find in files 8 0 0 Qt::Horizontal Lucida Console QFrame::NoFrame Lucida Console QFrame::NoFrame Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Files 1 0 0 0 0 false QDockWidget::AllDockWidgetFeatures Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Classes 1 0 0 1 :/toolbar/images/filenew.png:/toolbar/images/filenew.png &New Project... :/toolbar/images/filenew.png:/toolbar/images/filenew.png &New File... New File New File &File... :/toolbar/images/fileopen.png:/toolbar/images/fileopen.png &Open Project... :/toolbar/images/fileclose.png:/toolbar/images/fileclose.png &Close All Files :/toolbar/images/filesave.png:/toolbar/images/filesave.png &Save File Ctrl+S :/toolbar/images/filesaveas.png:/toolbar/images/filesaveas.png Save File &as... :/toolbar/images/filesaveall.png:/toolbar/images/filesaveall.png Save A&ll :/toolbar/images/exit.png:/toolbar/images/exit.png &Quit :/toolbar/images/undo.png:/toolbar/images/undo.png &Undo Undo Undo Ctrl+Z :/toolbar/images/redo.png:/toolbar/images/redo.png &Redo Redo Redo Ctrl+Shift+Z :/toolbar/images/editcut.png:/toolbar/images/editcut.png Cu&t Ctrl+X :/toolbar/images/editcopy.png:/toolbar/images/editcopy.png &Copy Ctrl+C :/toolbar/images/editpaste.png:/toolbar/images/editpaste.png &Paste Ctrl+V Select All Ctrl+A :/toolbar/images/find.png:/toolbar/images/find.png &Find... Ctrl+F &Replace... Ctrl+R &Find in Files... Ctrl+Shift+F Add New &Item... Add New Item Add New Item Ctrl+N Add Existing &Files... Add Existing Files Add Existing Files New Folder true Project &Properties... Project Properties Project Properties &Clean Clean Clean :/toolbar/images/rebuild.png:/toolbar/images/rebuild.png &Rebuild Rebuild Rebuild :/toolbar/images/compile.png:/toolbar/images/compile.png Compile File Compile File Compile File Shift+F7 :/toolbar/images/exec.png:/toolbar/images/exec.png S&tart Program Start Program Start Program Shift+F5 :/toolbar/images/dbgstep.png:/toolbar/images/dbgstep.png Step &Into Step Into Step Into F11 :/toolbar/images/dbgnext.png:/toolbar/images/dbgnext.png Step O&ver Step Over Step Over F10 &Calls Stack Calls Stack Calls Stack &Options... &Parameters... &About... About &Qt... :/toolbar/images/fileopen.png:/toolbar/images/fileopen.png &Open... Ctrl+O Find &Next F3 true :/toolbar/images/pause.png:/toolbar/images/pause.png &Stop Stop Stop F6 Breakpoints... :/toolbar/images/buildstop.png:/toolbar/images/buildstop.png &Stop Build :/toolbar/images/indente.png:/toolbar/images/indente.png Indent selection Tab :/toolbar/images/desindente.png:/toolbar/images/desindente.png Unindent selection Shift+Tab :/toolbar/images/helpassistant.png:/toolbar/images/helpassistant.png &Help Current Qt Word F1 &Reset Executables List true true Project Explorer Outputs Files :/toolbar/images/dbgrun.png:/toolbar/images/dbgrun.png &Debug :/toolbar/images/build.png:/toolbar/images/build.png &Build F7 :/toolbar/images/filesave.png:/toolbar/images/filesave.png &Save Project Save Project As... :/toolbar/images/fileclose.png:/toolbar/images/fileclose.png C&lose Project Add &Scope... :/toolbar/images/dbgstepout.png:/toolbar/images/dbgstepout.png Step &Out Shift+F11 &Close Current Editor Ctrl+W true &Next Tab Alt+Right true &Previous Tab Alt+Left true &Switch to Header/Sources Shift+F12 Set &Focus to Editor Esc :/divers/images/breakpoint.png:/divers/images/breakpoint.png Toggle &breakpoint F9 Goto &Methods List Configure &Shortcuts... &Goto Line... Ctrl+G Toggle Co&mments Ctrl+D Comment Uncomment Complete Code Ctrl+Space :/divers/images/bookmark.png:/divers/images/bookmark.png Toggle &Bookmark Toggle Bookmark Toggle Bookmark Ctrl+B :/divers/images/clearallbookmarks.png:/divers/images/clearallbookmarks.png Clear &All Bookmarks Ctrl+F2 E&xternal Tools... :/divers/images/bookmarknext.png:/divers/images/bookmarknext.png &Next Bookmark F2 :/divers/images/bookmarkprevious.png:/divers/images/bookmarkprevious.png &Previous Bookmark Shift+F2 Find Pr&evious Shift+F3 Goto matching &bracket Goto matching bracket Goto matching bracket Ctrl+[ Foo Add New &Class... :/toolbar/images/print.png:/toolbar/images/print.png &Print... Open F&ile in project... Alt+Shift+O :/treeview/images/cpp.png:/treeview/images/cpp.png Goto &Implementation :/treeview/images/h.png:/treeview/images/h.png Goto &Declaration &Rebuild Qt classes database Execute &qmake :/divers/images/window_fullscreen.png:/divers/images/window_fullscreen.png Show Maximized true &Editor mode Ctrl+E Next Warning/Error F4 Previous Warning/Error Shift+F4 Clear all Warnings/Errors Full view Minimal view DocksWindow Dock Windows New submenu > a true &Debug mode true &Release mode &Forget last used mode LogBuild QTextEdit
logbuild.h
TreeClasses QTreeWidget
treeclasses.h
TreeProject QWidget
treeproject.h
1
RegistersImpl QWidget
registersimpl.h
1
qdevelop-v0.28/ui/addscope.ui0000644000175000017500000001742011362261070015164 0ustar jlbrdjlbrd AddScope 0 0 350 193 Add New Scope :/divers/images/logo.png 9 6 New Scope 9 6 0 6 0 6 0 6 win32 true debug 0 6 unix release 0 6 mac Qt::Vertical 20 21 0 6 other false 0 6 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 6 Qt::Vertical 20 27 0 6 Qt::Horizontal 40 20 OK Cancel cancelButton clicked() AddScope reject() 292 223 174 98 okButton clicked() AddScope accept() 209 223 174 98 autre toggled(bool) scopeName setEnabled(bool) 227 107 227 131 qdevelop-v0.28/ui/gotoline.ui0000644000175000017500000001207511362261070015223 0ustar jlbrdjlbrd GotoLine 0 0 245 119 Goto Line 9 6 0 6 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> 0 6 1 99999 1 Qt::Horizontal 1 0 0 0 99999 1 0 6 Qt::Horizontal 131 31 OK Cancel Qt::Vertical 20 40 okButton clicked() GotoLine accept() 141 82 96 108 cancelButton clicked() GotoLine reject() 234 82 179 108 horizontalSlider valueChanged(int) spinBox setValue(int) 44 48 206 50 spinBox valueChanged(int) horizontalSlider setValue(int) 208 44 94 44 qdevelop-v0.28/ui/newproject.ui0000644000175000017500000004575111362261070015572 0ustar jlbrdjlbrd NewProject 0 0 613 403 New project creation :/divers/images/logo.png:/divers/images/logo.png 9 6 0 0 Template 9 6 Empty or master project Application with Dialog true Application with Main Window false Properties 9 6 6 0 6 0 6 0 Parent project : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Project name : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 true 6 0 ... Project creation on : Version 9 6 Debug Version false Release Version true 6 0 Qt::Horizontal 303 28 false OK Cancel Sub-directories 9 6 6 0 6 0 Dialogs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Executable: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 ui bin 6 0 6 0 sources: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Objects: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 src build Inheritance subclassing 9 6 6 0 6 0 Object name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Object name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 6 0 File name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter projectName location locationButton srcDirectory uiDirectory buildDirectory binDirectory uiFilename subclassFilename uiObjectName subclassObjectName release parentProjectName okButton cancelButton mainwindow dialog empty debug dialog toggled(bool) groupBox_4 setEnabled(bool) 61 48 318 186 mainwindow toggled(bool) groupBox_4 setEnabled(bool) 91 77 382 186 empty toggled(bool) groupBox_4 setDisabled(bool) 102 136 450 186 cancelButton clicked() NewProject reject() 570 309 179 282 qdevelop-v0.28/ui/replacewidget.ui0000644000175000017500000001555411362261070016227 0ustar jlbrdjlbrd ReplaceWidget 0 0 700 75 Form 3 0 :/toolbar/images/cross.png:/toolbar/images/cross.png true find: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 400 16777215 true Replacement: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 400 16777215 true &Replace Previous :/divers/images/previous.png:/divers/images/previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/divers/images/next.png:/divers/images/next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive false Whole words Prompt true Qt::Horizontal 40 20 QFrame::Box QFrame::Raised 0 0 0 6 0 :/divers/images/wrap.png Reached end of page, continued from top horizontalLayoutWidget label qdevelop-v0.28/ui/subclassing.ui0000644000175000017500000001366011362261070015721 0ustar jlbrdjlbrd Subclassing 0 0 536 386 Qt Designer Form Subclassing true 9 6 Class Na&me: comboClassName 0 6 4 0 0 0 &New... &File Name: filename true &Location: location false Filter &by: filterEdit Qt::Horizontal 0 6 :/divers/images/clear_left.png true true false 0 6 Qt::Horizontal 40 20 false &Create false C&ancel filterEdit filterView comboClassName filename location newImplementation okButton cancelButton okButton clicked() Subclassing accept() 480 436 61 359 cancelButton clicked() Subclassing reject() 566 436 331 300 qdevelop-v0.28/ui/about.ui0000644000175000017500000002716211362261070014520 0ustar jlbrdjlbrd About 0 0 545 348 QDevelop :/divers/images/logo.png:/divers/images/logo.png 9 6 6 0 6 0 0 0 150 150 :/divers/images/logo.png true Qt::Vertical 20 40 Qt::Horizontal 40 20 6 0 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> Qt::AlignCenter Qt::Vertical 20 40 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2010</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;</span><a href="mailto:jlbiord@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">jlbiord@gmail.com</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;</span><a href="mailto:fred.julian@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Developer: Diego Iastrubni </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:diegoiast@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Developer: Trent Zhou </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:trent.zhou@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a><span style=" font-size:10pt;">&gt;<br /></span><span style=" font-size:10pt; color:#000000;">Developer: Daniel Kacer </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:kacer@aceslovakia.sk"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a><span style=" font-size:10pt;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Developer: Ralf Jung &lt;</span><a href="mailto:ralfjung-e@gmx.de"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a><span style=" font-size:10pt;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Developer: Dmitrij &quot;Divius&quot; Tantsur &lt;</span><a href="mailto:divius.inside@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#000000;">&gt;</span></a><span style=" font-size:10pt;"><br /></span><span style=" font-size:10pt; color:#000000;">Packager: Daniel Rocher </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:daniel.rocher@adella.org"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a><span style=" font-size:10pt;">&gt;<br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://biord-software.org/qdevelop/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">http://biord-software.org/qdevelop/</span></a></p></body></html> Qt::AlignCenter true <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> Qt::AlignCenter 6 0 Qt::Horizontal 131 31 OK okButton clicked() About accept() 278 253 96 254 qdevelop-v0.28/ui/addexistant.ui0000644000175000017500000001426711362261070015720 0ustar jlbrdjlbrd AddExistant 0 0 333 161 Add Existing Files :/divers/images/logo.png 9 6 0 6 0 6 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Copy files here: false 0 6 0 6 0 6 ... 0 6 false true false ... 0 6 0 6 Qt::Horizontal 40 20 OK Cancel cancelButton clicked() AddExistant reject() 321 146 197 125 copy toggled(bool) location setEnabled(bool) 61 95 167 95 copy toggled(bool) locationButton setEnabled(bool) 25 94 306 91 qdevelop-v0.28/ui/registers.ui0000644000175000017500000000331411362261070015406 0ustar jlbrdjlbrd Registers 0 0 400 300 Form 0 0 0 0 0 0 Name Value Value Qt::Horizontal 40 20 Apply qdevelop-v0.28/ui/breakpointcondition.ui0000644000175000017500000000555211362261070017452 0ustar jlbrdjlbrd BreakpointCondition 0 0 400 251 Dialog 9 6 Condition : false is true (breakpoint) true false has changed (watchpoint) false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() BreakpointCondition accept() 199 183 199 104 buttonBox rejected() BreakpointCondition reject() 199 183 199 104 checkboxCondition toggled(bool) condition setEnabled(bool) 199 88 199 119 qdevelop-v0.28/ui/warning.ui0000644000175000017500000001234411362261070015047 0ustar jlbrdjlbrd Warning 0 0 329 172 4 4 0 0 Dialog 9 6 0 6 0 6 0 6 4 5 0 0 :/divers/images/qmessagebox-warn.png Qt::Vertical 20 40 1 5 0 0 TextLabel Qt::AlignCenter 0 6 Qt::Horizontal 40 20 OK Qt::Horizontal 40 20 0 6 Don't show anymore false Qt::Horizontal 40 20 okButton clicked() Warning accept() 179 123 6 5 qdevelop-v0.28/ui/addsetget.ui0000644000175000017500000001263311362261070015347 0ustar jlbrdjlbrd AddSetGet 0 0 358 193 Add get/set methods 9 6 Qt::Vertical 340 20 0 6 Qt::Horizontal 131 31 OK Cancel Create get/set methods for false 9 6 true inline true true inline true true set method true true get method true cancelButton clicked() AddSetGet reject() 296 172 143 182 get toggled(bool) getName setEnabled(bool) 45 48 129 49 get toggled(bool) getInline setEnabled(bool) 24 48 300 51 set toggled(bool) setName setEnabled(bool) 58 82 147 84 set toggled(bool) setInline setEnabled(bool) 23 75 303 80 qdevelop-v0.28/ui/findfiles.ui0000644000175000017500000001713111362261070015344 0ustar jlbrdjlbrd FindFile 0 0 396 239 Find in Files 6 0 Pattern: 0 0 true Qt::Vertical 20 40 6 0 Case Sensitive Whole words Recursive true Qt::Horizontal 40 20 Qt::Vertical 20 40 0 6 0 0 true *.cpp; *.h *.ui; *.qrc; *.txt Files: 0 0 ... Find in: Qt::Vertical 20 40 Replace found text 6 0 Replace with: 0 0 true 6 0 Qt::Vertical 20 40 6 0 Qt::Horizontal 40 20 &Find &Close closeButton clicked() FindFile reject() 313 205 107 217 qdevelop-v0.28/ui/parameters.ui0000644000175000017500000001666711362261070015561 0ustar jlbrdjlbrd Param 0 0 489 441 Program parameters true 9 6 0 6 0 6 0 6 Run with these arguments: Qt::Horizontal 40 20 0 6 Working directory (leave empty to use project directory): 0 6 ... 0 6 Environment variables (NAME=value): 0 6 Name Value 0 6 &Edit &Add true &Delete &Sort Qt::Vertical 20 40 0 6 &Default Qt::Horizontal 40 20 &OK true &Cancel okButton clicked() Param accept() 384 429 81 344 cancelButton clicked() Param reject() 477 429 360 285 qdevelop-v0.28/resources/resources.qrc0000644000175000017500000001144111362261070017156 0ustar jlbrdjlbrd images/CVclass.png images/CVglobal_meth.png images/CVglobal_var.png images/CVnamespace.png images/CVpackage_meth.png images/CVpackage_var.png images/CVprivate_meth.png images/CVprivate_signal.png images/CVprivate_slot.png images/CVprivate_var.png images/CVprotected_meth.png images/CVprotected_signal.png images/CVprotected_slot.png images/CVprotected_var.png images/CVpublic_meth.png images/CVpublic_signal.png images/CVpublic_slot.png images/CVpublic_var.png images/CVstruct.png images/CVtypedef.png images/QDevelop.png images/SplashQDevelop.png images/ajouter.png images/bookmark.png images/bookmarknext.png images/bookmarkprevious.png images/clearallbookmarks.png images/curseurDroit.png images/good.png images/hide1.png images/hide2.png images/libre.png images/logo.png images/next.png images/nogood.png images/breakpoint.png images/breakpoint2.png images/previous.png images/qmessagebox-warn.png images/supprimer.png images/wrap.png images/editclear.png images/clear_left.png images/window_fullscreen.png images/window_nofullscreen.png images/logoeditor.png images/error.png images/warning.png images/empty-16x16.png templates/dialog.ui templates/impl.cpp.template templates/impl.h.template templates/newclassimpl.cpp.template templates/newclassimpl.h.template templates/main.cpp.template templates/mainwindow.ui templates/widget.ui images/build.png images/buildrun.png images/buildstop.png images/compile.png images/configure.png images/cross.png images/dbgmemview.png images/dbgnext.png images/dbgnextinst.png images/dbgparam.png images/dbgrestart.png images/dbgrun.png images/dbgrunto.png images/dbgstep.png images/dbgstepinst.png images/dbgstepout.png images/dbgvar.png images/debugger.png images/desindente.png images/edit.png images/editcopy.png images/editcut.png images/editdelete.png images/editpaste.png images/exec.png images/exit.png images/fileclose.png images/filenew.png images/fileopen.png images/fileprint.png images/filesave.png images/filesaveall.png images/filesaveas.png images/find.png images/helpassistant.png images/indente.png images/pause.png images/rebuild.png images/redo.png images/refresh.png images/resume.png images/stop.png images/undo.png images/view_tree.png images/print.png images/cpp.png images/designer.png images/dir.png images/doc.png images/h.png images/linguist.png images/qrc.png qdevelop-v0.28/src/InitCompletion.cpp0000644000175000017500000007762111362261066016674 0ustar jlbrdjlbrd /******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Anacr0x ( fred.julian at gmail.com ) * FILENAME : InitCompletion.h * LICENSE : GPL * COMMENTARY : Initialisation class for the icomplete's autocompletion ********************************************************************************************************/ #include "InitCompletion.h" #include "./QIComplete/parse.h" #include "./QIComplete/readtags.h" #include "./QIComplete/tree.h" #include "misc.h" #include "treeclasses.h" #include #include #include #include #include #include #include #include #include #include #include #ifdef _WIN32 #define NEW_LINE "\r\n" #else #define NEW_LINE "\n" #endif #include #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); InitCompletion::InitCompletion (QObject *parent, TreeClasses *treeClasses) : QThread(parent), m_treeClasses(treeClasses) { qRegisterMetaType("TagList"); m_stopRequired = false; } // InitCompletion::~InitCompletion() { QStringList list = QDir( QDir::tempPath() ).entryList(QStringList() << "qdevelop-completion-*", QDir::Files); foreach(QString file, list) { QFile( QDir::tempPath()+"/"+file ).remove(); } if ( m_stopRequired ) { if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return; } createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); QString queryString = "delete from tags"; query.exec(queryString); query.exec("END TRANSACTION;"); } } // void InitCompletion::slotInitParse(InitCompletion::Request request, QString filename, const QString &text, bool showAllResults, bool emitResults, bool /*showDuplicateEntries*/, QString name) { m_text = text; m_emitResults = emitResults; m_showAllResults = showAllResults; m_name = name; m_request = request; QString Path = QDir::tempPath(); tagsIncludesPath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-tags_includes"; tagsFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-tags"; smallTagsFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-small-tags"; parsedFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-parsed_file"; this->start(); } void InitCompletion::addIncludes (QStringList includesPath, QString projectDirectory) { QDir dir; QFileInfoList list; for (int i = 0; i < includesPath.size(); i++) { dir.setPath(includesPath[i]); if (dir.exists() && !cpp_includes.contains(includesPath[i])) cpp_includes << includesPath[i]; list = dir.entryInfoList(QDir::Dirs | QDir::Readable | QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::Hidden); for (int j = 0; j < list.size(); ++j) includesPath.insert(i+1, list[j].absoluteFilePath()); } m_projectDirectory = projectDirectory; } QStringList InitCompletion::includesList(const QString &parsedText) { QStringList list; /* find include'ed files */ QRegExp rx("#\\s*include\\s*(<[^>]+>|\"[^\"]+\")"); QString include; int pos = 0; while ((pos = rx.indexIn(parsedText, pos)) != -1) { include = rx.cap(1); include.remove(0, 1); include.remove(include.length() - 1, 1); list << include; pos += rx.matchedLength(); } return list; } QString InitCompletion::includesPathList(const QString &parsedText) { QString list, fullpath, buf; QStringList includes = includesList(parsedText); while (!includes.empty()) { QFile *temp_fd = getFiledescriptor(includes.first(), fullpath); includes.removeFirst(); if (temp_fd) { if (!list.contains(fullpath)) { list += fullpath + NEW_LINE; buf = temp_fd->readAll(); includes << includesList(buf); } temp_fd->close(); delete temp_fd; } } return list; } /* creates a simple hash for all #include lines of a line */ long InitCompletion::calculateHash(const QString &parsedText) { long res = 0; QStringList includes = includesList(parsedText); QString s; foreach (s, includes) { for (int i = 0; i < s.length(); i++) res += (i + 1) * s[i].toAscii(); } return res; } /* forks and executes ctags to rebuild a tags file * storing cache_value in the tags file */ bool InitCompletion::buildTagsFile(long cache_value, const QString &parsedText) { QString pathList = includesPathList(parsedText); QFile includesListFile(tagsIncludesPath); if (includesListFile.open(QIODevice::WriteOnly | QIODevice::Text)) { includesListFile.write (pathList.toLocal8Bit()); includesListFile.close(); /* save the cache information in the tags file */ QFile tags(tagsFilePath); if (tags.open(QIODevice::WriteOnly | QIODevice::Text)) { QString head = "!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;\" to lines/" NEW_LINE "!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/" NEW_LINE "!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/" NEW_LINE "!_TAG_PROGRAM_NAME Exuberant Ctags //" NEW_LINE "!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/" NEW_LINE "!_TAG_PROGRAM_VERSION 5.5.4 //" NEW_LINE "!_TAG_CACHE\t" + QString::number(cache_value) + NEW_LINE; tags.write(head.toLocal8Bit()); tags.close(); } QString command = ctagsCmdPath + " -f \"" + tagsFilePath + "\" --append --language-force=c++ --fields=afiKmsSzn --c++-kinds=cdefgmnpstuvx -L \"" + tagsIncludesPath + '\"'; // I don't process any user input, so system() should be safe enough QProcess ctags; ctags.execute(command); includesListFile.remove(); if (ctags.exitStatus() == QProcess::NormalExit) return true; } return false; } Expression InitCompletion::getExpression(const QString &text, Scope &sc, bool showAllResults) { Tree::parent = this; long cache_value = calculateHash(text); /* automatic cache mode */ /* we save a hash value for all included files from the current file in the tags file, if it matches the hash of the current buffer, nothing has changed, and reuse the existing tags file */ bool build_cache = true; QFile fCache(tagsFilePath); if (fCache.open(QIODevice::ReadOnly)) { QString pattern = "!_TAG_CACHE\t" + QString::number(cache_value) + NEW_LINE; for (int i=0; i<10; i++) if (fCache.readLine() == pattern) build_cache = false; fCache.close(); } if (build_cache) buildTagsFile(cache_value, text); /* We create a file with the parsed text */ QFile f(parsedFilePath); f.open(QIODevice::WriteOnly | QIODevice::Text); f.write (text.toLocal8Bit()); f.close(); /* real parsing starts here */ Parse parse(ctagsCmdPath, tagsFilePath, parsedFilePath, smallTagsFilePath); return parse.parseExpression(text, &sc, showAllResults); } void InitCompletion::run() { if ( m_request == CheckQtDatabase ) { Expression exp; exp.className = "QString"; TagList list; list = readFromDB(list, exp, QString()); if ( list.count() ) { QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); return; } populateQtDatabase(); QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); return; } Scope sc; Expression exp = parseLine( m_text ); /* we have all relevant information, so just list the entries */ TagList list, newList, listForDB; if ( m_emitResults ) { if (exp.access != ParseError ) { if ( !exp.className.isEmpty() ) { // Try to read from database list = readFromDB(list, exp, m_name.simplified()); // If the list is empty, the classe is not present in database if ( list.isEmpty() ) { // Populate the list by reading the tag file on disk list = Tree::findEntries(&exp, &sc); } if ( m_name.simplified().isEmpty() ) emit completionList( list ); else emit completionHelpList( list ); } } } } QString InitCompletion::className(const QString &text) { if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } Expression exp = parseLine( text ); if (exp.access == ParseError) return QString(); return exp.className; } void InitCompletion::setCtagsCmdPath (const QString &cmdPath) { if (cmdPath.indexOf(' ')!=-1) ctagsCmdPath = QString('\"') + cmdPath + '\"'; else ctagsCmdPath = cmdPath; } QFile* InitCompletion::getFiledescriptor(const QString &filename, QString &fullname) { QFile *fd = new QFile(); /* absolute path name */ if (QFileInfo(filename).isAbsolute()) { fd->setFileName(filename); if (fd->open(QIODevice::ReadOnly)) { fullname = QFileInfo(filename).canonicalFilePath(); return fd; } } else { /* relative pathname */ for (int i = 0; i < cpp_includes.size(); i++) { fd->setFileName(cpp_includes.at(i) + '/' + filename); if (fd->open(QIODevice::ReadOnly)) { fullname = QFileInfo(cpp_includes.at(i) + '/' + filename).canonicalFilePath(); return fd; } } } // Nothing was found fd->close(); delete fd; return NULL; } // TagList InitCompletion::readFromDB(TagList list, Expression exp, QString functionName) { if ( exp.className.isEmpty() ) return TagList(); QStringList classes; classes << exp.className; if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return TagList(); } /* The first character is not a 'Q', certainly an class created in the project. We read the list from the class browser which have all the classes and members of the project */ classes = inheritanceList(exp.className, classes); const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); Tag tag; tag.access = parsedItem.access; tag.name = parsedItem.name; tag.parameters = parsedItem.signature; tag.signature = parsedItem.signature; tag.returned = parsedItem.ex_cmd.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); if ( parsedItem.kind == "f" ) tag.kind = "function"; else if ( parsedItem.kind == "p" ) tag.kind = "prototype"; else if ( parsedItem.kind == "c" ) { tag.kind = "class"; tag.parameters = ""; } else if ( parsedItem.kind == "e" ) { if ( parsedItem.enumname.section(":", 0, 0) != exp.className ) continue; parsedItem.classname = exp.className; tag.parameters = ""; tag.kind = "member"; } else if ( parsedItem.kind == "m" ) { tag.kind = "member"; tag.parameters = ""; } else if ( parsedItem.kind == "s" ) { tag.kind = "struct"; tag.parameters = ""; } else { continue; } bool isStatic = parsedItem.ex_cmd.simplified().startsWith("static"); if ( !classes.contains( parsedItem.classname ) && !classes.contains( parsedItem.structname ) && !classes.contains( parsedItem.structname.section("::", -1) ) ) continue; else if ( !functionName.isEmpty() && parsedItem.name != functionName ) continue; else if ( parsedItem.name == parsedItem.classname || "~"+parsedItem.name == parsedItem.classname ) continue; else if ( tag.access != "public" && !m_text.simplified().endsWith("this->") ) continue; else if ( (exp.access == AccessStatic && isStatic != true && tag.kind != "struct" && tag.kind != "class") || (exp.access != AccessStatic && isStatic == true)) continue; list << tag; } // Continue the reading in qdevelop.db createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); // QString queryString = QString() + "select * from inheritance where child='"+exp.className+"'"; query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { classes << parent; } } // queryString = QString() + "select * from tags where class in ( "; foreach(QString c, classes) { queryString = queryString + " '" + c + "',"; } queryString = queryString.left( queryString.length()-1 ); queryString += " )"; if ( !functionName.simplified().isEmpty() ) { queryString += " and name='" + functionName + "'"; } // query.exec(queryString); while (query.next()) { Tag tag; tag.name = query.value(1).toString().replace("$", "'"); tag.parameters = query.value(2).toString().replace("$", "'"); tag.longName = query.value(3).toString().replace("$", "'"); tag.kind = query.value(4).toString().replace("$", "'"); tag.access = query.value(5).toString().replace("$", "'"); tag.signature = query.value(6).toString().replace("$", "'"); tag.returned = query.value(7).toString().replace("$", "'"); tag.isFunction = query.value(8).toInt(); tag.isStatic = query.value(9).toInt(); if ( (exp.access == AccessStatic && tag.isStatic != true) || (exp.access != AccessStatic && tag.isStatic == true)) continue; else if ( tag.access != "public" && !m_text.simplified().endsWith("this->") ) continue; if ( list.count() && functionName.simplified().isEmpty()) { Tag lastTag = list.last(); if ( lastTag.name == tag.name ) list.pop_back(); } list << tag; } return list; } // bool InitCompletion::connectQDevelopDB(QString const& dbName) { QSqlDatabase database; if ( QSqlDatabase::database(dbName).databaseName() != dbName ) { database = QSqlDatabase::addDatabase("QSQLITE", dbName); database.setDatabaseName(dbName); } else { database = QSqlDatabase::database(dbName); if ( database.isOpen() ) return true; } // if (!database.open()) { emit showMessage( QObject::tr("Unable to establish a database connection.")+"\n"+ QObject::tr("QDevelop needs SQLite support. Please read " "the Qt SQL driver documentation for information how " "to build it.") ); return false; } return true; } // void InitCompletion::writeToDB(Expression exp, TagList list, QSqlQuery query) { foreach(Tag tag, list) { QString queryString = "insert into tags values("; queryString = queryString + "'" + exp.className.replace("'", "$") + "', " + "'" + tag.name.replace("'", "$") + "', " + "'" + tag.parameters.replace("'", "$") + "', " + "'" + tag.longName.replace("'", "$") + "', " + "'" + tag.kind.replace("'", "$") + "', " + "'" + tag.access.replace("'", "$") + "', " + "'" + tag.signature.replace("'", "$") + "', " + "'" + tag.returned.replace("'", "$") + "', " + "'" + QString::number(tag.isFunction) + "', " + "'" + QString::number(tag.isStatic) + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; return; } } } // void InitCompletion::createTables() { QString queryString = "create table tags (" "class string," "name string," "parameters string," "longName string," "kind string," "access string," "signature string," "returned string," "isFunction int," "isStatic int" ")"; QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec(queryString); // queryString = "create table inheritance (" "parent string," "child string" ")"; query.exec(queryString); } // QStringList InitCompletion::filesList(QString directory, QStringList files) { QDir dir(directory); QString filterNames = "q*.h;Q*.h"; QFileInfoList list = dir.entryInfoList(filterNames.split(";"), QDir::AllDirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); foreach(QFileInfo fileInfo, list) { if ( fileInfo.isFile() ) // Header file { files << fileInfo.absoluteFilePath(); } else // Directory { files = filesList(fileInfo.absoluteFilePath(), files); } } return files; } // void InitCompletion::populateQtDatabase() { QString command = ctagsCmdPath + " -L "+QDir::tempPath()+"/qdevelopfilenames -f \"" + QDir::tempPath()+"/qttags" + "\" --language-force=c++ --fields=afiKmsSzn --c++-kinds=cdefgmnpstuvx"; QStringList files; foreach(QString incDir, m_qtInclude) { files += filesList(incDir, files); } QFile f(QDir::tempPath()+"/qdevelopfilenames"); if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) return; f.write( files.join("\n").toAscii() ); f.close(); QProcess ctags; if( ctags.execute(command) != 0 ) { emit showMessage( tr("Unable to launch %1").arg(command) ); return; } ctags.waitForFinished(-1); QFile file(QDir::tempPath()+"/qttags"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { emit showMessage( tr("Unable to open %1").arg(QDir::tempPath()+"/qttags") ); return; } QString read; read = file.readAll(); file.close(); file.remove(); f.remove(); QMap inheritsList; QMap map; foreach(QString s, read.split("\n", QString::SkipEmptyParts) ) { QString classname; Tag tag; if ( !s.isEmpty() && s.simplified().at(0) == '!' ) continue; s += '\t'; tag.name = s.section("\t", 0, 0).simplified(); QString ex_cmd = s.section("/^", -1, -1).section("$/", 0, 0).simplified(); tag.isStatic = ex_cmd.startsWith("static"); classname = s.section("class:", -1, -1).section("\t", 0, 0).simplified(); tag.access = s.section("access:", -1, -1).section("\t", 0, 0).simplified(); if ( !QString("public:private:protected").contains( tag.access ) ) tag.access = "public"; tag.longName = ex_cmd; tag.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); if ( classname.isEmpty() ) continue; tag.parameters = "(" + tag.longName.section("(", 1, 1).section(")", -2, -2) + ")"; tag.signature = ex_cmd; tag.isFunction = true; tag.signature = s.section("signature:", -1, -1).section("\t", 0, 0).simplified(); tag.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); tag.returned = ex_cmd; if ( tag.returned.startsWith("static ") ) tag.returned = tag.returned.section("static ", 1); if ( tag.returned.startsWith("inline ") ) tag.returned = tag.returned.section("inline ", 1); if ( tag.returned.startsWith("const ") ) tag.returned = tag.returned.section("const ", 1); if ( tag.returned.startsWith("QT3_SUPPORT ") ) tag.returned = tag.returned.section("QT3_SUPPORT ", 1); if ( tag.returned.startsWith("virtual ") ) tag.returned = tag.returned.section("virtual ", 1); tag.returned = tag.returned.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); QString inherits; if ( s.contains("inherits:") ) inherits = s.section("inherits:", -1, -1).section("\t", 0, 0).simplified(); if ( !inherits.isEmpty() ) { inheritsList[ classname ] = inherits; } if ( tag.kind != "prototype" && tag.kind != "function" && tag.kind != "member" ) continue; if ( tag.name=="Q_REQUIRED_RESULT" ) { if ( tag.longName.contains("(") ) { tag.name = tag.longName.remove("const ").section(" ", 1, 1).section("(", 0, 0); tag.kind = "function"; tag.parameters = tag.signature = "(" + tag.longName.section("(", 1, 1).section(")", -2, -2) + ")"; tag.access = "public"; tag.isFunction = true; } } if ( tag.name=="Q_REQUIRED_RESULT" || tag.name.at(0)=='&' || tag.name.at(0)=='*' ) continue; if( tag.name == classname || tag.name == "~"+classname ) continue; TagList list; list = map[classname]; bool alreadyInserted = false; foreach(Tag t, list) { if ( t.name == tag.name && t.parameters == tag.parameters ) { alreadyInserted = true; break; } } if ( !alreadyInserted ) { list << tag; map[classname] = list; } } // if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) //{ //return; //} //createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); query.exec("delete from tags"); QStringList keys = map.keys(); foreach(QString key, keys) { if ( m_stopRequired ) break; TagList tagList = map[key]; Expression exp; exp.className = key; writeToDB(exp, tagList, query); } writeInheritanceToDB(inheritsList, query); query.exec("END TRANSACTION;"); } // // void InitCompletion::writeInheritanceToDB(QMap inheritsList, QSqlQuery query) { QMapIterator it(inheritsList); while (it.hasNext()) { it.next(); foreach(QString parent, it.value().split(",", QString::SkipEmptyParts ) ) { QString queryString = "insert into inheritance values("; queryString = queryString + "'" + parent.replace("'", "$") + "', " + "'" + QString(it.key()).replace("'", "$") + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; return; } } } } // QStringList InitCompletion::inheritanceList( const QString classname, QStringList &list ) { /* Return a string list with inheritance classes for classname. Work with the classes browser. For the Qt classes, the inheritance is read in qdevelop.db. */ const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { if ( itemsList->at( i ).kind == "c" && itemsList->at( i ).name == classname && itemsList->at( i ).ex_cmd.contains(":") ) { QString ex_cmd = itemsList->at( i ).ex_cmd; ex_cmd = ex_cmd.left( ex_cmd.length()-3 ); ex_cmd = ex_cmd.section(":", 1); ex_cmd = ex_cmd.remove("public").remove("protected").remove("private").remove(" "); foreach(QString c, ex_cmd.split(",") ) { list << c; list = inheritanceList(c, list); } } } // QString queryString = QString() + "select * from inheritance where child='"+classname+"'"; QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { list << parent; list = inheritanceList(parent, list); } } return list; } // Expression InitCompletion::parseLine( QString text ) { Expression exp; Scope sc; int p = 0; QString simplified = simplifiedText( text ); int begin = simplified.length()-1; do { begin--; if( simplified[begin]=='(' ) p--; else if( simplified[begin]==')' ) p++; if( p > 0 && !(p == 1 && simplified[begin]==')') ) simplified[begin]=' '; if( QString(";{}=*/+~&|!^?:,<>").contains(simplified[begin]) ) break; else if( begin0); // QString word = simplified.mid(begin+1).simplified(); int posWord = 0; while( posWord0 && simplified[begin-1]=='-' && simplified[begin]=='>' ) && !(begin>0 && simplified[begin-1]==':' && simplified[begin]==':' ) ) begin++; QString varName = simplified.left(begin+1); QString line = simplified.mid(begin+1); exp = getExpression(varName, sc, m_showAllResults); QString className; if ( exp.access == ParseError ) { className = word; exp.access = AccessMembers; } else className = exp.className; //QD << varName << className; // while ( line.indexOf('.')!=-1 || line.indexOf(">")!=-1 || line.indexOf("::")!=-1 ) { QString function; int end = 9999; if( line.indexOf('.') != -1 ) end = qMin(end, line.indexOf('.')); if( line.indexOf('>') != -1 ) end = qMin(end, line.indexOf('>')); if( line.indexOf(':') != -1 ) end = qMin(end, line.indexOf(':')+1); function = line.left(end); line = line.mid(end+1); className = returned(className, function, exp); } exp.className = className; return exp; } // QString InitCompletion::returned(QString className, QString function, Expression &exp) { QStringList classes; classes << className; if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } classes = inheritanceList(className, classes); // function = function.section("(", 0, 0).simplified(); const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); Tag tag; tag.access = parsedItem.access; tag.name = parsedItem.name; tag.parameters = parsedItem.signature; tag.returned = parsedItem.ex_cmd.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); if ( parsedItem.kind == "f" ) tag.kind = "function"; else if ( parsedItem.kind == "p" ) tag.kind = "prototype"; else if ( parsedItem.kind == "e" ) { if ( parsedItem.enumname.section(":", 0, 0) != className ) continue; parsedItem.classname = className; tag.parameters = ""; tag.kind = "member"; } else if ( parsedItem.kind == "m" ) { tag.kind = "member"; tag.parameters = ""; } else { continue; } // bool isStatic = parsedItem.ex_cmd.simplified().startsWith("static"); if ( !classes.contains( parsedItem.classname ) ) continue; if( classes.contains( parsedItem.classname ) && function == parsedItem.name ) { exp.access = AccessMembers; return tag.returned; } } // Continue the reading in qdevelop.db createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); QString queryString = QString() + "select * from inheritance where child='"+className+"'"; query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { classes << parent; } } queryString = QString() + "select * from tags where class in ( "; foreach(QString c, classes) { queryString = queryString + " '" + c + "',"; } queryString = queryString.left( queryString.length()-1 ); queryString += " )"; // queryString += " and name = '" + function + "'"; query.exec(queryString); if (query.next()) { exp.access = AccessMembers; return query.value(7).toString().replace("$", "'"); } return QString(); } // QString InitCompletion::classForFunction(QString classname, QString function) { /* Return the name of the first class which contains the function. In a class Foo which inherits QDialog, if the help is called on the function foo->show(). We receive Foo as classname and show as function. We find the first class in inheritance list which contains really the function and return it. Here, it's QWidget. Thus Assistant can be called with the right parameters. */ if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } QStringList list; list << classname; list = inheritanceList(classname, list); createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); QStringList listcopy = list; listcopy.removeAll(classname); if (!listcopy.size()) { QString sql = "select count(*) from tags where class ='" + classname +"'"; if (!query.exec(sql) || !query.first() || query.value(0).toInt() == 0) { return QString(); } } foreach(QString name, list) { QString queryString = QString() + "select * from tags where class ='" + name + +"'"; queryString += " and name='" + function + "'"; // query.exec(queryString); while (query.next()) { return query.value(0).toString().replace("$", "'"); } } return classname; } qdevelop-v0.28/src/treeproject.h0000644000175000017500000000525011362261066015717 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TREEPROJECT_H #define TREEPROJECT_H #include #include // class ProjectManager; // class TreeProject : public QTreeWidget { friend class Delegator; Q_OBJECT public: TreeProject(QWidget * parent = 0); ~TreeProject(); void setProjectManager( QPointer g ) { m_projectManager = g; }; bool showAsKrawek() { return krawekItemDelegate != 0; }; private: void setup(); protected: void mousePressEvent( QMouseEvent * event ); void dragEnterEvent(QDragEnterEvent *); void drawBranches ( QPainter * painter, const QRect & rect, const QModelIndex & index ) const; void resizeEvent ( QResizeEvent * event ); void keyPressEvent( QKeyEvent * event ); private: QPointer m_projectManager; QTreeWidgetItem *m_itemClicked; QAbstractItemDelegate *normalItemDelegate, *krawekItemDelegate; private slots: void slotAddNewItem(); void slotAddNewClass(); void slotAddExistingFiles(); void slotAddScope(); void slotRenameItem(); void slotDeleteItem(); void slotAddSubProject(); void slotProjectPropertie(); void slotlupdate(); void slotlrelease(); void slotOpen(); void slotSort(); void slotSubclassing(); void slotShowAsNormal(); void slotPreviewForm(); public slots: void slotShowAsKrawek(); signals: void addNewItem(QTreeWidgetItem *, QString); void addExistingsFiles(QTreeWidgetItem *); void addNewClass(QTreeWidgetItem *); void deleteItem(QTreeWidgetItem *); void renameItem(QTreeWidgetItem *); void addScope(QTreeWidgetItem *); void addSubProject(QTreeWidgetItem *); void projectPropertie(QTreeWidgetItem *); void open(QTreeWidgetItem *, int); void lupdate(QTreeWidgetItem *); void lrelease(QTreeWidgetItem *); void subclassing(QTreeWidgetItem *); void previewForm(QTreeWidgetItem *); void sort(); }; #endif qdevelop-v0.28/src/editor.h0000644000175000017500000002137111362261066014661 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef EDITOR_H #define EDITOR_H #include "textEdit.h" #include "mainimpl.h" #include "ui_findwidget.h" #include "ui_replacewidget.h" #include #include #include #include #include #include #include // Q_DECLARE_METATYPE(Tag) // typedef struct { QStringList textFind; QStringList textReplace; bool caseSensitive; bool backwards; bool wholeWords; bool prompt; } ReplaceOptions; // typedef QMap classesMethodsList; // class QToolButton; class TabWidget; class QComboBox; class QTimer; class TextEditInterface; class QHBoxLayout; // class BlockUserData : public QTextBlockUserData { public: bool bookmark; bool breakpoint; QString breakpointCondition; bool isTrue; QString errorString; QString warningString; QTextBlock block; }; // class Editor : public QWidget { Q_OBJECT protected slots: //void closeEvent(QCloseEvent * event); public: void previousWarningError(); void nextWarningError(); void clearErrorsAndWarnings(); void setTextColor(QColor textColor); Editor(TabWidget *parent, MainImpl *mainimpl, InitCompletion *completion, QString name=""); ~Editor(); bool open(bool silentMode); bool save(); bool close(); void setFilename(QString name) { m_filename = name; m_textEdit->document()->setModified(true);}; QString filename() { return m_filename; }; QString shortFilename(); QString directory(); static QString shortFilename(QString nomLong); static QString suffixe(QString filename); void findContinue(); void findPrevious(); QStringList classes(); QStringList methodes(QString classe); QList breakpoints(); void toggleBookmark(int line); void clearAllBookmarks(); void deleteBreakpoint(int line); void setBackgroundColor( QColor c ){ m_textEdit->setBackgroundColor(c); }; void setCurrentLineColor( QColor c ){ m_textEdit->setCurrentLineColor(c); }; void setMatchingColor( QColor c ){ m_textEdit->setMatchingColor(c); }; void setShowWhiteSpaces( bool b ){ m_textEdit->setShowWhiteSpaces( b ); } void setRightMargin( int c ){ m_textEdit->setRightMarginColumn( c ); } void gotoMatchingBracket(){ m_textEdit->gotoMatchingBracket(); }; QString tempFilename(){ return m_textEdit->tempFilename(); }; void displayEditorToolbar( bool b ); int currentLineNumber(){ return m_textEdit->currentLineNumber(); }; int currentLineNumber(QTextBlock block){ return m_textEdit->currentLineNumber(block); }; void print(){ m_textEdit->print(); }; void toggleBreakpoint(int line, QString breakpointCondition, bool isTrue); void setExecutedLine(int line); void emitListBreakpoints(); void copy() { m_textEdit->copy(); }; void cut() { m_textEdit->cut(); }; void paste() { m_textEdit->paste(); }; void undo() { m_textEdit->document()->undo(); }; void redo() { m_textEdit->document()->redo(); }; void comment(TextEdit::ActionComment action) { m_textEdit->comment(action); }; void selectAll() { m_textEdit->selectAll(); }; void slotIndent() { m_textEdit->slotIndent(); }; void slotUnindent() { m_textEdit->slotUnindent(); }; void dialogGotoLine() { m_textEdit->dialogGotoLine(); }; void completeCode() { m_textEdit->completeCode(); }; void gotoImplementation() { m_textEdit->slotGotoImplementation(); }; void gotoDeclaration() { m_textEdit->slotGotoDeclaration(); }; QString wordUnderCursor() { return m_textEdit->wordUnderCursor(); }; QString firstWordUnderCursor() { return m_textEdit->firstWordUnderCursor(); }; void textPlugin(TextEditInterface *iTextEdit) { m_textEdit->textPlugin(iTextEdit); }; QString classNameUnderCursor() { return m_textEdit->classNameUnderCursor(); }; int verticalScrollBar() { return m_textEdit->verticalScrollBar()->value(); }; void setVerticalScrollBar(int s) { m_textEdit->verticalScrollBar()->setValue(s); }; void setAutobrackets(bool b) { m_textEdit->setAutobrackets(b); }; void setWordWrap( bool w ) { m_textEdit->setWordWrap(w); } // Divius: comments autoclose void setAutocomments(bool c) { m_textEdit->setAutocomments(c); }; // void setHideFindReplace(int delay) { m_hideFindReplace = delay; } void setMatch(bool b) { m_textEdit->setMatch(b); }; void saveAsTemp() { m_textEdit->saveAsTemp(); }; void setHighlightCurrentLine(bool b) { m_textEdit->setHighlightCurrentLine(b); }; bool isModified() { return m_textEdit->document()->isModified(); }; void setFocus(); void replace(); void setActiveEditor(bool b); void setIntervalUpdatingTreeClasses(int i) { m_intervalUpdatingClasses = i*1000;}; void setShowTreeClasses(bool s); void toggleBreakpoint() { toggleBreakpoint( m_textEdit->currentLineNumber(), QString(), true ); }; void toggleBookmark() { toggleBookmark( m_textEdit->currentLineNumber() ); }; QList bookmarksList(); QList breakpointsList(); bool inQuotations(int position, QString text); QString toPlainText() { return m_textEdit->toPlainText(); }; void insertText(QString text, int insertAfterLine) { m_textEdit->insertText(text, insertAfterLine); }; void setNameOtherFile(QString oldName, QString newName); void methodsList(); //void keyPress(QKeyEvent * event); // bool smartClick; inline QString getOtherFileToolTip() { return m_otherFileButton->toolTip(); } inline QString getOtherFileIcon() { return m_otherFileIcon; } inline bool hasOtherFile() { return !m_nameOtherFile.isEmpty(); } public slots: void slotEndBuild(); void gotoLine( int line, bool moveTop); void slotComboClasses(QString text=QString()); void slotModifiedEditor(bool modified); void setLineNumbers(bool activate) { m_textEdit->activateLineNumbers(activate); }; void setSelectionBorder(bool activate) { m_textEdit->setSelectionBorder(activate); }; void setFont(QFont fonte) { m_textEdit->setFont(fonte); }; void setEndLine(MainImpl::EndLine end) { m_textEdit->setEndLine(end); }; void setAutoIndent(bool activate) { m_textEdit->setAutoIndent(activate); }; void setSyntaxHighlight(bool activate); void setTabStopWidth(int size) { m_textEdit->setTabStopWidth(size) ; }; void setAutoCompletion(bool activate) { m_textEdit->setAutoCompletion(activate) ; }; void setTabSpaces(bool t) { m_textEdit->setTabSpaces(t) ; }; void setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g); void slotClassesMethodsList(); void slotOtherFile(); void find(); QString selection(); void slotMessagesBuild(QString list, QString directory); //void showMaximized(); private slots: void slotReplace(); //void slotMaximizeButtonClicked(); void slotComboMethods(int index); void slotFindWidget_textChanged(QString text="", bool fromButton=false); void slotFindPrevious(); void slotFindNext(); void slotTimerUpdateClasses(); void slotTimerCheckIfModifiedOutside(); private: TabWidget *m_parent; QPointer m_lineNumbers; QTextCursor m_previousCursor; classesMethodsList m_classesMethodsList; QString m_findExp; QTextDocument::FindFlags m_findOptions; QComboBox *m_comboClasses, *m_comboMethods; QToolButton *m_otherFileButton; QString m_otherFileIcon; //QToolButton *m_maximizedButton; QToolButton *m_refreshButton; QString m_nameOtherFile; MainImpl *m_mainimpl; QWidget *m_findWidget; QWidget *m_replaceWidget; TextEdit *m_textEdit; QString m_filename; Ui::FindWidget uiFind; Ui::ReplaceWidget uiReplace; QTimer *autoHideTimer; bool m_backward; ReplaceOptions m_replaceOptions; bool m_activeEditor; QTimer m_timerUpdateClasses; QTimer m_timerCheckLastModified; bool m_showTreeClasses; int m_intervalUpdatingClasses; quint16 m_checksum; InitCompletion *m_completion; QDateTime m_lastModified; QWidget *m_editorToolbar; int m_hideFindReplace; void checkBookmarks(); void updateOtherFile(QString currentFile); protected: signals: void editorModified(Editor *, bool); void refreshClasses(QString); void breakpoint(QString, unsigned int, BlockUserData *); void updateClasses(QString, QString); void otherFileChanged(void); }; #endif qdevelop-v0.28/src/parametersimpl.h0000644000175000017500000000270511362261066016420 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PARAMETERSIMPL_H #define PARAMETERSIMPL_H // #include "ui_parameters.h" #include "projectmanager.h" // class ParametersImpl : public QDialog, public Ui::Param { Q_OBJECT public: ParametersImpl( QWidget * parent ); Parameters parameters(); void setParameters(Parameters p); private slots: void on_tableVariables_itemDoubleClicked(QTableWidgetItem* item); void on_edit_clicked(); void on_sort_clicked(); void on_defaults_clicked(); void on_chooseDirectory_clicked(); void on_add_clicked(); void on_del_clicked(); private: }; #endif qdevelop-v0.28/src/pluginsinterfaces.h0000644000175000017500000000434411362261066017121 0ustar jlbrdjlbrd#ifndef __PLUGINSINTERFACES_H__ #define __PLUGINSINTERFACES_H__ class SimplePluginInterface { public: virtual ~SimplePluginInterface() {} virtual QString menuName() const = 0; virtual void start(QWidget * owner = 0) = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; class TextEditInterface { public: enum Action{ReplaceSelection, ReplaceAll, Append}; virtual ~TextEditInterface() {} virtual QString menuName() const = 0; virtual QString text(QString text, QString selectedText, QTextCodec *codec) = 0; virtual TextEditInterface::Action action() const = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; #include class VcsInterface { public: virtual ~VcsInterface() {} virtual QString name() const = 0; virtual void prepareRootTree(const QString & treeDir) const = 0; virtual QString info(const QString & item) = 0; virtual bool isVersioned(const QString & item) = 0; virtual QString currentCheckOutPath() const = 0; virtual QString conflicts() const = 0; virtual bool checkOut(const QString & path, const QString & destination) = 0; virtual bool mergeFrom(const QString & path, QString & output) = 0; virtual bool add(const QStringList & itemList) = 0; virtual bool mkdir(const QStringList & dirList) = 0; virtual bool removeFiles(const QStringList & itemList) = 0; virtual bool renameFile(const QString & oldName, const QString & newName) = 0; virtual QString status(const QStringList & itemList) = 0; virtual bool commit(const QStringList & itemList, const QString & message, QString & output) = 0; virtual bool update(const QStringList & itemList, QString & output) = 0; virtual QString log(const QString & itemName) = 0; virtual bool revert(const QStringList & itemList) = 0; virtual bool resolve(const QStringList & itemList) = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; Q_DECLARE_INTERFACE(SimplePluginInterface, "qdevelop.SimplePluginInterface/1.0") Q_DECLARE_INTERFACE(TextEditInterface, "qdevelop.TextEditInterface/1.0") Q_DECLARE_INTERFACE(VcsInterface, "qdevelop.VcsInterface/1.0") #endif // __PLUGINSINTERFACES_H__ qdevelop-v0.28/src/textEdit.cpp0000644000175000017500000016355111362261066015527 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ // #include "textEdit.h" #include "editor.h" #include "linenumbers.h" #include "selectionborder.h" #include "cpphighlighter.h" #include "ui_gotoline.h" #include "pluginsinterfaces.h" #include "treeclasses.h" #include "InitCompletion.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); // static const char * tabPixmap_img[] = { /* width height ncolors cpp [x_hot y_hot] */ "8 8 3 2 0 0", /* colors */ " s none m none c none", "O s iconColor1 m black c black", "X s iconColor2 m black c #D0D0D0", /* pixels */ " X X ", " X X ", " X X ", " X X ", " X X ", " X X ", " X X ", " ", }; static const char * spacePixmap_img[] = { /* width height ncolors cpp [x_hot y_hot] */ "8 8 3 2 0 0", /* colors */ " s none m none c none", "O s iconColor1 m black c black", "X s iconColor2 m black c #D0D0D0", /* pixels */ " ", " ", " ", " ", " ", " X ", " X X ", " ", }; TextEdit::TextEdit(Editor * parent, MainImpl *mainimpl, InitCompletion *completion) : QTextEdit(parent), m_editor(parent), m_mainImpl(mainimpl), m_completion(completion), m_mouseHidden(false) { setObjectName( "editorZone" ); m_lineNumbers = 0; m_selectionBorder = 0; cpphighlighter = 0; m_autoindent = true; m_autobrackets = true; setAcceptRichText( false ); setLineWrapMode( QTextEdit::FixedPixelWidth ); setLineWrapColumnOrWidth( 65535 ); m_findOptions = 0; m_findExp = ""; m_findImpl = 0; m_match = true; m_highlightCurrentLine = true; m_matchingBegin = -1; m_matchingEnd = -1; m_endLine = MainImpl::Default; m_tabPixmap = QPixmap( tabPixmap_img ); m_spacePixmap = QPixmap( spacePixmap_img ); m_showWhiteSpaces = true; m_rightMarginColumn = 80; m_autocomments = false; connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(editorModified(bool))); connect( this, SIGNAL( cursorPositionChanged() ), this, SLOT( slotCursorPositionChanged())); connect(this, SIGNAL(initParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString)), m_completion, SLOT(slotInitParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString)) ); actionToggleBreakpoint = new QAction(this); actionToggleBreakpoint->setShortcut( Qt::Key_F9 ); connect(actionToggleBreakpoint, SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // m_completionList = new QListWidget(this); m_completionList->setSelectionMode( QAbstractItemView::SingleSelection ); m_completionList->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_completionList->hide(); m_completionList->setSortingEnabled( true ); #ifdef Q_WS_MAC m_completionList->setFont(QFont(m_completionList->font().family(), 12) ); #else m_completionList->setFont( QFont(m_completionList->font().family(), 8) ); #endif connect(m_completionList, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(slotWordCompletion(QListWidgetItem *)) ); setBackgroundColor( m_backgroundColor ); } // void TextEdit::setBackgroundColor( QColor c ) { if ( c == m_backgroundColor ) return; m_backgroundColor = c; QPalette pal = palette(); pal.setColor(QPalette::Base, m_backgroundColor); setPalette( pal ); viewport()->update(); } // void TextEdit::setCurrentLineColor( QColor c ) { if ( c == m_currentLineColor ) return; m_currentLineColor = c; viewport()->update(); } // void TextEdit::print() { QPrinter printer(QPrinter::HighResolution); printer.setFullPage(true); QPrintDialog dlg(&printer, this); if (dlg.exec() == QDialog::Accepted) { document()->print(&printer); } } void TextEdit::printWhiteSpacesAndMatching( QPainter &p ) { const int contentsY = verticalScrollBar()->value(); const qreal pageBottom = contentsY + viewport()->height(); const QFontMetrics fm = QFontMetrics( currentFont() ); for ( QTextBlock block = document()->begin(); block.isValid(); block = block.next() ) { QTextLayout* layout = block.layout(); const QRectF boundingRect = layout->boundingRect(); QPointF position = layout->position(); if ( position.y() +boundingRect.height() < contentsY ) continue; if ( position.y() > pageBottom ) break; const QString txt = block.text(); const int len = txt.length(); for ( int i=0; ibuildQtDatabase() ) { QMessageBox::warning(m_mainImpl, "QDevelop", tr("The Qt database building is in progress.\nTry to complete code later.")); return; } if ( !m_completion ) return; QString c = m_plainText.left(textCursor().position()); if( c.simplified().right(1) == "(" ) { completionHelp(); return; } bool addThis = true; QString word; int i; for(i = c.length()-1; i>0; i--) { if( c.at(i) == QChar('\n') || c.at(i) == QChar(';') ) { i++; word = c.mid( i ); c = c.left( i ); break; } if( QString(":.>(").contains( c.at(i) ) ) { addThis = false; break; } } if( addThis ) { c += "this->" + word; } emit initParse(InitCompletion::Completion, m_editor->filename(), c, true, true, false, QString()); } void TextEdit::slotCompletionList(TagList tagList ) { if ( tagList.count() ) { int w = 0; int h = 0; m_completionList->clear(); foreach(Tag tag, tagList) { w = qMax(w, fontMetrics().width( tag.name+tag.parameters )); QListWidgetItem *item = new QListWidgetItem( m_completionList ); item->setText(tag.name+tag.parameters ); h += 15; QVariant v; v.setValue( tag ); item->setData(Qt::UserRole, v ); //item->setData(Qt::UserRole, QVariant(tag.name) ); if( tag.access.isEmpty() ) tag.access = "public"; if ( tag.kind == "function" || tag.kind == "prototype") item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_meth.png")); else if ( tag.kind == "member" ) item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_var.png")); else if ( tag.kind == "struct" ) item->setIcon(QIcon(":/CV/images/CVstruct.png")); else if ( tag.kind == "class" ) item->setIcon(QIcon(":/CV/images/CVclass.png")); m_completionList->addItem(item); //m_completionList->addItem( tag.name ); } m_completionList->setSelectionMode( QAbstractItemView::SingleSelection ); QPalette palette; palette.setBrush(QPalette::Active, QPalette::Base, m_backgroundColor); m_completionList->setPalette(palette); w = qMin(w+20, 550); w = qMax(w, 150); int posX = qMax(cursorRect().x(), 80); //if ( posX+w > width() ) //posX = width()-220; if ( cursorRect().y() > viewport()->height()/2 ) { h = qMin( qMin(h+20, cursorRect().y()), 500); m_completionList->setGeometry(posX, cursorRect().y()-h, w, h); } else { h = qMin( qMin(h+20, viewport()->height()-22-cursorRect().y()), 500); m_completionList->setGeometry(posX, cursorRect().y()+fontMetrics().height(), w, h); } m_completionList->show(); m_completionList->setCurrentRow( 0 ); // QString s = wordUnderCursor(); QList listeItems = m_completionList->findItems(s, Qt::MatchExactly); listeItems = m_completionList->findItems(s, Qt::MatchStartsWith); if ( listeItems.count()>1 ) m_completionList->setCurrentItem( listeItems.first() ); // } else m_completionList->hide(); } // void TextEdit::slotCompletionHelpList(TagList tagList) { if ( tagList.count() ) { int w = 0; int h = 0; m_completionList->clear(); foreach(Tag tag, tagList) { w = qMax(w, fontMetrics().width( tag.name+tag.parameters )); QListWidgetItem *item = new QListWidgetItem( m_completionList ); item->setText( tag.name+tag.parameters ); h += 15; if( tag.access.isEmpty() ) tag.access = "public"; if ( tag.kind == "function" || tag.kind == "prototype") item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_meth.png")); else if ( tag.kind == "member" ) item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_var.png")); m_completionList->addItem( item ); } m_completionList->setSelectionMode( QAbstractItemView::NoSelection ); QPalette palette; palette.setBrush(QPalette::Active, QPalette::Base, m_backgroundColor); m_completionList->setPalette(palette); w = qMin(w+20, 550); w = qMax(w, 150); int posX = qMax(cursorRect().x(), 80); if ( posX+w > width() ) posX = width()-220; if ( cursorRect().y() > viewport()->height()/2 ) { h = qMin( qMin(h+20, cursorRect().y()), 250); m_completionList->setGeometry(posX, cursorRect().y()-h, w, h); } else { h = qMin( qMin(h+20, viewport()->height()-22-cursorRect().y()), 250); m_completionList->setGeometry(posX, cursorRect().y()+fontMetrics().height(), w, h); } m_completionList->show(); // } else m_completionList->hide(); } // void TextEdit::setFocus(Qt::FocusReason reason) { m_completionList->hide(); QTextEdit::setFocus(reason); } // void TextEdit::mousePressEvent ( QMouseEvent * event ) { m_completionList->hide(); QTextEdit::mousePressEvent ( event ); if (m_editor->smartClick) { if (event->modifiers() == Qt::ControlModifier) { slotGotoImplementation(); } else if (event->modifiers() == Qt::MetaModifier) { slotGotoDeclaration(); } } } // TextEdit::~TextEdit() { delete lineNumbers(); } // void TextEdit::setTabStopWidth(int taille) { bool m = document()->isModified(); int posScrollbar = verticalScrollBar()->value(); QTextEdit::setTabStopWidth(fontMetrics().width( " " ) * taille); setPlainText( toPlainText() ); verticalScrollBar()->setValue( posScrollbar ); document()->setModified( m ); } // bool TextEdit::open(bool silentMode, QString filename, QDateTime &lastModified) { if ( cpphighlighter && !QString(":c:cc:cpp:h:hpp:").contains( ":"+filename.section(".", -1, -1).toLower()+":" ) ) { delete cpphighlighter; cpphighlighter = 0; } QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { if ( !silentMode ) QMessageBox::critical(0, "QDevelop", tr("The file \"%1\" could not be loaded.").arg(filename),tr("Cancel") ); return false; } QByteArray data = file.readAll(); QTextStream in(&data); QApplication::setOverrideCursor(Qt::WaitCursor); int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); in.setAutoDetectUnicode(false); in.setCodec(codec); QString decodedStr = in.readAll(); setPlainText(decodedStr); lastModified = QFileInfo( file ).lastModified(); file.close(); if ( m_lineNumbers ) m_lineNumbers->setDigitNumbers( QString::number(linesCount()).length() ); if ( m_completion && !m_mainImpl->buildQtDatabase() ) { emit initParse(InitCompletion::Completion, m_editor->filename(), toPlainText(), true, false, false, QString()); } QApplication::restoreOverrideCursor(); return true; } // void TextEdit::activateLineNumbers(bool activate) { if ( activate && m_lineNumbers==0 ) setLineNumbers( new LineNumbers(this, m_editor) ); else if ( !activate && m_lineNumbers ) setLineNumbers( 0 ); } // void TextEdit::setSelectionBorder(bool activate) { if ( activate && m_selectionBorder==0 ) setSelectionBorder( new SelectionBorder(this) ); else if ( !activate && m_selectionBorder ) setSelectionBorder( (SelectionBorder*)0 ); } // void TextEdit::autobrackets() { textCursor().insertText( "\n" ); autoIndent(); textCursor().insertText( "\n" ); textCursor().insertText( "}" ); autoUnindent(); setTextCursor( getLineCursor(currentLineNumber()-1) ); QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::EndOfLine ); setTextCursor( cursor ); } // Divius: comments autoclose void TextEdit::autocomments(bool start) { if (start) { textCursor().insertText( " * \n */" ); setTextCursor( getLineCursor(currentLineNumber()-1) ); QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::EndOfLine ); setTextCursor( cursor ); } else { textCursor().insertText( "* " ); } } // void TextEdit::autoIndent() { QTextBlock blocAIndenter; QTextBlock b = textCursor().block(); if ( b.previous().isValid() && !b.previous().text().isEmpty() ) blocAIndenter = b; else return; QTextBlock blocAvant = blocAIndenter.previous(); if ( !blocAvant.isValid() ) return; QString simple = blocAvant.text().simplified(); QString blancs; for (int i=0; i< blocAvant.text().length(); i++) { if ( blocAvant.text().at(i) == ' ' || blocAvant.text().at(i) == '\t' ) { QString s = blocAvant.text().at(i); if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); QString spaces; for (int i = 0; ifindBlock(startPos); QTextBlock endBlock = document()->findBlock(endPos); //special case : the end of the selection is at the beginning of a line if ( startPos != endPos && cursor.atBlockStart()) { endBlock = document()->findBlock(endPos).previous(); } int firstLine = lineNumber( startBlock ); int lastLine = lineNumber( endBlock ); QTextBlock block = startBlock; cursor.beginEditBlock(); cursor.setPosition(startPos); while (!(endBlock < block)) { QString text = block.text(); if (!text.isEmpty()) { int i = 0; while (i < text.length() && (text.at(i).isSpace())) i++; if (action == Comment) { if (text.mid(i, 2) != "//") text.insert(i, "//"); } else if (action == Uncomment) { if (text.mid(i, 2) == "//") text.remove(i, 2); } else if (action == Toggle) { if (text.mid(i, 2) == "//") text.remove(i, 2); else text.insert(i, "//"); } cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); cursor.select(QTextCursor::BlockUnderCursor); qWarning() << cursor.selectedText(); cursor.removeSelectedText(); text.prepend("\n"); cursor.insertText(text); } if( !cursor.movePosition(QTextCursor::NextBlock) ) { break; } block = cursor.block(); } cursor.endEditBlock(); // Reselect blocks selectLines(firstLine, lastLine); } // void TextEdit::autoUnindent() { QTextBlock b = textCursor().block(); if ( !b.previous().isValid() || b.previous().text().isEmpty() ) return; QString caractere = b.text().simplified(); if ( caractere!="{" && caractere!="}" ) return; QTextBlock blocAvant = b.previous(); if ( !blocAvant.isValid() ) return; QString blancs; for (int i=0; i< blocAvant.text().length(); i++) { if ( blocAvant.text().at(i) == ' ' || blocAvant.text().at(i) == '\t' ) blancs += blocAvant.text().at(i); else break; } if ( blancs.length() && caractere=="}" && blocAvant.text().simplified()!="{") { if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); for (int i = 0; idocument() ); else if ( !activate && cpphighlighter ) { delete cpphighlighter; cpphighlighter = 0; } } // void TextEdit::setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g) { if (!cpphighlighter) return; cpphighlighter->setPreprocessorFormat( a ); cpphighlighter->setClassFormat( b ); cpphighlighter->setSingleLineCommentFormat( c ); cpphighlighter->setMultiLineCommentFormat( d ); cpphighlighter->setQuotationFormat( e ); cpphighlighter->setFunctionFormat( f ); cpphighlighter->setKeywordFormat( g ); cpphighlighter->setDocument( document() ); } bool TextEdit::close(QString filename) { if ( document()->isModified() ) { // Proposer sauvegarde int rep = QMessageBox::question(this, "QDevelop", tr("Save \"%1\"").arg(filename), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return false; if ( rep == 0 ) { QDateTime info; return save(filename, info); } } return true; } // bool TextEdit::save(QString filename, QDateTime &lastModified) { if ( !document()->isModified() ) return true; QFile file( filename ); if (!file.open(QIODevice::WriteOnly)) { QMessageBox::about(0, "QDevelop",tr("Unable to save %1").arg(filename)); return false; } QApplication::setOverrideCursor(Qt::WaitCursor); QString s = toPlainText(); if ( m_endLine != MainImpl::Default ) { s.replace("\r\n", "\n"); if ( m_endLine == MainImpl::Windows ) s.replace("\n", "\r\n"); } int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); QTextStream out(&file); out.setCodec(codec); out << s; file.close(); QFile last( filename ); lastModified = QFileInfo( last ).lastModified(); QApplication::restoreOverrideCursor(); document()->setModified( false ); return true; } // void TextEdit::setMouseHidden( bool hidden ) { if ( hidden == m_mouseHidden ) return; viewport()->setCursor( hidden ? Qt::BlankCursor : Qt::IBeamCursor ); setMouseTracking( hidden ); m_mouseHidden = hidden; } // void TextEdit::resizeEvent( QResizeEvent* e ) { QTextEdit::resizeEvent( e ); QRect margeNumerotationGeometry; if ( m_lineNumbers ) { margeNumerotationGeometry = QRect( viewport()->geometry().topLeft(), QSize( m_lineNumbers->width(), viewport()->height() ) ); margeNumerotationGeometry.moveLeft( margeNumerotationGeometry.left() -m_lineNumbers->width() ); if ( m_selectionBorder ) margeNumerotationGeometry.moveLeft( margeNumerotationGeometry.left() -m_selectionBorder->width() ); if ( m_lineNumbers->geometry() != margeNumerotationGeometry ) m_lineNumbers->setGeometry( margeNumerotationGeometry ); } else { margeNumerotationGeometry.setTopRight( viewport()->geometry().topLeft() ); } QRect margeSelectionGeometry; if ( m_selectionBorder ) { margeSelectionGeometry = QRect( margeNumerotationGeometry.topRight(), QSize( m_selectionBorder->width(), viewport()->height() ) ); if ( m_lineNumbers ) margeSelectionGeometry.moveLeft( m_lineNumbers->width() ); else margeSelectionGeometry.moveLeft( margeSelectionGeometry.left() -m_selectionBorder->width() ); if ( m_selectionBorder->geometry() != margeSelectionGeometry ) m_selectionBorder->setGeometry( margeSelectionGeometry ); } } QTextCursor TextEdit::getLineCursor( int line ) const { int count = 1; for ( QTextBlock b = document()->begin(); b.isValid(); b = b.next(), count++ ) { if ( count == line ) { return QTextCursor( b ); break; } } QTextCursor c = textCursor(); c.movePosition( QTextCursor::End ); c.movePosition( QTextCursor::StartOfLine ); return c; } // void TextEdit::dialogGotoLine() { QDialog *dial = new QDialog; Ui::GotoLine ui; ui.setupUi(dial); ui.horizontalSlider->setMaximum( linesCount()-1 ); ui.horizontalSlider->setPageStep( (linesCount()-1)/10 ); ui.spinBox->setMaximum( linesCount()-1 ); ui.spinBox->setValue( currentLineNumber() ); ui.spinBox->selectAll(); ui.spinBox->setFocus(); if ( dial->exec() == QDialog::Accepted ) gotoLine( ui.spinBox->value(), true ); delete dial; } // void TextEdit::gotoLine( int line, bool moveTop ) { if ( moveTop ) setTextCursor( getLineCursor( linesCount() ) ); setTextCursor( getLineCursor( line ) ); setFocus( Qt::OtherFocusReason ); // ensureCursorVisible(); if ( moveTop ) { QTextCursor cursor = textCursor(); if ( cursor.isNull() ) return; QTextCursor c = textCursor(); bool mouvementReussi; do { mouvementReussi = c.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, 1 ); setTextCursor( c ); ensureCursorVisible(); } while (mouvementReussi && cursorRect(cursor).y() > 25 ); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor, 1 ); setTextCursor( cursor ); } } // void TextEdit::setLineNumbers( LineNumbers* g ) { if ( g == m_lineNumbers ) return; if ( m_lineNumbers ) delete m_lineNumbers; m_lineNumbers = g; connect( m_mainImpl, SIGNAL( resetExecutedLine() ), m_lineNumbers, SLOT( slotResetExecutedLine() ) ); connect(m_lineNumbers, SIGNAL( digitNumbersChanged() ), this, SLOT( slotAdjustSize() ) ); int margeGaucheSelection = 0; if ( m_selectionBorder ) margeGaucheSelection = m_selectionBorder->width(); if ( m_lineNumbers ) { setViewportMargins( m_lineNumbers->width()+margeGaucheSelection, 0, 0, 0 ); if ( !m_lineNumbers->isVisible() ) m_lineNumbers->show(); } else setViewportMargins( margeGaucheSelection, 0, 0, 0 ); } // void TextEdit::slotAdjustSize() { int margeGaucheSelection = 0; int margeGaucheMargeNumerotation = 0; if ( m_selectionBorder ) margeGaucheSelection = m_selectionBorder->width(); if ( m_lineNumbers ) margeGaucheMargeNumerotation = m_lineNumbers->width(); setViewportMargins( margeGaucheMargeNumerotation+margeGaucheSelection, 0, 0, 0 ); } // LineNumbers* TextEdit::lineNumbers() { return m_lineNumbers; } // void TextEdit::setSelectionBorder( SelectionBorder* m ) { if ( m == m_selectionBorder ) return; if ( m_selectionBorder ) delete m_selectionBorder; m_selectionBorder = m; int margeGaucheMargeNumerotation = 0; if ( m_lineNumbers ) margeGaucheMargeNumerotation = m_lineNumbers->width(); if ( m_selectionBorder ) { setViewportMargins( m_selectionBorder->width()+margeGaucheMargeNumerotation, 0, 0, 0 ); if ( !m_selectionBorder->isVisible() ) m_selectionBorder->show(); } else { setViewportMargins( margeGaucheMargeNumerotation, 0, 0, 0); } } // SelectionBorder* TextEdit::selectionBorder() { return m_selectionBorder; } // void TextEdit::findText() { m_editor->find(); } // void TextEdit::gotoMatchingBracket() { int pos; QTextCursor cursor = textCursor(); if ( cursor.position() == m_matchingBegin ) pos = m_matchingEnd; else pos = m_matchingBegin; if ( pos != -1 ) { cursor.setPosition(pos, QTextCursor::MoveAnchor); setTextCursor( cursor ); } } // void TextEdit::slotFind(Ui::FindWidget uiFind, Ui::ReplaceWidget uiReplace, QString ttf,QTextDocument::FindFlags options, bool fromButton) { QTextDocument *doc = document(); QString oldText = uiFind.editFind->text(); QTextCursor c = textCursor(); QPalette p = uiFind.editFind->palette(); p.setColor(QPalette::Active, QPalette::Base, Qt::white); if (c.hasSelection()) { if ( options & QTextDocument::FindBackward || fromButton) c.setPosition(c.position(), QTextCursor::MoveAnchor); else c.setPosition(c.anchor(), QTextCursor::MoveAnchor); } QTextCursor newCursor = c; if (!ttf.isEmpty()) { newCursor = doc->find(ttf, c, options); uiFind.labelWrapped->hide(); uiReplace.labelWrapped->hide(); if (newCursor.isNull()) { QTextCursor ac(doc); ac.movePosition(options & QTextDocument::FindBackward ? QTextCursor::End : QTextCursor::Start); newCursor = doc->find(ttf, ac, options); if (newCursor.isNull()) { p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102)); newCursor = c; } else { uiFind.labelWrapped->show(); uiReplace.reached->setText(tr("Reached end of page, continued from top")); uiReplace.labelWrapped->show(); } } } setTextCursor(newCursor); uiFind.editFind->setPalette(p); } // void TextEdit::paintEvent ( QPaintEvent * event ) { QPainter painter( viewport() ); if ( m_highlightCurrentLine && m_currentLineColor.isValid() ) { QRect r = cursorRect(); r.setX( 0 ); r.setWidth( viewport()->width() ); painter.fillRect( r, QBrush( m_currentLineColor ) ); } if (m_showWhiteSpaces || m_matchingBegin != -1) printWhiteSpacesAndMatching( painter ); if (m_rightMarginColumn > 0) { int x = m_rightMarginColumn * painter.fontMetrics().maxWidth() - horizontalScrollBar()->value(); QLine l = QLine( x, 0, x, viewport()->height() ); painter.setPen( Qt::black ); painter.drawLine( l ); } painter.end(); QTextEdit::paintEvent( event ); } // void TextEdit::mouseMoveEvent( QMouseEvent * event ) { setMouseHidden( false ); event->setAccepted( false ); QTextEdit::mouseMoveEvent( event ); } // void TextEdit::slotCursorPositionChanged() { if ( m_currentLineColor.isValid() ) viewport()->update(); m_plainText = toPlainText(); if ( m_match ) { clearMatch(); match(); } } // void TextEdit::clearMatch() { m_matchingBegin = -1; m_matchingEnd = -1; } // void TextEdit::match() { QString matchText = simplifiedText( m_plainText ); QTextCursor cursor = textCursor(); int pos = cursor.position(); m_matchingBegin = -1; m_matchingEnd = -1; if( pos==-1 || pos >= m_plainText.size() || !QString("({[]})").contains( m_plainText.at( pos ) ) ) return; QChar car; if ( pos != -1 ) { if ( !cursor.atEnd() ) { car = matchText.at( pos ); } else { car = matchText.at( pos - 1); } } QChar matchCar; long inc = 1; if( car == '(' ) matchCar = ')'; else if( car == '{' ) matchCar = '}'; else if( car == '[' ) matchCar = ']'; else if( car == ')' ) { matchCar = '('; inc = -1; } else if( car == '}' ) { matchCar = '{'; inc = -1; } else if( car == ']' ) { matchCar = '['; inc = -1; } else { return; } m_matchingBegin = pos; int nb = 0; do { if( matchText.at( pos ) == car ) nb++; else if( matchText.at( pos ) == matchCar ) { nb--; if( nb == 0 ) { m_matchingEnd = pos; break; } } pos += inc; } while( pos >= 0 && pos < matchText.length() ); if( m_matchingBegin > m_matchingEnd ) qSwap(m_matchingBegin, m_matchingEnd ); return; } // void TextEdit::slotWordCompletion(QListWidgetItem *item) { m_completionList->hide(); if ( m_completionList->selectionMode() == QAbstractItemView::NoSelection ) { ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return; } QString signature = item->text(); Tag tag = item->data(Qt::UserRole).value(); QString text = tag.name; wordUnderCursor(QPoint(), true); textCursor().insertText( text ); if ( m_completion && tag.signature.contains("(") && !tag.signature.contains("()") ) { completionHelp(); } if ( tag.signature.contains("(") && m_plainText.at( textCursor().position() ) != '(' ) { textCursor().insertText( "()" ); if ( !tag.signature.contains("()") ) { QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::PreviousCharacter); setTextCursor( cursor ); } } ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return; } // void TextEdit::keyPressEvent ( QKeyEvent * event ) { //m_editor->keyPress( event ); QTextCursor cursor = textCursor(); clearMatch(); setMouseHidden( true ); if ( event->key() == Qt::Key_Tab ) { slotIndent( !(event->modifiers() == Qt::ControlModifier) ); } else if ( m_completionList->isVisible() ) { if (event->key() == Qt::Key_Backspace && (m_plainText.left(textCursor().position()).right(1) == "." || m_plainText.left(textCursor().position()).right(1) == ">" || m_plainText.left(textCursor().position()).right(1) == ":")) { m_completionList->hide(); } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Up ) { int row = m_completionList->currentRow(); if ( row > 0 ) m_completionList->setCurrentRow( row-1 ); } else if ( event->key() == Qt::Key_Down ) { int row = m_completionList->currentRow(); if ( row+1 < m_completionList->count() ) m_completionList->setCurrentRow( row+1 ); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) slotWordCompletion( m_completionList->currentItem() ); else if ( QChar(event->key()).category() == QChar::Other_Control && event->key() != Qt::Key_Backspace ) { m_completionList->hide(); QTextEdit::keyPressEvent ( event ); } else { QTextEdit::keyPressEvent ( event ); QString s = wordUnderCursor(); QList listeItems = m_completionList->findItems(s, Qt::MatchExactly); if ( listeItems.count()==1 ) { m_completionList->hide(); } else { listeItems = m_completionList->findItems(s, Qt::MatchStartsWith); if ( listeItems.count() ) m_completionList->setCurrentItem( listeItems.first() ); } } } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) { if ( m_autoindent ) { QTextEdit::keyPressEvent ( event ); autoIndent(); } else { QTextEdit::keyPressEvent ( event ); } // Divius: comments autoclose if (m_autocomments) { QTextBlock commentBlock = getLineCursor(currentLineNumber()-1).block(); QString prevLine = commentBlock.text(); if (prevLine.endsWith("/*") || prevLine.endsWith("/**") || prevLine.endsWith("/*!")) { autocomments(true); } else if (prevLine.simplified().startsWith("*") && !prevLine.simplified().startsWith("*/")) while (commentBlock.isValid()) { prevLine = commentBlock.text(); if (prevLine.simplified().startsWith("/*")) { autocomments(false); break; } else if (prevLine.simplified().startsWith("*") && !prevLine.simplified().startsWith("*/")) { commentBlock = commentBlock.previous(); } else { break; } } } // } else if ( event->key() == Qt::Key_Home && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_home( event->modifiers() == Qt::ShiftModifier ); } else if ( event->key() == Qt::Key_End && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_end( event->modifiers() == Qt::ShiftModifier ); } else if ( m_autoindent && event->key() == '{' || event->key() == '}' ) { QTextEdit::keyPressEvent ( event ); autoUnindent(); if ( m_autobrackets && event->key() == '{' ) autobrackets(); } else if ( event->key() == '(' && m_completion ) { QTextEdit::keyPressEvent ( event ); completionHelp(); } else if ( event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace ) { QTextEdit::keyPressEvent ( event ); } else if ((event->key() == Qt::Key_Down) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepAdd ); event->accept(); } else if ((event->key() == Qt::Key_Up) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepSub ); event->accept(); } else { QTextEdit::keyPressEvent ( event ); } event->accept(); } // void TextEdit::key_home(bool shift) { QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int firstWord = 0, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::StartOfLine, moveMode ); while ( s.at(firstWord) == ' ' || s.at(firstWord) == '\t' ) { // while determining the first word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later ++firstWord; cursor.movePosition( QTextCursor::NextCharacter, moveMode ); } if (oldPos <= firstWord && oldPos > 0) // if the cursor was in front of the first word, move it to the beginning. However, if it was at the beginning of the line, let it where it is (first character) cursor.movePosition( QTextCursor::StartOfLine, moveMode ); setTextCursor( cursor ); } // void TextEdit::key_end(bool shift) { QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int lastWord, endOfLine, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::EndOfLine, moveMode ); lastWord = endOfLine = cursor.columnNumber()-1; while ( s.at(lastWord) == ' ' || s.at(lastWord) == '\t' ) { // while determining the last word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later --lastWord; cursor.movePosition( QTextCursor::PreviousCharacter, moveMode ); } if (oldPos >= lastWord && oldPos < endOfLine) // if the cursor was after the last word, move it to the end. However, if it was at the end of the line, let it where it is (last character) cursor.movePosition( QTextCursor::EndOfLine, moveMode ); setTextCursor( cursor ); } // void TextEdit::textPlugin(TextEditInterface *iTextEdit) { QApplication::setOverrideCursor(Qt::WaitCursor); QTextCursor cursor = textCursor(); int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); QString s = iTextEdit->text(m_plainText, cursor.selection().toPlainText(), codec); if (s.isEmpty()) { QApplication::restoreOverrideCursor(); return; } if ( iTextEdit->action() == TextEditInterface::ReplaceAll ) { int posScrollbar = verticalScrollBar()->value(); int line = currentLineNumber(); setPlainText( s ); document()->setModified( true ); gotoLine(line, false); verticalScrollBar()->setValue( posScrollbar ); } else { cursor.insertText( s ); setTextCursor( cursor ); } QApplication::restoreOverrideCursor(); } // void TextEdit::dropEvent( QDropEvent * event ) { int posScrollbar = verticalScrollBar()->value(); QString text; if ( event->mimeData()->hasText() ) { QTextCursor save = textCursor(); setTextCursor( cursorForPosition( QPoint( event->pos().x(), event->pos().y() ) ) ); text = event->mimeData()->text(); int linesAdded = 0; if ( text.length() ) linesAdded = text.count( QChar('\n') ); setTextCursor( save ); } QTextEdit::dropEvent( event ); if ( event->dropAction() == Qt::CopyAction ) { QTextCursor cursor = textCursor(); int pos = textCursor().position(); cursor.setPosition(pos-text.length(), QTextCursor::MoveAnchor); cursor.setPosition(pos, QTextCursor::KeepAnchor); setTextCursor( cursor ); } verticalScrollBar()->setValue( posScrollbar ); } // void TextEdit::slotIndent(bool indenter) { setMouseHidden( true ); //string used to indent text QString indentString; if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); indentString.fill(' ', nbSpaces); } else { indentString = QString("\t"); } QTextCursor curseurActuel = textCursor(); QTextCursor c = textCursor(); c.beginEditBlock(); if ( !c.hasSelection() ) { if(indenter) { c.insertText( indentString ); } else { //delete the previous character if it's a space or a tab int p = textCursor().position() - 1; if( p>0 && p< m_plainText.length() ) { QChar s = m_plainText.at( p ); if ( s == '\t' || s == ' ') { c.deletePreviousChar(); } } } c.endEditBlock(); return; } int debut = c.selectionStart(); int fin = c.selectionEnd(); // QTextBlock blocDebut = document()->findBlock(debut); QTextBlock blocFin = document()->findBlock(fin); //special case if ( c.atBlockStart()) { blocFin = document()->findBlock(fin).previous(); } c.clearSelection(); if ( blocDebut == blocFin ) { curseurActuel.insertText( indentString ); setTextCursor( curseurActuel ); c.endEditBlock(); return; } QTextBlock block = blocDebut; while ( block.isValid() && !(blocFin < block) ) { c.setPosition(block.position(), QTextCursor::MoveAnchor); if ( !indenter ) { if ( block.text().count() && (block.text().at(0) == '\t' || block.text().at(0) == ' ') ) c.deleteChar(); } else { c.insertText( indentString ); } setTextCursor( c ); block = block.next(); } int ligneDebut = lineNumber(blocDebut); int ligneFin = lineNumber(blocFin); selectLines(ligneDebut, ligneFin); c.endEditBlock(); } // void TextEdit::slotUnindent() { slotIndent(false); } // void TextEdit::mouseDoubleClickEvent( QMouseEvent * event ) { #if 0 mousePosition = event->pos(); QTextCursor cursor = textCursor(); int pos = cursor.position(); while ( pos>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( pos-1 ).toUpper() ) ) pos--; cursor.setPosition(pos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( pos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( pos ).toUpper() ) ) pos++; cursor.setPosition(pos, QTextCursor::KeepAnchor); setTextCursor( cursor ); #endif QTextEdit::mouseDoubleClickEvent(event); } // void TextEdit::setExecutedLine(int line) { if ( m_lineNumbers) { m_lineNumbers->setExecutedLine(line); } } // void TextEdit::contextMenuEvent(QContextMenuEvent * e) { mousePosition = e->pos(); m_lineNumber = lineNumber( e->pos() ); QMenu *menu = createStandardContextMenu(); menu->clear(); connect(menu->addAction(QIcon(":/treeview/images/cpp.png"), tr("Goto Implementation")), SIGNAL(triggered()), this, SLOT(slotGotoImplementation()) ); connect(menu->addAction(QIcon(":/treeview/images/h.png"), tr("Goto Declaration")), SIGNAL(triggered()), this, SLOT(slotGotoDeclaration()) ); // connect(menu->addAction(QIcon(":/toolbar/images/undo.png"), tr("Undo")), SIGNAL(triggered()), this, SLOT(undo()) ); // connect(menu->addAction(QIcon(":/toolbar/images/redo.png"), tr("Redo")), SIGNAL(triggered()), this, SLOT(redo()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/editcut.png"), tr("Cut")), SIGNAL(triggered()), this, SLOT(cut()) ); connect(menu->addAction(QIcon(":/toolbar/images/editcopy.png"), tr("Copy")), SIGNAL(triggered()), this, SLOT(copy()) ); connect(menu->addAction(QIcon(":/toolbar/images/editpaste.png"), tr("Paste")), SIGNAL(triggered()), this, SLOT(paste()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/indente.png"), tr("Selection Indent")), SIGNAL(triggered()), this, SLOT(slotIndent()) ); connect(menu->addAction(QIcon(":/toolbar/images/desindente.png"), tr("Selection Unindent")), SIGNAL(triggered()), this, SLOT(slotUnindent()) ); QTextCursor cursor = textCursor(); menu->addSeparator(); connect(menu->addAction(tr("Select All")), SIGNAL(triggered()), this, SLOT(selectAll()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/find.png"), tr("Find...")), SIGNAL(triggered()), m_editor, SLOT(find()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/divers/images/bookmark.png"), tr("Toggle Bookmark")), SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(menu->addAction(QIcon(":/divers/images/breakpoint.png"), tr("Toggle Breakpoint")), SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // // menu->exec(e->globalPos()); delete menu; } // void TextEdit::selectLines(int debut, int fin) { if ( debut > fin ) qSwap( debut, fin); QTextCursor c = textCursor(); c.movePosition(QTextCursor::Start ); c.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, debut-1 ); c.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor, fin-debut+1 ); setTextCursor( c ); ensureCursorVisible(); } // // QString TextEdit::wordUnderCursor(const QPoint & pos, bool select) { QTextCursor save(textCursor()); QTextCursor cursor; if ( pos.isNull() ) cursor = textCursor(); else cursor = cursorForPosition ( pos ); // int curpos = cursor.position(); while ( curpos>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos-1 ).toUpper() ) ) curpos--; cursor.setPosition(curpos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( curpos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::KeepAnchor); QString word = cursor.selectedText().simplified(); // if ( select ) setTextCursor( cursor ); else setTextCursor( save ); return word; } // QString TextEdit::firstWordUnderCursor() { QTextCursor save(textCursor()); QTextCursor cursor; cursor = textCursor(); // int curpos = cursor.position(); while ( curpos>0 && !QString(";").contains( m_plainText.at( curpos-1 ).toUpper() ) ) curpos--; while ( curpos < m_plainText.length() && !QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( curpos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::KeepAnchor); QString word = cursor.selectedText().simplified(); // setTextCursor( save ); return word; } QString TextEdit::wordUnderCursor(const QString text) { int begin = text.length(); while ( begin>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( text.at( begin-1 ).toUpper() ) ) begin--; // int end = begin; while ( end < text.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( text.at( end ).toUpper() ) ) end++; QString word = text.mid(begin, end-begin); return word; } // QString TextEdit::classNameUnderCursor(const QPoint & pos, bool addThis) { QTextCursor cursor; if ( pos.isNull() ) cursor = textCursor(); else cursor = cursorForPosition ( pos ); QString c = m_plainText.left(cursor.position()); for(int i=c.length()-1; i>=0; i--) { if( c.at(i) == '.' ) { c = c.left(i) + "." + m_editor->wordUnderCursor(); break; } else if( c.mid(i, 2) == "->" ) { c = c.left(i) + "->" + m_editor->wordUnderCursor(); break; } else if( c.mid(i, 2) == "::" ) { c = c.left(i) + "::"; break; } } QString classname = m_completion->className(c); if ( classname.isEmpty() && addThis ) { c += " this->"; classname = m_completion->className(c); } return classname; } // int TextEdit::currentLineNumber(QTextCursor cursor) { if( cursor.isNull() ) return lineNumber( textCursor() ); else return lineNumber( cursor ); } // int TextEdit::currentLineNumber(QTextBlock block) { int lineNumber = 1; for ( QTextBlock b =document()->begin(); b.isValid(); b = b.next(), lineNumber++) { if ( b == block ) { return lineNumber; } } return -1; } // int TextEdit::lineNumber(QTextCursor cursor) { QTextBlock blocCurseur = cursor.block(); int m_lineNumber = 1; for ( QTextBlock block =document()->begin(); block.isValid() && block != blocCurseur; block = block.next() ) m_lineNumber++; return m_lineNumber++; } // int TextEdit::lineNumber(QTextBlock b) { int m_lineNumber = 1; for ( QTextBlock block =document()->begin(); block.isValid() && block != b; block = block.next() ) m_lineNumber++; return m_lineNumber++; } // int TextEdit::linesCount() { int line = 1; for ( QTextBlock block = document()->begin(); block.isValid(); block = block.next() ) line++; return line; } // int TextEdit::lineNumber(QPoint point) { return lineNumber( cursorForPosition( point ) ); } // // void TextEdit::slotToggleBookmark() { m_editor->toggleBookmark( m_lineNumber ); if( m_lineNumbers ) m_lineNumbers->update(); } // // void TextEdit::slotToggleBreakpoint() { m_editor->toggleBreakpoint( m_lineNumber, QString(), true ); if( m_lineNumbers ) m_lineNumbers->update(); } void TextEdit::insertText(QString text, int insertAfterLine) { if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); QString spaces; for (int i = 0; ifilename().toLower().endsWith(".cpp") ) classname = classNameUnderCursor(mousePosition, false); QString name = wordUnderCursor(mousePosition); if ( name.isEmpty() ) return; const QList *itemsList; itemsList = m_mainImpl->treeClassesItems(); bool found = false; for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.classname == classname && parsedItem.name == name) { if ( !parsedItem.implementation.isEmpty() ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } /* Below, the item in database has the same filename that the current editor and the same line number. The cursor is on a declaration in a header (.h). Open the implementation (.cpp). */ /* If sender() is not null, this function is called from the context menu. Otherwise from the main menu */ else if (m_editor->filename().toLower().endsWith(".h") && parsedItem.declaration.section("|", 0, 0) == m_editor->filename() && parsedItem.name == name && parsedItem.declaration.section("|", 1, 1).toInt() == currentLineNumber( sender() ? cursorForPosition(mousePosition) : QTextCursor() ) ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } // Now if the text is an .cpp, find the first name in database with the name "name" // Perhaps return a bad result but it should work many time. if ( !found && m_editor->filename().toLower().endsWith(".cpp")) { for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.name == name ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); break; } } } } // void TextEdit::slotGotoDeclaration() { QString classname = classNameUnderCursor(mousePosition, false); QString name = wordUnderCursor(mousePosition); const QList *itemsList = m_mainImpl->treeClassesItems(); bool found = false; for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.classname == classname && parsedItem.name == name) { if ( !parsedItem.declaration.isEmpty() ) { QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } } if ( !found && m_editor->filename().toLower().endsWith(".cpp")) { for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.name == name ) { QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); break; } } } } // void TextEdit::completionHelp() { if ( !m_completion ) return; QString c = m_plainText.left( textCursor().position() ); if( c.right(1) == "(" ) c = c.left( c.count()-1 ); QString name = wordUnderCursor(c); if( QString(":if:else:for:return:connect:while:do:").contains( name ) ) return; c = c.section(name, 0, 0); emit initParse(InitCompletion::Completion, m_editor->filename(), c, true, true, true, name); } void TextEdit::setTextColor(QColor c) { QPalette p = palette(); p.setColor( QPalette::Text, c ); setPalette(p); viewport()->update(); } void TextEdit::saveAsTemp() { QString filename = m_editor->filename().section(".cpp", 0, 0) + "-qdeveloptmp.cpp"; QFile file( filename ); if (!file.open(QIODevice::WriteOnly)) { return; } QTextStream out(&file); out << toPlainText(); file.close(); } QString TextEdit::tempFilename() { return m_editor->filename().section(".cpp", 0, 0) + "-qdeveloptmp.cpp"; } qdevelop-v0.28/src/stackimpl.cpp0000644000175000017500000000427211362261066015716 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "stackimpl.h" #include "mainimpl.h" // #include // StackImpl::StackImpl( MainImpl * parent, QListWidget *m_list) : m_mainImpl(parent), m_list(m_list) { connect(m_list, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); } // void StackImpl::addLine( const QString line ) { QString s = line; s = s.mid( s.indexOf(" ") ); if( s.contains(" in ") ) s = line.section(" in ", -1); s = s.simplified(); m_list->addItem( s ); } // void StackImpl::slotCurrentItemChanged ( QListWidgetItem * item, QListWidgetItem * ) { if( !item ) return; QString s = item->text().section(" at ", -1); QString filename = s.section(":", 0, 0); int numLine = s.section(":", -1, -1).toInt(); QStringList filter = m_infoSources.filter( filename ); QStringList files; foreach(QString f, filter) { if( !QFile::exists( f ) ) f = m_directory + "/" + f; files << f; } if( filter.count() ) m_mainImpl->openFile( files, numLine); } // void StackImpl::infoSources(const QString s ) { if( s.indexOf("InfoSources:Source files") == -1) { foreach(QString text, s.split(",") ) { m_infoSources << text.remove(QString("InfoSources:")).simplified(); } } } void StackImpl::clear() { m_list->clear(); } qdevelop-v0.28/src/debug.cpp0000644000175000017500000003067511362261066015023 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "debug.h" #include "editor.h" #include "registersimpl.h" #include #include #include #include // #ifdef Q_OS_LINUX #include #include #endif // #define QD qDebug() << __FILE__ << __LINE__ << ":" // Debug::Debug(QObject * parent, RegistersImpl *registersImpl, QString gdbName, Parameters p, QString exe, bool exeOnly) : QThread(parent) { m_parent = parent; m_registersImpl = registersImpl; m_gdbName = gdbName; executableName = exe; m_executeWithoutDebug = exeOnly; m_parameters = p; } // void Debug::run() { m_pid = 0; m_request = None; connect(m_parent, SIGNAL(debugCommand(QString)), this, SLOT(slotDebugCommand(QString)) ); connect(m_registersImpl, SIGNAL(debugCommand(QString)), this, SLOT(slotDebugCommand(QString)) ); connect(m_parent, SIGNAL(stopDebug()), this, SLOT(slotStopDebug()) ); connect(m_parent, SIGNAL(pauseDebug()), this, SLOT(slotPauseDebug()) ); connect(m_parent, SIGNAL(otherVariables(QStringList)), this, SLOT(slotOtherVariables(QStringList)) ); if( m_executeWithoutDebug ) executeWithoutDebug(); else launchDebug(); } // void Debug::executeWithoutDebug() { emit message( tr("Running...") ); processDebug = new QProcess(); connect(processDebug, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessagesDebug()) ); connect(processDebug, SIGNAL(readyReadStandardError()), this, SLOT(slotMessagesDebug()) ); setEnvironment( processDebug ); //processDebug->start("\""+executableName+"\"", QStringList() << m_parameters.arguments); //processDebug->start(executableName, QStringList() << m_parameters.arguments); // Divius: previous implementation will wrap all arguments in quotes processDebug->start("\""+executableName+"\"" + " " + m_parameters.arguments); processDebug->waitForFinished(500); // On attend un peu pour passer en �at Running while( processDebug->state() == QProcess::Running ) { processDebug->waitForFinished(5); } if (processDebug->exitCode() == 0) emit message( "---------------------- "+tr("Exited normally")+" ----------------------" ); else emit message( "---------------------- "+tr("Exited with error code %1").arg(processDebug->exitCode())+" ----------------------" ); emit endDebug(); } // void Debug::launchDebug() { emit message( tr("Debug...") ); processDebug = new QProcess(); connect(processDebug, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessagesDebug()) ); connect(processDebug, SIGNAL(readyReadStandardError()), this, SLOT(slotMessagesDebug()) ); setEnvironment( processDebug ); processDebug->start(m_gdbName, QStringList() << "--silent" << "--fullname" << executableName ); configureGdb(); writeMessagesToDebugger(); processDebug->write("run "+m_parameters.arguments.toLatin1()+"\n"); processDebug->waitForFinished(500); // On attend un peu pour passer en �at Running while( processDebug->state() == QProcess::Running ) { processDebug->waitForFinished(5); writeMessagesToDebugger(); } emit message( "---------------------- "+tr("Debug exited")+" ----------------------" ); } // void Debug::setEnvironment(QProcess *process) { process->setWorkingDirectory( m_parameters.workingDirectory ); process->setEnvironment( m_parameters.env ); } // void Debug::writeMessagesToDebugger() { QStringListIterator it(messagesToDebugger); while( it.hasNext() ) { QString msg = it.next(); processDebug->write( msg.toLatin1() ); } messagesToDebugger.clear(); } // void Debug::slotMessagesDebug() { char breakpoint[] = { 26, 26, 0x0 }; QString messages = processDebug->readAllStandardOutput(); if( m_executeWithoutDebug ) { slotMessagesError(); return; } static QString listMessagesDebug; listMessagesDebug += QString( messages ); if( !listMessagesDebug.endsWith("(gdb) ") ) { return; } while( listMessagesDebug.length() ) { QString s = listMessagesDebug.section("\n", 0, 0); listMessagesDebug = listMessagesDebug.section("\n", 1); if( !s.isEmpty() ) { if( s.indexOf( breakpoint )==0 ) { emit message( QString::fromUtf8(s.toLocal8Bit()) ); listVariables.clear(); listVariablesToSend.clear(); m_request = InfoScope; QString numLine = s.section(":", -4, -4); messagesToDebugger << "info scope "+numLine+"\n"; continue; } // if( s.indexOf("Program exited normally.") == 0 ) { emit message( QString::fromUtf8(s.toLocal8Bit()) ); slotStopDebug(); } else if( s.indexOf("[New Thread") == 0 && m_pid==0) { m_pid = s.section("(", 1, 1).section(" ", 1, 1).section(")", 0, 0).toInt(); } else if( m_request == Registers ) { s = "Registers:"+listMessagesDebug; emit message( QString::fromUtf8(s.toLocal8Bit()) ); listMessagesDebug.clear(); messagesToDebugger << "info sources\n"; m_request = InfoSources; } else if( m_request == InfoSources ) { if( s.indexOf("(gdb)") == 0) { m_request = None; s = "InfoSourcesEnd"; messagesToDebugger << "bt\n"; } else s = "InfoSources:"+s; emit message( QString::fromUtf8(s.toLocal8Bit()) ); } else if( m_request == InfoScope ) { if( s.indexOf("(gdb)") == 0 && listVariables.count() != 0 ) { foreach(QString s, m_otherVariables) { Variable v; v.name = s; v.kind = Debug::OtherArgs; listVariables.append( v ); } m_request = Whatis; Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; } else if( s.contains( "No arguments" ) ) { if( listVariables.count() ) { foreach(QString s, m_otherVariables) { Variable v; v.name = s; v.kind = Debug::OtherArgs; listVariables.append( v ); } m_request = Whatis; Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; } else { m_request = None; } } else if( s.indexOf("Symbol ") == 0 ) { QString name = s.section("Symbol ", 1).section(" ", 0, 0).simplified(); if( !name.isEmpty() ) { Variable variable; variable.name = name; variable.kind = Local; listVariables.append( variable ); } } } else if ( m_request == Whatis ) { QString type = s.section("type = ", 1).simplified(); if( !type.isEmpty() ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); variable.type = type; listVariables.prepend( variable ); m_request = Address; if( type.contains( "*" ) ) { messagesToDebugger << "p "+variable.name+"\n"; } else { messagesToDebugger << "p &"+variable.name+"\n"; } } } else if ( m_request == Address ) { QString address = s.section(" = ", 1).simplified(); if( !address.isEmpty() ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); variable.address = address; listVariables.prepend( variable ); if( variable.type.section(" ", 0, 0) == "QString" ) { m_request = Length; messagesToDebugger << "p "+variable.name+"->d.size\n"; } else { m_request = Value; if( variable.type.section(" ", 0, 0) == "string" ) messagesToDebugger << "p "+variable.name+".c_str()\n"; else messagesToDebugger << "p "+variable.name+"\n"; } } } else if ( m_request == Length ) { if( s.length() && s.at(0) == '$' ) { int length = s.section(" = ", 1).simplified().toInt(); Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); if( length > 0 ) { variable.length = qMin(length, 100); listVariables.prepend( variable ); m_request = Value; messagesToDebugger << "p "+variable.name+"->d.data[0]\n"; } else { listVariablesToSend.append( variable ); if( listVariables.count() ) { Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); m_request = None; } } } } else if ( m_request == Value ) { s.remove( "(gdb) "); if( s.length() && s.at(0) == '$' ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); QString content = s.section("= ", 1); if( variable.type.section(" ", 0, 0) == "QString" ) { if( variable.length && variable.content.length() < variable.length ) { variable.content += QChar( content.toInt() ); m_request = Value; listVariables.prepend( variable ); messagesToDebugger << "p "+variable.name+"->d.data["+QString::number(variable.content.length())+"]\n"; continue; } else { listVariablesToSend.append( variable ); } } else { variable.content = QString::fromUtf8(content.toLocal8Bit()); listVariablesToSend.append( variable ); } if( listVariables.count() ) { variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { m_request = None; emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); listMessagesDebug.clear(); messagesToDebugger << "info register\n"; m_request = Registers; } } } else { emit message( QString::fromUtf8(s.toLocal8Bit()) ); } } } slotMessagesError(); } void Debug::slotMessagesError() { QStringList list = QString(processDebug->readAllStandardError()).split("\n"); if( list.count() ) foreach(QString s, list) { if( !s.isEmpty() ) { if( m_request != None ) { if( listVariables.count() ) { Variable variable = listVariables.at(0); variable.content = tr("Error: Unable to evaluate value"); listVariablesToSend.append( variable ); listVariables.removeAt( 0 ); } if( listVariables.count() ) { Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); m_request = None; } } else emit message( s ); } } list.clear(); } // void Debug::slotOtherVariables(QStringList list) { m_otherVariables = list; } // void Debug::slotDebugCommand(QString text) { if( text == "info sources\n" ) m_request = InfoSources; messagesToDebugger << text; } // void Debug::slotBreakpoint(QString filename, unsigned int line, BlockUserData *blockUserData) { QString point; if( blockUserData->breakpoint ) { if( blockUserData->isTrue ) { if( blockUserData->breakpointCondition.isEmpty() ) point = "break "+filename+":"+QString::number(line)+"\n"; else point = "break "+filename+":"+QString::number(line)+" if "+blockUserData->breakpointCondition+"\n"; } else { point = "watch "+blockUserData->breakpointCondition+"\n"; } } else point = "clear "+filename+":"+QString::number(line)+"\n"; messagesToDebugger << point; } // void Debug::slotStopDebug() { emit endDebug(); #ifdef Q_OS_LINUX if( m_pid ) { kill(m_pid, SIGKILL); m_pid = 0; } #endif processDebug->kill(); processDebug->deleteLater(); } // void Debug::slotPauseDebug() { #ifdef Q_OS_LINUX if( m_pid ) { kill(m_pid, SIGINT); emit onPause(); } #endif } // void Debug::configureGdb() { slotDebugCommand("set pagination off\n"); slotDebugCommand("set width 0\n"); slotDebugCommand("set height 0\n"); slotDebugCommand("set complaints 0\n"); // } qdevelop-v0.28/src/addnewimpl.cpp0000644000175000017500000001114211362261066016045 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include // AddNewImpl::AddNewImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); suffixe = "cpp"; connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(directoryButton, SIGNAL(clicked()), this, SLOT(slotDirectoryChoice()) ); connect(comboProjects, SIGNAL(activated(QString)), this, SLOT(slotComboProjects(QString)) ); connect(source, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(header, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(dialog, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(resource, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(translation, SIGNAL(clicked()), this, SLOT(slotFileType()) ); } // void AddNewImpl::slotDirectoryChoice() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel choosen return; } location->setText( s ); } // void AddNewImpl::slotComboProjects(QString /*projectName*/) { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); m_projectDirectory = m_projectManager->projectDirectory( item ); location->setText( m_projectDirectory ); } // void AddNewImpl::slotFileType() { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); if( source->isChecked() ) { suffixe = "cpp"; location->setText( m_projectManager->srcDirectory( item ) ); } else if( header->isChecked() ) { suffixe = "h"; location->setText( m_projectManager->srcDirectory( item ) ); } else if( dialog->isChecked() ) { suffixe = "ui"; location->setText( m_projectManager->uiDirectory( item ) ); } else if( resource->isChecked() ) { suffixe = "qrc"; location->setText( m_projectManager->projectDirectory( item ) ); } else if( translation->isChecked() ) { suffixe = "ts"; location->setText( m_projectManager->projectDirectory( item ) ); } // if( filename->text().lastIndexOf(".") > 0 ) { QString prefixe = filename->text().left( filename->text().lastIndexOf(".") ); filename->setText( prefixe + "." + suffixe); } else if( filename->text().length() ) filename->setText( filename->text() + "." + suffixe); } // void AddNewImpl::slotAccept() { QString suffixeSaisi; if( filename->text().lastIndexOf(".") > 0 ) { suffixeSaisi = filename->text().mid( filename->text().lastIndexOf(".")+1 ); } if( suffixeSaisi != suffixe && !(suffixe == "h" && suffixeSaisi == "hpp") ) { QMessageBox::warning(this, "QDevelop", tr("The suffix of the file is not correct."), tr("Cancel") ); return; } if( suffixe == "cpp" || suffixe == "c" || suffixe == "h" || suffixe == "hpp" ) { QString type = tr("header"); QString autreSuffixe = "h"; if( suffixe == "h" || suffixe == "hpp") { type = tr("source"); autreSuffixe = "cpp"; } int rep = 1; if (suffixeSaisi != "hpp") rep = QMessageBox::question(0, "QDevelop", tr("Also create the file %1 in same location ?").arg(type), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if( rep == 2 ) return; if( rep == 0 ) { QString nomFic = filename->text(); QString nomAutre = nomFic.left( nomFic.lastIndexOf(".") ) + "." + autreSuffixe; filename->setText( "\"" + nomFic + "\", " + "\"" + nomAutre + "\""); } } else filename->setText( "\"" + filename->text() + "\""); accept(); } // qdevelop-v0.28/src/selectionborder.cpp0000644000175000017500000000513511362261066017111 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "selectionborder.h" #include "textEdit.h" // #include #include #include #include #include #include #include #include // SelectionBorder::SelectionBorder( TextEdit* edit ) : QWidget( (QWidget *)edit ), m_textEdit( edit ) { setObjectName( "editorZone" ); m_begin = m_end = 0; setBackgroundColor( QColor( "#ffffd2" ) ); setFixedWidth( 10 ); setCursor( QCursor(QPixmap(":/divers/images/curseurDroit.png"), 12, 0)); } // void SelectionBorder::paintEvent( QPaintEvent* ) { QPainter p( this ); p.setBrush( backgroundColor() ); p.setPen( backgroundColor() ); p.drawRect( rect() ); } // void SelectionBorder::mousePressEvent ( QMouseEvent * event ) { if( event->modifiers() == Qt::NoModifier ) m_begin = m_end = 0; mouseMoveEvent( event ); } // void SelectionBorder::mouseMoveEvent ( QMouseEvent * event ) { QTextCursor cursor = m_textEdit->cursorForPosition( event->pos() ); int num = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid() && block != cursor.block(); block = block.next(), num++ ) ; if( cursor.isNull() ) return; if( m_begin == 0 ) m_begin = num; m_end = num; //if( m_begin > m_end ) //qSwap( m_begin, m_end); m_textEdit->selectLines(m_begin, m_end); } // void SelectionBorder::mouseReleaseEvent ( QMouseEvent * /*event*/ ) {} // // void SelectionBorder::setBackgroundColor( const QColor& c ) { if ( c == mBackgroundColor ) return; mBackgroundColor = c; QPalette p( palette() ); p.setColor( backgroundRole(), mBackgroundColor ); setPalette( p ); } // const QColor& SelectionBorder::backgroundColor() const { return mBackgroundColor; } qdevelop-v0.28/src/linenumbers.cpp0000644000175000017500000002201411362261066016244 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ /******************************************************************************************************** * Une partie de cette classe fait partie du projet Monkey Studio * de Azevedo Filipe aka Nox PasNox ( pasnox at gmail dot com ) ********************************************************************************************************/ #include "linenumbers.h" #include "textEdit.h" #include "editor.h" // #include #include #include #include #include #include #include #include #include "ui_breakpointcondition.h" // #define QD qDebug() << __FILE__ << __LINE__ << ":" // LineNumbers::LineNumbers( TextEdit* edit, Editor *editor) : QWidget( (QWidget *)edit ), m_textEdit( edit ), m_editor( editor ) { setObjectName( "editorZone" ); setAutoFillBackground( true ); connect( m_textEdit->document()->documentLayout(), SIGNAL( update( const QRectF& ) ), this, SLOT( update() ) ); connect( m_textEdit->verticalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( update() ) ); m_executedLine = 0; setDefaultProperties(); setMouseTracking( true ); } // void LineNumbers::paintEvent( QPaintEvent* ) { int contentsY = m_textEdit->verticalScrollBar()->value(); qreal pageBottom = contentsY + m_textEdit->viewport()->height(); int m_lineNumber = 1; const QFontMetrics fm = fontMetrics(); const int ascent = fontMetrics().ascent() +1; // QPainter p( this ); // need a hack to only browse the viewed block for big document for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), m_lineNumber++ ) { QTextLayout* layout = block.layout(); const QRectF boundingRect = layout->boundingRect(); QPointF position = layout->position(); if ( position.y() +boundingRect.height() < contentsY ) continue; if ( position.y() > pageBottom ) break; const QString txt = QString::number( m_lineNumber ); if( m_lineNumber == m_executedLine ) { int centreV = qRound( position.y() ) -contentsY + 8; p.setBrush( Qt::blue ); float x = width()-1; const QPointF points[7] = { QPointF(x, centreV), QPointF(x-9, centreV-8), QPointF(x-9, centreV-4), QPointF(x-15, centreV-4), QPointF(x-15, centreV+4), QPointF(x-9, centreV+4), QPointF(x-9, centreV+8), }; p.drawPolygon(points, 7); } else p.drawText( width() -fm.width( txt ) - 2, qRound( position.y() ) -contentsY +ascent, txt ); // -fm.width( "0" ) is an ampty place/indent BlockUserData *blockUserData = (BlockUserData*)block.userData(); if( blockUserData && blockUserData->breakpoint ) { QPixmap pixmap = QPixmap(":/divers/images/breakpoint.png"); if( !blockUserData->breakpointCondition.isEmpty() ) pixmap = QPixmap(":/divers/images/breakpoint2.png"); p.drawPixmap( 1, qRound( position.y() ) -contentsY-4, pixmap); } if( blockUserData && blockUserData->bookmark ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-6,QPixmap(":/divers/images/bookmark.png")); } if( blockUserData && !blockUserData->errorString.isEmpty() ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-2,QPixmap(":/divers/images/error.png") ); } else if( blockUserData && !blockUserData->warningString.isEmpty() ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-2,QPixmap(":/divers/images/warning.png") ); } } p.end(); } // PROPERTIES void LineNumbers::setDigitNumbers( int i ) { if ( i == mDigitNumbers ) return; mDigitNumbers = i; setFixedWidth( fontMetrics().width( "0" ) * (i) + 22 ); // +2 = 1 empty place before and 1 empty place after //setFixedWidth( fontMetrics().width( "0" ) * ( mDigitNumbers +2 ) ); // +2 = 1 empty place before and 1 empty place after emit digitNumbersChanged(); } // int LineNumbers::digitNumbers() const { return mDigitNumbers; } // void LineNumbers::setTextColor( const QColor& c ) { if ( c == mTextColor ) return; mTextColor = c; QPalette p( palette() ); p.setColor( foregroundRole(), mTextColor ); setPalette( p ); emit textColorChanged( mTextColor ); } // const QColor& LineNumbers::textColor() const { return mTextColor; } // void LineNumbers::setBackgroundColor( const QColor& c ) { if ( c == mBackgroundColor ) return; mBackgroundColor = c; QPalette p( palette() ); p.setColor( backgroundRole(), mBackgroundColor ); setPalette( p ); emit backgroundColorChanged( mBackgroundColor ); } // const QColor& LineNumbers::backgroundColor() const { return mBackgroundColor; } // END PROPERTIES void LineNumbers::setDefaultProperties() { // Default properties setFont( m_textEdit->font() ); setBackgroundColor( QColor( "#ffffd2" ) ); setTextColor( QColor( Qt::black ) ); //setTextColor( QColor( "#aaaaff" ) ); setDigitNumbers( 4 ); } void LineNumbers::mouseMoveEvent ( QMouseEvent * event ) { m_cursor = m_textEdit->cursorForPosition( event->pos() ); if( m_cursor.isNull() ) { setToolTip(""); return; } BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); QString tooltip; if( blockUserData && !blockUserData->errorString.isEmpty() ) { tooltip = blockUserData->errorString.left(blockUserData->errorString.length()-1); } else if( blockUserData && !blockUserData->warningString.isEmpty() ) { tooltip = blockUserData->warningString.left(blockUserData->warningString.length()-1); } else tooltip = ""; setToolTip( tooltip ); QWidget::mouseMoveEvent( event ); } // void LineNumbers::mousePressEvent ( QMouseEvent * event ) { m_cursor = m_textEdit->cursorForPosition( event->pos() ); if( m_cursor.isNull() ) return; m_currentLine = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid() && block != m_cursor.block(); block = block.next(), m_currentLine++ ) ; if( event->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); connect(menu->addAction(QIcon(":/divers/images/bookmark.png"), tr("Toogle Bookmark")), SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(menu->addAction(QIcon(":/divers/images/breakpoint.png"), tr("Toogle Breakpoint")), SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); if( blockUserData && blockUserData->breakpoint ) { menu->addSeparator(); connect(menu->addAction(QIcon(":/divers/images/breakpoint2.png"), tr("Breakpoint Condition...")), SIGNAL(triggered()), this, SLOT(slotBreakpointCondition()) ); } // menu->exec(event->globalPos()); delete menu; } else if ( event->button() == Qt::MidButton ) slotToggleBreakpoint(); else slotToggleBookmark(); } // void LineNumbers::slotToggleBreakpoint() { m_editor->toggleBreakpoint( m_currentLine, QString(), true ); repaint(); } // void LineNumbers::slotToggleBookmark() { m_editor->toggleBookmark( m_currentLine ); repaint(); } // void LineNumbers::setExecutedLine(int ligne) { m_executedLine = ligne; repaint(); } // void LineNumbers::slotResetExecutedLine() { if( m_executedLine ) { m_executedLine = 0; update(); } else m_executedLine = 0; } void LineNumbers::slotBreakpointCondition() { BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); if( m_cursor.isNull() ) return; if( blockUserData && blockUserData->breakpoint ) { QDialog *condition = new QDialog; Ui::BreakpointCondition ui; ui.setupUi(condition); ui.condition->setText( blockUserData->breakpointCondition ); ui.checkboxCondition->setChecked( !blockUserData->breakpointCondition.isEmpty() ); if( blockUserData->isTrue ) ui.isTrue->setChecked( true ); else ui.hasChanged->setChecked( true ); if( condition->exec() == QDialog::Accepted ) { blockUserData->breakpointCondition = ui.condition->text(); blockUserData->isTrue = ui.isTrue->isChecked(); m_cursor.block().setUserData( blockUserData ); m_editor->toggleBreakpoint( m_currentLine, blockUserData->breakpointCondition, blockUserData->isTrue); // Disable breakpoint m_editor->toggleBreakpoint( m_currentLine, blockUserData->breakpointCondition, blockUserData->isTrue ); // Enable breakpoint repaint(); } delete condition; } } qdevelop-v0.28/src/projectpropertieimpl.cpp0000644000175000017500000011240211362261066020204 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "projectpropertieimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include #include #include #include // ProjectPropertieImpl::ProjectPropertieImpl(ProjectManager * parent, QTreeWidget *tree, QTreeWidgetItem *itProject) : QDialog(0), m_projectManager(parent), m_itProject(itProject), m_treeFiles(tree) { setupUi(this); m_copyItProject = 0; m_copyTreeFiles = new QTreeWidget(this); m_copyTreeFiles->setColumnCount(1); m_copyTreeFiles->setHeaderLabels(QStringList("")); m_copyTreeFiles->setHidden( true ); m_projectName = itProject->text(0); srcDirectory->setText( m_projectManager->srcDirectory( itProject ) ); uiDirectory->setText( m_projectManager->uiDirectory( itProject ) ); new QTreeWidgetItem(m_copyTreeFiles); copyTreeWidget(m_treeFiles->topLevelItem(0), m_copyTreeFiles->topLevelItem(0)); while ( m_projectManager->toKey( m_copyItProject->data(0, Qt::UserRole) ) != "PROJECT" ) m_copyItProject = m_copyItProject->parent(); setWindowTitle( tr("Properties of %1").arg(m_projectName) ); populateComboScope(); resize(10,10); } // void ProjectPropertieImpl::clearFields() { QList enfants; enfants = groupeDebug->children(); QListIterator iterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeWarn->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeBibliotheques->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeAvancees->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } supplement->clear(); } // void ProjectPropertieImpl::connections() { connect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotSubdirs(bool)) ); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(comboScope, SIGNAL(activated(int)), this, SLOT(slotComboScope(int)) ); connect(variablesList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); connect(valuesList, SIGNAL(doubleClicked ( const QModelIndex &)), this, SLOT(slotModifyValue()) ); // connect(addVariable, SIGNAL(clicked()), this, SLOT(slotAddVariable()) ); connect(deleteVariable, SIGNAL(clicked()), this, SLOT(slotDeleteVariable()) ); connect(addValue, SIGNAL(clicked()), this, SLOT(slotAddValue()) ); connect(deleteValue, SIGNAL(clicked()), this, SLOT(slotDeleteValue()) ); connect(modifyValue, SIGNAL(clicked()), this, SLOT(slotModifyValue()) ); // connect(debug, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(debug_and_release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(build_all, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(warn_on, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(warn_off, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(app_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(assistant, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(console, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(designer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(dll, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(exceptions, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(lib_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(link_pkgconfig, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(no_lflags_merge, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(opengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(plugin, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(ppc, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qaxcontainer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qaxserver, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qt, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qtestlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(resources, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(rtti, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(staticlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(stl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(Thread, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(uic3, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(uitools, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(windows, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(x11, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(x86, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(core, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(network, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(sql, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(xml, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(gui, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(libopengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(svg, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qt3support, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(app, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(lib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(webkit, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(phonon, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(xmlpatterns, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(script, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); // connect(srcDirectoryButton, SIGNAL(clicked()), this, SLOT(slotSrcDirectory()) ); connect(uiDirectoryButton, SIGNAL(clicked()), this, SLOT(slotUiDirectory()) ); } // void ProjectPropertieImpl::unconnections() { disconnect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotSubdirs(bool)) ); disconnect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); disconnect(comboScope, SIGNAL(activated(int)), this, SLOT(slotComboScope(int)) ); disconnect(variablesList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); // disconnect(addVariable, SIGNAL(clicked()), this, SLOT(slotAddVariable()) ); disconnect(deleteVariable, SIGNAL(clicked()), this, SLOT(slotDeleteVariable()) ); disconnect(addValue, SIGNAL(clicked()), this, SLOT(slotAddValue()) ); disconnect(deleteValue, SIGNAL(clicked()), this, SLOT(slotDeleteValue()) ); disconnect(modifyValue, SIGNAL(clicked()), this, SLOT(slotModifyValue()) ); // disconnect(debug, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(debug_and_release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(build_all, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(warn_on, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(warn_off, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(app_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(assistant, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(console, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(designer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(dll, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(exceptions, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(lib_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(link_pkgconfig, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(no_lflags_merge, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(opengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(plugin, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(ppc, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qaxcontainer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qaxserver, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qt, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qtestlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(resources, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(rtti, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(staticlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(stl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(Thread, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(uic3, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(uitools, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(windows, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(x11, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(x86, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(core, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(network, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(sql, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(xml, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(gui, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(libopengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(svg, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qt3support, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(app, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(lib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(webkit, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(phonon, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(xmlpatterns, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(script, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); } // void ProjectPropertieImpl::slotCheck(bool activer) { QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *itCombo = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itCombo = (QTreeWidgetItem*)variantToItem(variant); QObject *objet = sender(); QString classe = objet->metaObject()->className(); QString nomVariable; QTreeWidgetItem *it; nomVariable = objet->objectName().simplified(); nomVariable = nomVariable.toLower(); // some (actually, one) of the checkboxes have upper characters to avoid name conflicts if ( QString(":app:lib:subdirs:").contains( ":"+nomVariable+":" ) ) { QTreeWidgetItem *itTemplate = subItTemplate( itCombo ); if ( !itTemplate ) { itTemplate = new QTreeWidgetItem( itCombo ); itTemplate->setText(0, "TEMPLATE"); itTemplate->setData(0, Qt::UserRole, m_projectManager->toItem("TEMPLATE", "=")); m_copyTreeFiles->setItemHidden(itTemplate, true); } it = itTemplate; } else if ( QString(":core:gui:network:libopengl:sql:svg:xml:qt3support:webkit:phonon:xmlpatterns:script:").contains( ":"+nomVariable+":" ) ) { if (nomVariable == "libopengl") nomVariable = "opengl"; // There's both CONFIG += opengl and QT += opengl - the latter widget is called libopengl so the name must be manually replaced here QTreeWidgetItem *itQT = subItQT( itCombo ); if ( !itQT ) { itQT = new QTreeWidgetItem( itCombo ); itQT->setText(0, "QT"); itQT->setData(0, Qt::UserRole, m_projectManager->toItem("QT", "+=")); m_copyTreeFiles->setItemHidden(itQT, true); } it = itQT; } else { QTreeWidgetItem *itConfig = subItConfig( itCombo ); if ( !itConfig ) { itConfig = new QTreeWidgetItem( itCombo ); itConfig->setText(0, "CONFIG"); itConfig->setData(0, Qt::UserRole, m_projectManager->toItem("CONFIG", "+=")); m_copyTreeFiles->setItemHidden(itConfig, true); } it = itConfig; } if ( activer ) { QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( it ); nouvelItem->setText(0, nomVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); } else { for (int i=0; ichildCount(); i++) { if ( it->child( i )->text( 0 ) == nomVariable ) { QTreeWidgetItem *parent = it->child( i )->parent(); delete it->child( i ); while ( !parent->childCount() && m_projectManager->toKey( parent->data(0, Qt::UserRole) ) != "PROJECT" && m_projectManager->toKey( parent->data(0, Qt::UserRole) ) != "SCOPE" ) { it = parent->parent(); delete parent; parent = it; } } } } } // QTreeWidgetItem *ProjectPropertieImpl::subItTemplate(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "TEMPLATE" ) return item; } return 0; } // QTreeWidgetItem *ProjectPropertieImpl::subItQT(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "QT" ) return item; } return 0; } // QTreeWidgetItem *ProjectPropertieImpl::subItConfig(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "CONFIG" ) return item; } return 0; } // void ProjectPropertieImpl::copyTreeWidget(QTreeWidgetItem *source, QTreeWidgetItem *dest) { if ( source == m_itProject ) m_copyItProject = dest; dest->setText(0, source->text(0)); dest->setData(0, Qt::UserRole, source->data(0, Qt::UserRole ) ); dest->setToolTip(0, source->toolTip(0) ); dest->setIcon(0, source->icon(0)); dest->treeWidget()->setItemHidden(dest, source->treeWidget()->isItemHidden(source)); dest->treeWidget()->setItemExpanded(dest, source->treeWidget()->isItemExpanded(source)); for (int i=0; ichildCount(); i++) { copyTreeWidget(source->child(i), new QTreeWidgetItem( dest ) ); } } // void ProjectPropertieImpl::slotAccept() { QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *itCombo = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itCombo = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *itConfig = subItConfig( itCombo ); if ( !itConfig && supplement->text().simplified().split(" ", QString::SkipEmptyParts).count() ) { itConfig = new QTreeWidgetItem( m_copyItProject ); itConfig->setText(0, "CONFIG"); itConfig->setData(0, Qt::UserRole, m_projectManager->toItem("CONFIG", "+=") ); m_copyTreeFiles->setItemHidden(itConfig, true); } foreach(QString nomVariable, supplement->text().simplified().split(" ", QString::SkipEmptyParts)) { QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( itConfig ); nouvelItem->setText(0, nomVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); } m_treeFiles->clear(); new QTreeWidgetItem(m_treeFiles); copyTreeWidget(m_copyTreeFiles->topLevelItem(0), m_treeFiles->topLevelItem(0)); m_treeFiles->setItemExpanded(m_treeFiles->topLevelItem(0), m_copyTreeFiles->isItemExpanded(m_copyTreeFiles->topLevelItem(0))); //m_projectManager->setSrcDirectory(m_projectManager->itemProject(m_projectName), srcDirectory->text() ); //m_projectManager->setUiDirectory(m_projectManager->itemProject(m_projectName), uiDirectory->text() ); accept(); } // void ProjectPropertieImpl::slotCurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * /*previous*/ ) { valuesList->clear(); if ( !current ) return; QVariant variant = current->data( Qt::UserRole ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); for (int nb=0; nb < item->childCount(); nb++) { valuesList->addItem( item->child( nb )->text(0) ); valuesList->item( valuesList->count()-1 )->setData(Qt::UserRole, addressToVariant(item->child( nb ) ) ); } } // void ProjectPropertieImpl::slotAddVariable() { QString nouvelleVariable; //QString text = QInputDialog::getText(this, "QDevelop", //tr("New variable:"), QLineEdit::Normal, //"", &ok); QString text; QDialog *newVariable = new QDialog; Ui::NewVariable ui; ui.setupUi(newVariable); newVariable->setWindowTitle("QDevelop"); QComboBox *c = ui.comboVariables; makeComboVariables( c ); bool ok = newVariable->exec(); if (ok) { if ( !ui.groupUserVariable->isChecked() ) nouvelleVariable = ui.comboVariables->itemData(ui.comboVariables->currentIndex(), Qt::UserRole).toString(); else if( (QStringList() << "TEMPLATE" << "CONFIG" << "QT").contains(ui.userVariable->text()) ) { QMessageBox::warning(0, "QDevelop", tr("A new variable can not be \"QT\", \"CONFIG\" or \"TEMPLATE\""), tr("Cancel") ); delete newVariable; return; } else if ( ui.groupUserVariable->isChecked() && !ui.userVariable->text().isEmpty() ) nouvelleVariable = ui.userVariable->text(); else { delete newVariable; return; } } else { delete newVariable; return; } QComboBox *comboOperator = ui.comboOperator; QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( item ); m_copyTreeFiles->setItemHidden(nouvelItem, true); nouvelItem->setText(0, nouvelleVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem(nouvelleVariable, comboOperator->currentText())); slotComboScope( comboScope->currentIndex() ); } // void ProjectPropertieImpl::slotDeleteVariable() { QListWidgetItem *itemCourant; if ( !(itemCourant = variablesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); delete itemTree; slotComboScope( comboScope->currentIndex() ); } // void ProjectPropertieImpl::slotAddValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = variablesList->currentItem()) ) return; QString nouvelleValeur; bool ok; int corriger = -1; QString text; do { text = QInputDialog::getText(this, "QDevelop", tr("New Value:"), QLineEdit::Normal, text, &ok); if ( text.contains(" ") && !text.contains("\"")) { corriger = QMessageBox::warning(0, "QDevelop", tr("The spaces aren't correctly parsed by qmake") +",\n" +tr("delete spaces or put quotes."), tr("Modify"), tr("Cancel") ); if ( corriger == 1 ) ok = false; } } while ( ok && corriger==0 ); if (ok && !text.isEmpty()) nouvelleValeur = text; else return; QVariant variant = itemCourant->data( Qt::UserRole ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( item ); m_copyTreeFiles->setItemHidden(nouvelItem, true); nouvelItem->setText(0, nouvelleValeur); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotDeleteValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = valuesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); delete itemTree; slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotModifyValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = valuesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); QString nouvelleValeur; //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); bool ok; int corriger = -1; QString text = itemCourant->text(); do { text = QInputDialog::getText(this, "QDevelop", tr("New Value:"), QLineEdit::Normal, text, &ok); if ( text.contains(" ") && !text.contains("\"")) { corriger = QMessageBox::warning(0, "QDevelop", tr("The spaces aren't correctly parsed by qmake") +",\n" +tr("delete spaces or put quotes."), tr("Modify"), tr("Cancel") ); if ( corriger == 1 ) ok = false; } } while ( ok && corriger==0 ); if (ok && !text.isEmpty()) nouvelleValeur = text; else return; itemTree->setText(0, nouvelleValeur); slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotComboScope(int index) { unconnections(); variablesList->clear(); valuesList->clear(); clearFields(); QVariant variant = comboScope->itemData( index ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); if ( m_projectManager->toKey( item->data(0, Qt::UserRole) ) != "PROJECT" ) projectTemplate->setDisabled( true ); else projectTemplate->setDisabled( false ); parse( item ); QList listeScope; for (int nbScope=0; nbScope < item->childCount(); nbScope++) { QTreeWidgetItem *it = item->child( nbScope ); QString cle = m_projectManager->toKey( it->data(0, Qt::UserRole) ); QString donnee = it->text( 0 ); if ( !QString("CONFIG|FORMS|HEADERS|QT|RESOURCES|SOURCES|TRANSLATIONS|TEMPLATE|SCOPE|SUBDIRS|absoluteNameProjectFile|projectDirectory|subProjectName|qmake|srcDirectory|uiDirectory").contains( cle ) ) { variablesList->addItem( cle ); //variablesList->item( variablesList->count()-1 )->setData(Qt::UserRole, QVariant(reinterpret_cast(it) ) ); variablesList->item( variablesList->count()-1 )->setData(Qt::UserRole, addressToVariant(it) ); } } if ( variablesList->count() ) slotCurrentItemChanged( variablesList->item( 0 ), 0); connections(); if ( m_projectManager->toKey( item->data(0, Qt::UserRole) ) != "PROJECT" ) projectTemplate->setDisabled( true ); else projectTemplate->setDisabled( false ); } // void ProjectPropertieImpl::parse(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "TEMPLATE" ) parseTemplate(item); else if ( cle == "QT" ) parseQT(item); else if ( cle == "CONFIG" ) parseConfig(item); //else if( cle == "SCOPE" ) //analyseScope(it); } } // void ProjectPropertieImpl::parseConfig(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemConfig = it->child( i ); QString donnee = itemConfig->text(0); if ( donnee == "debug" ) debug->setChecked(true); else if ( donnee == "release" ) release->setChecked(true); else if ( donnee == "debug_and_release" ) debug_and_release->setChecked(true); else if ( donnee == "build_all" ) build_all->setChecked(true); else if ( donnee == "warn_on" ) warn_on->setChecked(true); else if ( donnee == "warn_off" ) warn_off->setChecked(true); else if ( donnee == "app_bundle" ) app_bundle->setChecked(true); else if ( donnee == "assistant" ) assistant->setChecked(true); else if ( donnee == "console" ) console->setChecked(true); else if ( donnee == "designer" ) designer->setChecked(true); else if ( donnee == "dll" ) dll->setChecked(true); else if ( donnee == "exceptions" ) exceptions->setChecked(true); else if ( donnee == "lib_bundle" ) lib_bundle->setChecked(true); else if ( donnee == "link_pkgconfig" ) link_pkgconfig->setChecked(true); else if ( donnee == "no_lflags_merge" ) no_lflags_merge->setChecked(true); else if ( donnee == "opengl" ) opengl->setChecked(true); else if ( donnee == "plugin" ) plugin->setChecked(true); else if ( donnee == "ppc" ) ppc->setChecked(true); else if ( donnee == "qaxcontainer" ) qaxcontainer->setChecked(true); else if ( donnee == "qaxserver" )qaxserver->setChecked(true); else if ( donnee == "qt" ) qt->setChecked(true); else if ( donnee == "qtestlib" ) qtestlib->setChecked(true); else if ( donnee == "resources" )resources->setChecked(true); else if ( donnee == "rtti" ) rtti->setChecked(true); else if ( donnee == "staticlib" ) staticlib->setChecked(true); else if ( donnee == "stl" ) stl->setChecked(true); else if ( donnee == "thread" ) Thread->setChecked(true); else if ( donnee == "uic3" ) uic3->setChecked(true); else if ( donnee == "uitools" ) uitools->setChecked(true); else if ( donnee == "windows" ) windows->setChecked(true); else if ( donnee == "x11" ) x11->setChecked(true); else if ( donnee == "x86" ) x86->setChecked(true); else { supplement->setText( supplement->text() + " "+ donnee ); delete itemConfig; } } supplement->setText( supplement->text().simplified() ); } // void ProjectPropertieImpl::parseQT(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemConfig = it->child( i ); QString donnee = itemConfig->text(0); if ( donnee == "core" ) core->setChecked(true); if ( donnee == "network" ) network->setChecked(true); if ( donnee == "sql" ) sql->setChecked(true); if ( donnee == "xml" ) xml->setChecked(true); if ( donnee == "gui" ) gui->setChecked(true); if ( donnee == "opengl" ) libopengl->setChecked(true); if ( donnee == "svg" ) svg->setChecked(true); if ( donnee == "qt3support" ) qt3support->setChecked(true); if ( donnee == "webkit" ) webkit->setChecked(true); if ( donnee == "phonon" ) phonon->setChecked(true); if ( donnee == "xmlpatterns" ) xmlpatterns->setChecked(true); if ( donnee == "script" ) script->setChecked(true); } } // void ProjectPropertieImpl::parseTemplate(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemTemplate = it->child( i ); QString donnee = itemTemplate->text(0); if ( donnee == "app" ) { app->setChecked( true ); subdirs->setDisabled( true ); } else if ( donnee == "lib" ) { lib->setChecked( true ); subdirs->setDisabled( true ); } else if ( donnee == "subdirs" ) { subdirs->setChecked( true ); lib->setDisabled (true ); app->setDisabled (true ); slotSubdirs( true ); } } } // void ProjectPropertieImpl::populateComboScope() { //comboScope->addItem(m_copyItProject->text(0) , QVariant(reinterpret_cast(m_copyItProject))); comboScope->addItem(m_copyItProject->text(0) , addressToVariant(m_copyItProject)); QString projectName = m_projectManager->projectFilename( m_copyItProject ); QList listeScope; m_projectManager->childsList(m_copyItProject, "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString scopeName; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbEspace = 0; while ( tmp ) { QString cleTmp = m_projectManager->toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + scopeName.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbEspace++; } if ( m_projectManager->projectFilename( listeScope.at(nbScope) ) == projectName ) comboScope->addItem( scopeName, addressToVariant(listeScope.at(nbScope))); //comboScope->addItem( scopeName, QVariant(reinterpret_cast(listeScope.at(nbScope)))); } if ( comboScope->count() == 1 ) comboScope->setDisabled( true ); if ( comboScope->count() ) { comboScope->setCurrentIndex( 0 ); slotComboScope( 0 ); } } // void ProjectPropertieImpl::slotSubdirs(bool coche) { tabConfig->setEnabled(!coche); } // // void ProjectPropertieImpl::makeComboVariables( QComboBox *combo ) { combo->addItem("DEFINES: qmake adds the values of this variable as compiler C preprocessor macros (-D option).", QVariant( QString("DEFINES") ) ); combo->addItem("DEF_FILE: This is only used on Windows when using the app template.", QVariant( QString("DEF_FILE") ) ); combo->addItem("DEPENDPATH: This variable contains the list of all directories to look in to resolve dependencies. This will be used when crawling through included files. ", QVariant( QString("DEPENDPATH") ) ); combo->addItem("DESTDIR: Specifies where to put the target file.", QVariant( QString("DESTDIR") ) ); combo->addItem("DLLDESTDIR: Specifies where to copy the target dll. ", QVariant( QString("DLLDESTDIR") ) ); combo->addItem("DISTFILES: This variable contains a list of files to be included in the dist target.", QVariant( QString("DISTFILES") ) ); combo->addItem("INCLUDEPATH: This variable specifies the #include directories which should be searched when compiling the project.", QVariant( QString("INCLUDEPATH") ) ); combo->addItem("INSTALLS: This variable contains a list of resources that will be installed when make install is executed.", QVariant( QString("INSTALLS") ) ); combo->addItem("LEXSOURCES: This variable contains a list of lex source files.", QVariant( QString("LEXSOURCES") ) ); combo->addItem("LIBS: This variable contains a list of libraries to be linked into the project.", QVariant( QString("LIBS") ) ); combo->addItem("MAKEFILE: This variable specifies the name of the Makefile which qmake should use when outputting the dependency information for building a project.", QVariant( QString("MAKEFILE") ) ); combo->addItem("MOC_DIR: This variable specifies the directory where all intermediate moc files should be placed.", QVariant( QString("MOC_DIR") ) ); combo->addItem("OBJECTS_DIR: This variable specifies the directory where all intermediate objects should be placed.", QVariant( QString("OBJECTS_DIR") ) ); combo->addItem("QTPLUGIN: This variable contains a list of names of static plugins that are to be compiled with an application so that they are available as built-in resources. ", QVariant( QString("QTPLUGIN") ) ); combo->addItem("RCC_DIR: This variable specifies the directory where all intermediate resource files should be placed.", QVariant( QString("RCC_DIR") ) ); combo->addItem("TARGET: This specifies the name of the target file.", QVariant( QString("TARGET") ) ); combo->addItem("UI_DIR: This variable specifies the directory where all intermediate files from uic should be placed.", QVariant( QString("UI_DIR") ) ); combo->addItem("UI_HEADERS_DIR: This variable specifies the directory where all declaration files (as generated by uic) should be placed.", QVariant( QString("UI_HEADERS_DIR") ) ); combo->addItem("UI_SOURCES_DIR: This variable specifies the directory where all implementation files (as generated by uic) should be placed.", QVariant( QString("UI_SOURCES_DIR") ) ); combo->addItem("VERSION: This variable contains the version number of the library if the lib TEMPLATE is specified.", QVariant( QString("VERSION") ) ); combo->addItem("VER_MAJ: This variable contains the major version number of the library, if the lib template is specified. ", QVariant( QString("VER_MAJ") ) ); combo->addItem("VER_MIN: This variable contains the minor version number of the library, if the lib template is specified. ", QVariant( QString("VER_MIN") ) ); combo->addItem("VER_PAT: This variable tells qmake where to search for files it cannot open.", QVariant( QString("VER_PAT") ) ); } // void ProjectPropertieImpl::slotSrcDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the sources location"), srcDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { return; } srcDirectory->setText( s ); } // void ProjectPropertieImpl::slotUiDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the dialogs location"), uiDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { return; } uiDirectory->setText( s ); } // qdevelop-v0.28/src/addnewclassvariableimpl.cpp0000644000175000017500000002032211362261066020601 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassvariableimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include // AddNewClassVariableImpl::AddNewClassVariableImpl( MainImpl * parent, TreeClasses *treeClasses, QTreeWidgetItem *treeWidget, QString declaration, QString implementation, QString classname) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_treeWidget(treeWidget), m_declaration(declaration), m_implementation(implementation), m_classname(classname) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private"); type->addItems(QStringList() << "bool" << "char" << "short" << "long" << "int" << "signed" << "unsigned " << "float" << "double" << "QString" << "void" ); } // void AddNewClassVariableImpl::on_okButton_clicked() { if ( get->isChecked() && getName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The get method name is empty", tr("Cancel") ); return; } if ( set->isChecked() && setName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The set method name is empty", tr("Cancel") ); return; } QString l_variableName = variableName->text(); QString l_type = type->currentText(); QString l_scope = scope->currentText(); for (int i=0; ichildCount(); i++) { ParsedItem parsedItem = m_treeWidget->child( i )->data(0, Qt::UserRole).value(); if ( parsedItem.name == l_variableName ) { QMessageBox::warning(this, "QDevelop", tr("%1 already exists in class %2.").arg(l_variableName, m_classname), tr("Cancel") ); return; } } // Add in declaration file or editor // The file is perhaps already opened. Find filename in tabs. QString insertedText = "\t" + l_type + " " + l_variableName + ";"; insertInDeclaration(l_scope, insertedText); //insertedText += "\t" + l_type + " " + l_variableName + ";"; // Add get/set methods if ( get->isChecked() ) { if ( getInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\t" + l_type + " " + getName->text() + "() { return " + l_variableName + "; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\t" + l_type + " " + getName->text() + "();"; insertInDeclaration("public", insertedText); insertedText = l_type + " " + m_classname+"::" + getName->text() + "()\n{\n\treturn " + l_variableName + ";\n}\n"; insertInImplementation(insertedText); } } if ( set->isChecked() ) { if ( setInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\tvoid " + setName->text() + "("+l_type+" value) { " + l_variableName + " = value; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\tvoid " + setName->text() + "("+l_type+" value);"; insertInDeclaration("public", insertedText); insertedText = "void " + m_classname+"::"+setName->text() + "("+l_type+" value)\n{\n\t" + l_variableName + " = value;\n}\n"; insertInImplementation(insertedText); } } accept(); } // void AddNewClassVariableImpl::insertInDeclaration(QString scope, QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, afterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(afterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } // void AddNewClassVariableImpl::insertInImplementation(QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, get content from file QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } void AddNewClassVariableImpl::on_variableName_textChanged(QString ) { setName->setText( "set"+variableName->text().toUpper().left(1)+variableName->text().mid(1) ); getName->setText( "get"+variableName->text().toUpper().left(1)+variableName->text().mid(1) ); } qdevelop-v0.28/src/tabwidget.h0000644000175000017500000000334111362261066015342 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TABWIDGET_H #define TABWIDGET_H #include // class MainImpl; class QToolButton; // class TabWidget : public QTabWidget { Q_OBJECT public: TabWidget(MainImpl *parent); virtual ~TabWidget(); void setCloseButtonInTabs(bool b); protected: //void mousePressEvent( QMouseEvent * event ); bool eventFilter(QObject *obj, QEvent *event); void tabInserted ( int index ); private: bool swapTabs(int index1, int index2); int m_clickedItem; MainImpl *m_mainImpl; QToolButton *cross; QPoint mousePos; bool m_closeButtonInTabs; private slots: void slotCloseTab(); void slotCloseOtherTab(); void slotCloseAllTab(); }; #endif // kate: space-indent on; tab-indent off; tab-width 4; indent-width 4; mixedindent off; indent-mode cstyle; // kate: end-of-line: unix qdevelop-v0.28/src/optionsimpl.cpp0000644000175000017500000003411511362261066016303 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "optionsimpl.h" #include "cpphighlighter.h" #include #include #include #include #include #include #include #include // OptionsImpl::OptionsImpl(QWidget * parent, QFont f, bool num, bool marge, bool ind, bool color, int tab, bool enr, bool res, QTextCharFormat pre, QTextCharFormat qt, QTextCharFormat commSimples, QTextCharFormat commMulti, QTextCharFormat guil, QTextCharFormat meth, QTextCharFormat cles, bool /*autoMask*/, int end, bool spaces, bool complete, QColor back, bool prompt, bool hcl, QColor lc, bool bk, bool comm, bool tc, int in, QString directory, bool m, QColor mc, bool close, QString pd, QString mo, int mi, QString ic, bool editorToolbars, bool whiteSpaces, int rightMargin, QString docDirectory, QColor textCol, bool ac, bool ww, int findReplace, bool sc ) : QDialog(parent) { setupUi(this); QFontDatabase db; comboFont->addItems( db.families() ); comboFont->setCurrentIndex( comboFont->findText( f.family() ) ); fontSize->setValue( f.pointSize() ); numbers->setChecked( num ); selectionBorder->setChecked( marge ); indent->setChecked( ind ); compileAuto->setChecked( ac ); highlight->setChecked( color ); tabStopWidth->setValue( tab ); saveAll->setChecked( enr ); restore->setChecked( res ); endLine->setCurrentIndex( end ); tabSpaces->setChecked( spaces ); completion->setChecked( complete ); promptBeforeQuit->setChecked( prompt ); brackets->setChecked( bk ); // Divius: comments autoclose comments->setChecked( comm ); // showTreeClasses->setChecked( tc ); interval->setValue( in ); interval->setEnabled( tc ); match->setChecked( m ); groupHighlightCurrentLine->setChecked( hcl ); closeButton->setChecked( close ); projectsDirectory->setText( directory ); pluginsDirectory->setText( pd ); includeDirectory->setText( ic ); documentationDirectory->setText( docDirectory ); makeOptions->setText( mo ); showEditorToolbars->setChecked( editorToolbars ); displayWhiteSpaces->setChecked( whiteSpaces ); rightMarginLine->setChecked( rightMargin > 0 ); rightMarginPos->setValue( rightMargin > 0 ? rightMargin : 80 ); wordwrap->setChecked( ww ); hideFindReplace->setChecked( findReplace > 0 ); findReplaceDelay->setValue( findReplace > 0 ? findReplace : 10 ); smartClick->setChecked( sc ); // QPixmap pix(25, 25); pix.fill( pre.foreground().color() ); preprocessor->setIcon( pix ); pix.fill( qt.foreground().color() ); qtWords->setIcon( pix ); pix.fill( commSimples.foreground().color() ); singleComment->setIcon( pix ); pix.fill( commMulti.foreground().color() ); multilinesComment->setIcon( pix ); pix.fill( guil.foreground().color() ); quotation->setIcon( pix ); pix.fill( meth.foreground().color() ); methods->setIcon( pix ); pix.fill( cles.foreground().color() ); keywords->setIcon( pix ); pix.fill( back ); background->setIcon( pix ); m_backgroundColor = back; pix.fill( textCol ); text->setIcon( pix ); m_textColor = textCol; pix.fill( mc ); matching->setIcon( pix ); m_matchingColor = mc; pix.fill( lc ); lineColor->setIcon( pix ); m_colorCurrentLine = lc; // cppHighLighter = new CppHighlighter( 0 ); cppHighLighter->setPreprocessorFormat( pre ); cppHighLighter->setClassFormat( qt ); cppHighLighter->setSingleLineCommentFormat( commSimples ); cppHighLighter->setMultiLineCommentFormat( commMulti ); cppHighLighter->setQuotationFormat( guil ); cppHighLighter->setFunctionFormat( meth ); cppHighLighter->setKeywordFormat( cles ); cppHighLighter->setDocument( textEdit->document() ); QPalette p = textEdit->palette(); p.setColor(QPalette::Base, m_backgroundColor); p.setColor( QPalette::Text, m_textColor); textEdit->setPalette(p); // connect(preprocessor, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(qtWords, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(singleComment, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(multilinesComment, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(quotation, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(methods, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(keywords, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(background, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(text, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(lineColor, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(matching, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect((QObject *)buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(slotDefault())); // I don't know why the cast to QObject * is necessary, but gcc doesn't compile without it connect(chooseProjectsDirectory, SIGNAL(clicked()), this, SLOT(slotChooseProjectsDirectory())); connect(choosePluginsDirectory, SIGNAL(clicked()), this, SLOT(slotChoosePluginsDirectory())); connect(chooseIncludeDirectory, SIGNAL(clicked()), this, SLOT(slotChooseIncludeDirectory())); connect(chooseDocumentationDirectory, SIGNAL(clicked()), this, SLOT(slotChooseDocumentationDirectory())); textEdit->setPlainText( textEdit->toPlainText() ); findCodecs(); setCodecList(codecs, mi); } // QFont OptionsImpl::font() { return QFont(comboFont->currentText(), fontSize->value() ); } // QColor OptionsImpl::backgroundColor() { return m_backgroundColor; } // QColor OptionsImpl::textColor() { return m_textColor; } // QColor OptionsImpl::currentLineColor() { return m_colorCurrentLine; } // QColor OptionsImpl::matchingColor() { return m_matchingColor; } // void OptionsImpl::slotChangeColor() { QTextCharFormat format; QToolButton *button = (QToolButton*)sender(); QColor color; if( button == preprocessor ) color = cppHighLighter->preprocessorFormat().foreground().color(); else if( button == qtWords ) color = cppHighLighter->classFormat().foreground().color(); else if( button == singleComment ) color = cppHighLighter->singleLineCommentFormat().foreground().color(); else if( button == multilinesComment ) color = cppHighLighter->multiLineCommentFormat().foreground().color(); else if( button == quotation ) color = cppHighLighter->quotationFormat().foreground().color(); else if( button == methods ) color = cppHighLighter->functionFormat().foreground().color(); else if( button == keywords ) color = cppHighLighter->keywordFormat().foreground().color(); else if( button == background ) color = m_backgroundColor; else if( button == text ) color = m_textColor; else if( button == lineColor ) color = m_colorCurrentLine; else if( button == matching ) color = m_matchingColor; color = QColorDialog::getColor(color); if( color.isValid() ) { QPixmap pix(25, 25); pix.fill( color ); button->setIcon( pix ); format.setForeground(color); if( button == preprocessor ) cppHighLighter->setPreprocessorFormat( format ); else if( button == qtWords ) cppHighLighter->setClassFormat( format ); else if( button == singleComment ) cppHighLighter->setSingleLineCommentFormat( format ); else if( button == multilinesComment ) cppHighLighter->setMultiLineCommentFormat( format ); else if( button == quotation ) cppHighLighter->setQuotationFormat( format ); else if( button == methods ) cppHighLighter->setFunctionFormat( format ); else if( button == keywords ) cppHighLighter->setKeywordFormat( format ); else if( button == background ) m_backgroundColor = color; else if( button == text ) m_textColor = color; else if( button == lineColor ) m_colorCurrentLine = color; else if( button == matching ) m_matchingColor = color; cppHighLighter->setDocument( textEdit->document() ); QPalette p = textEdit->palette(); p.setColor(QPalette::Base, m_backgroundColor); p.setColor( QPalette::Text, m_textColor); textEdit->setPalette(p); } } // void OptionsImpl::slotDefault() { QPixmap pix(25, 25); QTextCharFormat format; // pix.fill( Qt::blue ); format.setForeground( Qt::blue ); preprocessor->setIcon( pix ); cppHighLighter->setPreprocessorFormat( format ); // qtWords->setIcon( pix ); cppHighLighter->setClassFormat( format ); // pix.fill( Qt::red ); format.setForeground( Qt::red ); singleComment->setIcon( pix ); cppHighLighter->setSingleLineCommentFormat( format ); // multilinesComment->setIcon( pix ); cppHighLighter->setMultiLineCommentFormat( format ); // pix.fill( Qt::darkGreen ); format.setForeground( Qt::darkGreen ); quotation->setIcon( pix ); cppHighLighter->setQuotationFormat( format ); // pix.fill( Qt::black ); format.setForeground( Qt::black ); methods->setIcon( pix ); cppHighLighter->setFunctionFormat( format ); // pix.fill( Qt::blue ); format.setForeground( Qt::blue ); keywords->setIcon( pix ); cppHighLighter->setKeywordFormat( format ); // cppHighLighter->setDocument( textEdit->document() ); // pix.fill( Qt::white ); m_backgroundColor = Qt::white; background->setIcon( pix ); // pix.fill( Qt::black ); m_textColor = Qt::black; text->setIcon( pix ); // pix.fill( Qt::red ); m_matchingColor = Qt::red; matching->setIcon( pix ); // pix.fill( QColor(215,252,255) ); m_colorCurrentLine = QColor(215,252,255); lineColor->setIcon( pix ); // saveAll->setChecked( true ); restore->setChecked( true ); promptBeforeQuit->setChecked( false ); groupHighlightCurrentLine->setChecked( true ); //lineColor->setEnabled( true ); compileAuto->setChecked( false ); numbers->setChecked( true ); selectionBorder->setChecked( true ); completion->setChecked( true ); indent->setChecked( true ); brackets->setChecked( true ); // Divius: comments autoclose comments->setChecked( true ); // highlight->setChecked( true ); match->setChecked( true ); projectsDirectory->setText( QDir::homePath() ); pluginsDirectory->setText( "" ); includeDirectory->setText( QLibraryInfo::location( QLibraryInfo::HeadersPath ) ); documentationDirectory->setText( QLibraryInfo::location( QLibraryInfo::DocumentationPath ) ); makeOptions->setText( "" ); tabStopWidth->setValue( 4 ); tabSpaces->setChecked( false ); wordwrap->setChecked( false ); hideFindReplace->setChecked( true ); findReplaceDelay->setValue( 10 ); smartClick->setChecked( true ); #ifdef WIN32 comboFont->setCurrentIndex( comboFont->findText( "Courier New" ) ); #else comboFont->setCurrentIndex( comboFont->findText( "Monospace" ) ); #endif fontSize->setValue( 10 ); closeButton->setChecked( false ); setCodecList( codecs, 106 ); // UTF-8 by default endLine->setCurrentIndex( 0 ); interval->setValue( 5 ); showTreeClasses->setChecked( true ); showEditorToolbars->setChecked( true ); displayWhiteSpaces->setChecked( true ); rightMarginLine->setChecked( true ); rightMarginPos->setValue( 80 ); } // void OptionsImpl::slotChooseProjectsDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } projectsDirectory->setText( s ); } // void OptionsImpl::slotChoosePluginsDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), pluginsDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } pluginsDirectory->setText( s ); } // void OptionsImpl::slotChooseIncludeDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), includeDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } includeDirectory->setText( s ); } // void OptionsImpl::slotChooseDocumentationDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), documentationDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } documentationDirectory->setText( s ); } // void OptionsImpl::findCodecs() { QMap codecMap; QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*"); foreach (int mib, QTextCodec::availableMibs()) { QTextCodec *codec = QTextCodec::codecForMib(mib); QString sortKey = codec->name().toUpper(); int rank; if (sortKey.startsWith("UTF-8")) { rank = 1; } else if (sortKey.startsWith("UTF-16")) { rank = 2; } else if (iso8859RegExp.exactMatch(sortKey)) { if (iso8859RegExp.cap(1).size() == 1) rank = 3; else rank = 4; } else { rank = 5; } sortKey.prepend(QChar('0' + rank)); codecMap.insert(sortKey, codec); } codecs = codecMap.values(); } void OptionsImpl::setCodecList(const QList &list, int m) { encodingComboBox->clear(); foreach (QTextCodec *codec, list) { encodingComboBox->addItem(codec->name(), codec->mibEnum()); if( codec->mibEnum() == m ) encodingComboBox->setCurrentIndex( encodingComboBox->count()-1 ); } } // int OptionsImpl::mib() { return encodingComboBox->itemData( encodingComboBox->currentIndex() ).toInt(); } qdevelop-v0.28/src/treeclasses.cpp0000644000175000017500000010370211362261066016242 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "treeclasses.h" #include "projectmanager.h" #include "mainimpl.h" #include "misc.h" #include "ui_addnewclassvariable.h" #include "addnewclassmethodimpl.h" #include "addnewclassvariableimpl.h" #include "addsetgetimpl.h" #include #include #include #include #include #include #include #include #include #include #include // TreeClasses::TreeClasses(QWidget * parent) : QTreeWidget(parent) { header()->hide(); m_treeClassesItems = new QList(); } // TreeClasses::~TreeClasses() { delete m_treeClassesItems; } // void TreeClasses::clear() { QTreeWidget::clear(); } // void TreeClasses::updateClasses(QString filename, QString buffer, QStringList parents, QString ext) { if ( !m_ctagsPresent || !QFile::exists(m_ctagsName) ) return; while ( tempProcessMap.count() > 10 ) qApp->processEvents(); QProcess *process = new QProcess(); connect(process, SIGNAL(finished(int , QProcess::ExitStatus)), this, SLOT(slotParseCtags()) ); tempProcessMap[process].ext = ext; tempProcessMap[process].numTempFile = 0; tempProcessMap[process].filename = filename; QString f; do { tempProcessMap[process].numTempFile++; f = QDir::tempPath()+"/qdevelop_"+QString::number(tempProcessMap[process].numTempFile)+ext; } while ( QFile::exists( f ) ); QFile tempFileRead( QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+ext ); if (!tempFileRead.open(QIODevice::WriteOnly | QIODevice::Text)) return; tempFileRead.write( buffer.toLocal8Bit() ); tempProcessMap[process].parents = parents; tempFileRead.close(); // process->start(m_ctagsName, QStringList()<<"-f " + QDir::tempPath()+"/qdevelop_ctags"+ext+"."+QString::number(tempProcessMap[process].numTempFile) << "--fields=+z+k+a+S+l+n" << "--c++-kinds=+p"<< QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+tempProcessMap[process].ext); // } // void TreeClasses::slotParseCtags() { QProcess *process = ((QProcess*)sender()); process->waitForFinished( -1 ); QString read; QFile file( QDir::tempPath()+"/qdevelop_ctags"+tempProcessMap[process].ext+"."+QString::number(tempProcessMap[process].numTempFile) ); if ( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) return; read = file.readAll(); file.close(); // QString filenameRead = QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+tempProcessMap[process].ext; if ( !QFile( filenameRead ).remove() ) qDebug()<<"Unable to remove"<deleteLater(); QDir dir(filename); dir.makeAbsolute(); QString absolutePath = dir.path(); QString pathHash = getPathHash(absolutePath); if ( read.isEmpty() ) return; if ( topLevelItem(0) ) { setSortingSymbols(topLevelItem(0), true, filename, ext, parents); } foreach(QString s, read.split("\n", QString::SkipEmptyParts) ) { if ( !s.isEmpty() && s.simplified().at(0) == '!' ) continue; //if( s.contains("typeref:") ) //continue; s += '\t'; s.replace("__anon", pathHash); ParsedItem parsedItem; parsedItem.parents = parents; parsedItem.markedForDelete = false; parsedItem.name = s.section("\t", 0, 0).simplified(); //parsedItem.ex_cmd = s.section("/^", -1, -1).section("$/", 0, 0).simplified(); QString ex_cmd = s.section("/^", -1, -1).section("\"", 0, 0).simplified(); parsedItem.ex_cmd = ex_cmd; QString numline = s.section("line:", -1, -1).section("\t", 0, 0).simplified(); if ( ext == QString(".cpp") ) parsedItem.implementation = filename + "|" + numline; else parsedItem.declaration = filename + "|" + numline; parsedItem.language = s.section("language:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("class:") ) parsedItem.classname = s.section("class:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("struct:") ) parsedItem.structname = s.section("struct:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("namespace:") ) parsedItem.structname = s.section("namespace:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("enum:") ) parsedItem.enumname = s.section("enum:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("access:") ) parsedItem.access = s.section("access:", -1, -1).section("\t", 0, 0).simplified(); parsedItem.signature = s.section("signature:", -1, -1).section("\t", 0, 0).simplified(); parsedItem.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); //m_parsedItemsList.append( parsedItem ); parse(parsedItem); } //m_parsedItemsList.clear(); if ( topLevelItem(0) ) { m_listDeletion.clear(); deleteMarked( topLevelItem(0) ); for (int i=0; iclear(); setSortingSymbols(topLevelItem(0), false, QString(), QString(), QStringList()); } } // void TreeClasses::parse(ParsedItem parsedItem) { // Begin parsing if ( parsedItem.name.simplified().isEmpty() ) return; QTreeWidgetItem *itemParent = topLevelItem(0); int level = 0; foreach(QString s, parsedItem.parents) { itemParent = findAndCreate(itemParent, "", s, "parent:"+QString::number(level++)+":"+s, false, false, ParsedItem()); } if ( parsedItem.classname.count() || parsedItem.structname.count() || parsedItem.enumname.count() ) { QString text; QString pixname; if ( parsedItem.classname.count() ) { text = parsedItem.classname; pixname = "class"; } else if ( parsedItem.structname.count() ) { text = parsedItem.structname; pixname = "struct"; } else if ( parsedItem.enumname.count() ) { text = parsedItem.enumname; pixname = "enum"; } foreach(QString classname, text.split("::", QString::SkipEmptyParts) ) { //itemParent = findAndCreate(itemParent, QString(), parsedItem.classname, "class:"+classname, true, false, ParsedItem()); itemParent = findAndCreate(itemParent, pixname, classname, "class:"+classname, true, false, ParsedItem()); } } if ( parsedItem.kind == "c" ) // class { findAndCreate(itemParent, "class", parsedItem.name, "class:"+parsedItem.name, true, true, parsedItem); } else if ( parsedItem.kind == "p" ) // function prototype in declaration (header) { QString pixname; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_meth"; findAndCreate(itemParent, pixname, parsedItem.name+parsedItem.signature, "function:"+parsedItem.name+signature(parsedItem.signature), false, true, parsedItem); } else if ( parsedItem.kind == "f" ) // function in implementation (sources) { QString pixname; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_meth"; else if ( parsedItem.classname.isEmpty() ) pixname = "global_meth"; findAndCreate(itemParent, pixname, parsedItem.name+parsedItem.signature, "function:"+parsedItem.name+signature(parsedItem.signature), false, true, parsedItem); } else if ( parsedItem.kind == "m" ) // member { findAndCreate(itemParent, parsedItem.access+"_var", parsedItem.name, "variable:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "v" ) // variable { QString pixname; if ( parsedItem.classname.isEmpty() ) pixname = "global_var"; findAndCreate(itemParent, pixname, parsedItem.name, "variable:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "s" ) // struct { QString pixname; pixname = "struct"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "g" ) // enum name { QString pixname; pixname = "public_enum"; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_enum"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "e" ) // enum value { QString pixname; if ( parsedItem.classname.isEmpty() ) pixname = "public_var"; findAndCreate(itemParent, pixname, parsedItem.name, "enum:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "t" ) // typedef { QString pixname; pixname = "typedef"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "n" ) // namespace { QString pixname; pixname = "namespace"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } // End parsing } // void TreeClasses::setSortingSymbols(QTreeWidgetItem *it, bool active, QString filename, QString ext, QStringList parents) { ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); m_treeClassesItems->append( parsedItem ); if ( active ) { it->setText(0, markForSorting(parsedItem.kind, it->text(0)) ); markForDeletion(it, filename, ext, parents); } else { it->setText(0, it->text(0).section('|', -1, -1) ); if ( parsedItem.markedForDelete || it->text(0).simplified().isEmpty() ) { //delete current; m_listDeletion.append( it ); return; } } for (int i=0; ichildCount(); i++) { setSortingSymbols( it->child( i ), active, filename, ext, parents); } } // void TreeClasses::markForDeletion(QTreeWidgetItem *current, QString filename, QString ext, QStringList parents ) { ParsedItem parsedItem = current->data(0, Qt::UserRole).value(); parsedItem.markedForDelete = false; if ( ext==".cpp" && parsedItem.implementation.section("|", 0, 0) == filename && parsedItem.parents == parents) { if ( !parsedItem.declaration.toLower().endsWith(".h") ) { parsedItem.markedForDelete = true; } parsedItem.implementation = ""; } else if ( ext==".h" && parsedItem.declaration.section("|", 0, 0) == filename && parsedItem.parents == parents ) { if ( !parsedItem.implementation.toLower().endsWith(".cpp") ) { parsedItem.markedForDelete = true; } parsedItem.declaration = ""; } else parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); current->setData(0, Qt::UserRole, v ); } // void TreeClasses::deleteMarked(QTreeWidgetItem *current) { ParsedItem parsedItem = current->data(0, Qt::UserRole).value(); if ( parsedItem.markedForDelete ) { //delete current; m_listDeletion.append( current ); //emit modifiedClasse( parsedItem.classname ); return; } for (int i=0; ichildCount(); i++) { deleteMarked( current->child( i )); } return; } // // QTreeWidgetItem *TreeClasses::findAndCreate(QTreeWidgetItem *begin, QString pixname, QString text, QString key, bool recursive, bool update, ParsedItem parsedItem) { QTreeWidgetItem *newItem = findItem(begin, text, key, recursive); if ( !newItem ) { //emit modifiedClasse( parsedItem.classname ); if ( begin ) newItem = new QTreeWidgetItem( begin ); else newItem = new QTreeWidgetItem( this ); parsedItem.key = key; parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); text = markForSorting(parsedItem.kind, text); newItem->setText(0, text); setTooltip(newItem, parsedItem); newItem->setData(0, Qt::UserRole, v ); if ( !pixname.isEmpty() ) { newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png")); parsedItem.icon = ":/CV/images/CV"+pixname+".png"; } } if ( update ) { ParsedItem oldParsedItem = newItem->data(0, Qt::UserRole).value(); if ( parsedItem.declaration.isEmpty() && !oldParsedItem.declaration.isEmpty() ) parsedItem.declaration = oldParsedItem.declaration; if ( parsedItem.implementation.isEmpty() && !oldParsedItem.implementation.isEmpty() ) parsedItem.implementation = oldParsedItem.implementation; if ( parsedItem.access.isEmpty() && !oldParsedItem.access.isEmpty() ) parsedItem.access = oldParsedItem.access; parsedItem.icon = oldParsedItem.icon; text = markForSorting(parsedItem.kind, text); setTooltip(newItem, parsedItem); newItem->setText(0, text); parsedItem.key = key; if ( !pixname.isEmpty() ) { newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png")); parsedItem.icon = ":/CV/images/CV"+pixname+".png"; } parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); newItem->setData(0, Qt::UserRole, v ); } return newItem; } // void TreeClasses::setTooltip(QTreeWidgetItem *item, ParsedItem parsedItem) { if ( parsedItem.key.indexOf( "parent:" ) != 0 ) { QString ex_cmd = parsedItem.ex_cmd; //if( parsedItem.kind == "p" || parsedItem.kind == "f" || parsedItem.kind == "c" ) //{ ex_cmd = ex_cmd.section(";", 0, 0).simplified(); ex_cmd = ex_cmd.section("$", 0, 0).simplified(); ex_cmd = ex_cmd.section("{", 0, 0).simplified(); //} //else //ex_cmd = ex_cmd.section(";", 0, 0).simplified(); QString tooltip; if ( !parsedItem.access.isEmpty() ) tooltip = '['+parsedItem.access+']'+" "; tooltip += ex_cmd; item->setToolTip(0, tooltip); } } // QString TreeClasses::markForSorting(QString kind, QString text ) { if ( text.contains( '|' ) ) text = text.section('|', -1, -1); if ( kind == "c" ) text = "A|"+text; else if ( kind == "f" || kind == "p" ) text = "B|"+text; else if ( kind == "s" ) text = "C|"+text; else if ( kind == "g" ) text = "D|"+text; else if ( kind == "t" ) text = "E|"+text; else if ( kind == "m" || kind == "v" || kind == "e" ) text = "F|"+text; return text; } // QTreeWidgetItem *TreeClasses::findItem(const QTreeWidgetItem *begin, const QString text, const QString key, const bool recursive) { QTreeWidgetItem *newItem = 0; QTreeWidgetItem *it = (QTreeWidgetItem *)begin; if ( it == 0 ) it = topLevelItem( 0 ); if ( it ) { ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); if ( parsedItem.key == key ) { return it; } else { for (int i=0; ichildCount(); i++) { ParsedItem parsedItem = it->child( i )->data(0, Qt::UserRole).value(); if ( parsedItem.key == key ) return it->child( i ); else if ( recursive ) newItem = findItem(it->child( i ), text, key, recursive); } } } return newItem; } // void TreeClasses::mousePressEvent( QMouseEvent * event ) { m_itemClicked = itemAt( event->pos() ); if ( event->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); if ( m_itemClicked ) { setCurrentItem( m_itemClicked ); ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); if ( parsedItem.key.left(10) != "parent:" ) { if ( !parsedItem.declaration.isEmpty() ) connect(menu->addAction(QIcon(":/treeview/images/h.png"), tr("Open Declaration")), SIGNAL(triggered()), this, SLOT(slotOpenDeclaration()) ); if ( !parsedItem.implementation.isEmpty() ) connect(menu->addAction(QIcon(":/treeview/images/cpp.png"), tr("Open Implementation")), SIGNAL(triggered()), this, SLOT(slotOpenImplementation()) ); } if ( parsedItem.kind == "c" ) { connect(menu->addAction(QIcon(""), tr("Add Method...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassMethod()) ); connect(menu->addAction(QIcon(""), tr("Add Variable...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassVariable()) ); } else if ( parsedItem.kind == "m" ) { connect(menu->addAction(QIcon(""), tr("Add get/set Methods...")), SIGNAL(triggered()), this, SLOT(slotAddGetSetMethod()) ); } } else { menu->addSeparator(); } connect(menu->addAction(QIcon(":/toolbar/images/refresh.png"), tr("Refresh contents")), SIGNAL(triggered()), this, SLOT(slotRefresh()) ); menu->exec(event->globalPos()); delete menu; } QTreeWidget::mousePressEvent(event); } // void TreeClasses::slotOpenImplementation() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); m_mainImpl->openFile(QStringList(filename) , numLine, false, true); } // void TreeClasses::slotOpenDeclaration() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); m_mainImpl->openFile(QStringList(filename) , numLine, false, true); } // void TreeClasses::slotRefresh() { if ( m_projectManager ) m_projectManager->parseTreeClasses(true); } // void TreeClasses::toDB(QString projectDirectory) { if ( !topLevelItem(0) ) return; QApplication::setOverrideCursor(Qt::WaitCursor); QSqlQuery query( QSqlDatabase::database( projectDirectory + "/" + SETTINGS_FILE_NAME )); QString queryString = "delete from classesbrowser where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from checksums where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } query.exec("BEGIN TRANSACTION;"); writeItemsInDB(topLevelItem(0), QString(), query, projectDirectory); /** Here, for each file, a checksum is computed with his contents then this checksum is saved in database. When the database is reloaded in fromDB() function, the checksum is computed again. If the new checksum and the checksum in database are different, the file was modified between the recording and the reloading (certainly by an external editor). A new parsing for this file is required to populate correctly the classes browser. */ QStringList files; m_projectManager->sources( 0, files ); m_projectManager->headers( 0, files ); foreach(QString filename, files) { QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; QByteArray array( file.readAll() ); if ( !array.count() ) continue; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); queryString = "insert into checksums values("; queryString = queryString + "'" + filename + "', " + "'" + QString::number(check) + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; exit(0); } file.close(); } query.exec("END TRANSACTION;"); QApplication::restoreOverrideCursor(); } // void TreeClasses::writeItemsInDB(const QTreeWidgetItem *it, QString parents, QSqlQuery query, QString projectDirectory) { // ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); QString queryString = "insert into classesbrowser values("; queryString = queryString + "'" + it->text(0).replace("'", "$") + "', " + "'" + it->toolTip(0).replace("'", "$") + "', " + "'" + parsedItem.icon.replace("'", "$") + "', " + "'" + parsedItem.key.replace("'", "$") + "', " + "'" + parents.replace("'", "$") + "', " + "'" + parsedItem.name.replace("'", "$") + "', " + "'" + QDir( projectDirectory ).relativeFilePath( QDir::cleanPath( parsedItem.implementation ) ).replace("'", "$") + "', " + "'" + QDir( projectDirectory ).relativeFilePath( QDir::cleanPath( parsedItem.declaration ) ).replace("'", "$") + "', " + "'" + parsedItem.ex_cmd.replace("'", "$") + "', " + "'" + parsedItem.language.replace("'", "$") + "', " + "'" + parsedItem.classname.replace("'", "$") + "', " + "'" + parsedItem.structname.replace("'", "$") + "', " + "'" + parsedItem.enumname.replace("'", "$") + "', " + "'" + parsedItem.access.replace("'", "$") + "', " + "'" + parsedItem.signature.replace("'", "$") + "', " + "'" + parsedItem.kind.replace("'", "$") + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; exit(0); } // for (int i=0; ichildCount(); i++) { writeItemsInDB( it->child( i ), parents+":"+it->text(0), query, projectDirectory); } } // void TreeClasses::fromDB(QString projectDirectory) { m_treeClassesItems->clear(); connectDB(projectDirectory + "/" + SETTINGS_FILE_NAME); QSqlQuery query( QSqlDatabase::database( projectDirectory + "/" + SETTINGS_FILE_NAME )); query.exec("BEGIN TRANSACTION;"); QString queryString = QString() + "select * from classesbrowser where 1"; query.exec(queryString); while (query.next()) { ParsedItem parsedItem; QString text = query.value(0).toString().replace("$", "'"); QString tooltip = query.value(1).toString().replace("$", "'"); parsedItem.icon = query.value(2).toString().replace("$", "'"); parsedItem.key = query.value(3).toString().replace("$", "'"); QString parents = query.value(4).toString().replace("$", "'"); parsedItem.name = query.value(5).toString().replace("$", "'"); parsedItem.implementation = query.value(6).toString().replace("$", "'"); parsedItem.implementation = QDir( projectDirectory ).absoluteFilePath(parsedItem.implementation ); parsedItem.declaration = query.value(7).toString().replace("$", "'"); parsedItem.declaration = QDir( projectDirectory ).absoluteFilePath(parsedItem.declaration ); parsedItem.ex_cmd = query.value(8).toString().replace("$", "'"); parsedItem.language = query.value(9).toString().replace("$", "'"); parsedItem.classname = query.value(10).toString().replace("$", "'"); parsedItem.structname = query.value(11).toString().replace("$", "'"); parsedItem.enumname = query.value(12).toString().replace("$", "'"); parsedItem.access = query.value(13).toString().replace("$", "'"); parsedItem.signature = query.value(14).toString().replace("$", "'"); parsedItem.kind = query.value(15).toString().replace("$", "'"); createItemFromDB(topLevelItem(0), text, tooltip, parents, parsedItem); m_treeClassesItems->append( parsedItem ); } queryString = QString() + "select * from checksums where 1"; query.exec(queryString); while (query.next()) { QString filename = query.value(0).toString(); quint16 checksum = query.value(1).toInt(); QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray array( file.readAll() ); if ( !array.count() ) return; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); if ( check != checksum ) { m_mainImpl->slotUpdateClasses(filename, QString(array)); } file.close(); } query.exec("END TRANSACTION;"); } // // void TreeClasses::createItemFromDB(QTreeWidgetItem *parent, QString text, QString /*tooltip*/, QString parents, ParsedItem parsedItem) { if ( !parent ) { QTreeWidgetItem *it = new QTreeWidgetItem( this ); it->setText(0, text); setTooltip(it, parsedItem); it->setIcon(0, QIcon(parsedItem.icon)); QVariant v; v.setValue( parsedItem ); it->setData(0, Qt::UserRole, v ); setItemExpanded( it, true ); return; } parents = parents.section(":", 2); if ( !parents.isEmpty() ) { foreach( QString p, parents.split(":", QString::SkipEmptyParts) ) { // QTreeWidgetItem *find; for (int i=0; ichildCount(); i++) { if ( parent->child( i )->text( 0 ) == p ) parent = parent->child( i ); } } } QTreeWidgetItem *it = new QTreeWidgetItem( parent ); it->setText(0, text); setTooltip(it, parsedItem); it->setIcon(0, QIcon(parsedItem.icon)); QVariant v; v.setValue( parsedItem ); it->setData(0, Qt::UserRole, v ); } // void TreeClasses::mouseDoubleClickEvent ( QMouseEvent * event ) { m_itemClicked = itemAt( event->pos() ); if ( !m_itemClicked ) return; ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); if ( parsedItem.key.left(10) != "parent:" ) { if ( !parsedItem.implementation.isEmpty() && (parsedItem.kind!="c" || parsedItem.declaration.isEmpty() )) slotOpenImplementation(); else if ( !parsedItem.declaration.isEmpty() ) slotOpenDeclaration(); } else setItemExpanded( m_itemClicked, !isItemExpanded(m_itemClicked) ); } // QString TreeClasses::signature(QString line) { QString params = line.mid( line.indexOf("(")+1 ); params = params.left( params.lastIndexOf(")") ) .simplified(); QString formattedParams; foreach(QString param, params.split(",") ) { param = param.simplified(); if ( param.contains("&") ) param = param.simplified().left( param.simplified().lastIndexOf("&")+1 ); else if ( param.contains("*") ) param = param.simplified().left( param.simplified().lastIndexOf("*")+1 ); else if ( param.simplified().contains(" ") ) param = param.simplified().left( param.simplified().indexOf(" ") ); else if ( param.simplified().contains("=") ) param = param.simplified().left( param.simplified().lastIndexOf("=") ); formattedParams += param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.lastIndexOf(",") ); formattedParams.remove( " " ); QString s ="(" + formattedParams + ")"; return s; } // QString TreeClasses::getPathHash(QString const& pathName) { unsigned intHash = qHash(pathName); return QString().sprintf("_%x_", intHash); } // // void TreeClasses::slotAddNewClassMethod() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString implementation = parsedItem.implementation; QString declaration = parsedItem.declaration; QString classname = parsedItem.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClicked->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } AddNewClassMethodImpl *dialog = new AddNewClassMethodImpl(m_mainImpl, this, implementation, declaration, classname); dialog->exec(); delete dialog; // } // void TreeClasses::slotAddNewClassVariable() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString implementation = parsedItem.implementation; QString declaration = parsedItem.declaration; QString classname = parsedItem.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClicked->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } AddNewClassVariableImpl *dialog = new AddNewClassVariableImpl(m_mainImpl, this, m_itemClicked, declaration, implementation, classname); dialog->exec(); delete dialog; // } // void TreeClasses::slotAddGetSetMethod() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); ParsedItem parsedItemParent = m_itemClicked->parent()->data(0, Qt::UserRole).value(); QTreeWidgetItem *m_itemClickedParent = m_itemClicked->parent(); QString implementation = parsedItemParent.implementation; QString declaration = parsedItemParent.declaration; QString classname = parsedItemParent.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClickedParent->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } QString type = parsedItem.ex_cmd.left( parsedItem.ex_cmd.lastIndexOf(" ") ); AddSetGetImpl *addSetGetImpl = new AddSetGetImpl(m_mainImpl, this, declaration, implementation, classname, type, parsedItem.name); addSetGetImpl->exec(); delete addSetGetImpl; } // QStringList TreeClasses::methods(QString filename, QString /*classname*/) { QStringList listMethods; const QList *list; list = treeClassesItems(); //foreach( ParsedItem parsedItem, list ) for (int i = 0; i < list->size(); ++i) { ParsedItem parsedItem = list->at( i ); if ( ( parsedItem.kind == "p" || parsedItem.kind == "f" ) && parsedItem.declaration.section("|", 0, 0) == filename ) { QString returnName = parsedItem.ex_cmd; if ( returnName.left( returnName.indexOf("::") ).indexOf("\t") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section("\t", 0, 0); else if ( returnName.left( returnName.indexOf("::") ).indexOf(" ") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section(" ", 0, 0); else returnName = ""; QString add = returnName+" " +parsedItem.name+parsedItem.signature; listMethods << add.simplified(); } } return listMethods; } // /*const QList *TreeClasses::treeClassesItems(QString classname) { QTreeWidgetItem *parent = findItem(0, classname, "class:"+classname, false); if( parent ) { ParsedItem parsedItem = parent->data(0, Qt::UserRole).value(); list->append( parsedItem ); for(int i=0; ichildCount(); i++) { QTreeWidgetItem *childItem = parent->child( i ); ParsedItem parsedItem = childItem->data(0, Qt::UserRole).value(); list->append( parsedItem ); } } return list; }*/ // qdevelop-v0.28/src/addscopeimpl.h0000644000175000017500000000233411362261066016035 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDSCOPE_H #define ADDSCOPE_H #include "ui_addscope.h" #include // class ProjectManager; // class AddScopeImpl : public QDialog, public Ui::AddScope { Q_OBJECT public: AddScopeImpl(ProjectManager * parent = 0); public slots: private: ProjectManager *m_projectManager; private slots: }; #endif qdevelop-v0.28/src/findfileimpl.h0000644000175000017500000000323111362261066016030 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef FINDFILEIMPL_H #define FINDFILEIMPL_H // #include "ui_findfiles.h" // class QWidget; class QListWidget; // class FindFileImpl : public QDialog, public Ui::FindFile { Q_OBJECT public: FindFileImpl(QWidget * parent, QStringList directories, QListWidget *listResult, QListWidget *findLines); void setDefaultWord( QString s); private slots: void on_chooseDirectoryButton_clicked(); void on_findButton_clicked(); void find( QString directory ); protected: void showEvent(QShowEvent* _pEvent); private: QWidget *m_parent; QListWidget *m_listResult, *m_listLines; QString defaultWord; void findInFile( QString filename ); bool m_stop; //variables used to remember where the search begins QString m_searchDirectory; int m_recursiveDepth; }; #endif qdevelop-v0.28/src/logbuild.h0000644000175000017500000000436511362261066015200 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef LOGBUILD_H #define LOGBUILD_H // #include #include // class MainImpl; // class BlockLogBuild : public QTextBlockUserData { public: BlockLogBuild(QString d) : QTextBlockUserData() { m_directory = d; } QString directory() { return m_directory; } private: QString m_directory; }; // /*! \brief The LogBuild class is used as build logger displayed in the dock Outputs. * */ class LogBuild : public QTextEdit { Q_OBJECT public: /** * The constructor */ LogBuild(QWidget * parent = 0); /** * Called by the mainimpl to set the pointer with the address of the main window. */ void setMainImpl( MainImpl *mainImpl ) { m_mainImpl = mainImpl; } static bool containsError(QString message, QString & file, uint & line); static bool containsWarning(QString message, QString & file, uint & line); protected: /** * When the user double-click on a error or warning line, the file is opened in a editor. */ void mouseDoubleClickEvent( QMouseEvent * event ); public slots: /** * In main window, the signal message(QString, QString) of the class Build is connected * to the slot slotMessagesBuild in this class. */ void slotMessagesBuild(QString list, QString directory); private: /** * A pointer to the MainImpl class */ MainImpl* m_mainImpl; signals: void incErrors(); void incWarnings(); }; #endif qdevelop-v0.28/src/cpphighlighter.h0000644000175000017500000001126111362261066016371 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Trent Zhou * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef CPP_HIGHLIGHTER_H #define CPP_HIGHLIGHTER_H #include #include #include #include class QTextDocument; class CppHighlighter: public QSyntaxHighlighter { public: CppHighlighter(QTextDocument* document = NULL); ~CppHighlighter(); void addUserKeyword(QString const& regex); bool removeUserKeyword(QString const& regex); void setupRegexTable(); protected: void highlightBlock(QString const& text); private: enum SyntaxType { TEXT, // normal text // following items can be fetched by a simple pattern matching FUNCTION, SINGLE_LINE_COMMENT, KEYWORD, USER_KEYWORD, OPERATOR, NUMBER, ESCAPE_CHAR, // following items need states on lines MACRO, MULTI_LINE_COMMENT, STRING, }; QTextCharFormat const& formatFor(SyntaxType type); void doRegexMatch(QString const& str, int startPos = 0); bool handleState(QString const& text, int& startPos, int& endPos); int searchStringEnd(QString const& text, int startPos = 0, QChar strChar = '"'); int searchMultilineCommentEnd(QString const& text, int startPos = 0); bool handlePreprocessor(QString const& text); void handleEscapeChar(QString const& text, int start = 0, int len = 0); private: QRegExp m_reInclude; QRegExp m_reMacro; QRegExp m_reMultilineMacro; QRegExp m_reSpecial; QRegExp m_reWord; struct RegexItem { RegexItem() {} RegexItem(RegexItem const& other):regex(other.regex), type(other.type) {} QRegExp regex; SyntaxType type; }; QSet m_keywords; QSet m_userKeywords; QVector m_regexItems; // formats QTextCharFormat m_formatFunction; QTextCharFormat m_formatSingleLineComment; QTextCharFormat m_formatMultiLineComment; QTextCharFormat m_formatKeyword; QTextCharFormat m_formatUserKeyword; QTextCharFormat m_formatOperator; QTextCharFormat m_formatNumber; QTextCharFormat m_formatEscapeChar; QTextCharFormat m_formatMacro; QTextCharFormat m_formatString; public: QTextCharFormat keywordFormat() { return m_formatKeyword; } void setKeywordFormat(QTextCharFormat const& f) { m_formatKeyword = f; } // class format? I guess you mean user keyword... QTextCharFormat classFormat() { return m_formatUserKeyword; } void setClassFormat(QTextCharFormat const& f) { m_formatUserKeyword = f; } QTextCharFormat singleLineCommentFormat() { return m_formatSingleLineComment; }; void setSingleLineCommentFormat(QTextCharFormat const& f) { m_formatSingleLineComment = f; } QTextCharFormat multiLineCommentFormat() { return m_formatMultiLineComment; }; void setMultiLineCommentFormat(QTextCharFormat const& f) { m_formatMultiLineComment = f; } QTextCharFormat quotationFormat() { return m_formatString; } void setQuotationFormat(QTextCharFormat const& f) { m_formatString = f; } QTextCharFormat functionFormat() { return m_formatFunction; } void setFunctionFormat(QTextCharFormat const& f) { m_formatFunction = f; } QTextCharFormat preprocessorFormat() { return m_formatMacro; } void setPreprocessorFormat(QTextCharFormat const& f) { m_formatMacro = f; } QTextCharFormat userKeywordFormat() { return m_formatUserKeyword; } void setUserKeywordFormat(QTextCharFormat const& f) { m_formatUserKeyword = f; } QTextCharFormat operatorFormat() { return m_formatOperator; } void setOperatorFormat(QTextCharFormat const& f) { m_formatOperator = f; } QTextCharFormat escapeCharFormat() { return m_formatEscapeChar; } void setEscapeCharFormat(QTextCharFormat const& f) { m_formatEscapeChar = f; } }; #endif qdevelop-v0.28/src/InitCompletion.h0000644000175000017500000000675411362261066016340 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Anacr0x ( fred.julian at gmail.com ) // * FILENAME : InitCompletion.h * LICENSE : GPL * COMMENTARY : Initialisation class for the icomplete's autocompletion ********************************************************************************************************/ #ifndef _INIT_COMPLETION_H #define _INIT_COMPLETION_H #include #include #include #include #include #include class Tree; class TreeClasses; struct Expression; struct Scope; class Tag { public: Tag(){}; QString name; QString parameters; QString longName; QString kind; QString access; QString signature; QString returned; bool isFunction; bool isStatic; }; typedef QList TagList; // #include // class InitCompletion : public QThread { Q_OBJECT public: QString classForFunction(QString classname, QString function); enum Request { Completion, CheckQtDatabase, ClassName }; InitCompletion (QObject *parent, TreeClasses *treeClasses); ~InitCompletion(); void setCtagsCmdPath (const QString &cmdPath); void addIncludes (QStringList includesPath, QString projectDirectory); void run(); QString className(const QString &text); //void setEmitResults(bool r) { m_emitResults = r; }; /* * @param: filename is a name like "string.h" * @return: the file descriptor (fd) and stores * "/usr/include/string.h" in fullname */ void setQtInclude(QStringList value) { m_qtInclude = value; } QFile* getFiledescriptor(const QString &filename, QString &fullname); void setStopRequired() { m_stopRequired = true;} QString tagsFilePath, tagsIncludesPath, ctagsCmdPath, smallTagsFilePath, parsedFilePath; private: Expression getExpression(const QString &text, Scope &sc, bool showAllResults = false); /* creates a simple hash for all #include lines of a line */ long calculateHash(const QString &ParsedText); /* forks and executes ctags to rebuild a tags file * storing cache_value in the tags file */ bool buildTagsFile(long cache_value, const QString &parsedText); QStringList includesList(const QString &parsedText); QString includesPathList(const QString &parsedText); void writeInheritanceToDB(QMap inheritsList, QSqlQuery query); TagList readFromDB(TagList list, Expression exp, QString functionName); void writeToDB(Expression exp, TagList list, QSqlQuery query); bool connectQDevelopDB(QString const& dbName); void createTables(); void populateQtDatabase(); QStringList inheritanceList( const QString classname, QStringList &list ); Expression parseLine( QString text ); QString returned(QString className, QString function, Expression &exp); QStringList cpp_includes; QString m_text; bool m_showAllResults; bool m_emitResults; bool m_showDuplicateEntries; //bool m_checkQt; Request m_request; QString m_name; QString m_projectDirectory; QList > parsingList; QStringList m_qtInclude; bool m_stopRequired; TreeClasses *m_treeClasses; QStringList filesList(QString directory, QStringList files); public slots: void slotInitParse(InitCompletion::Request request, QString filename, const QString &text, bool showAllResults, bool emitResults, bool showDuplicateEntries, QString name); signals: void completionList( TagList ); void completionHelpList( TagList ); void showMessage( QString ); }; #endif qdevelop-v0.28/src/stackimpl.h0000644000175000017500000000300511362261066015354 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef STACKIMPL_H #define STACKIMPL_H // #include #include // class MainImpl; class QListWidget; class QListWidgetItem; // class StackImpl : public QObject { Q_OBJECT public: void clear(); StackImpl( MainImpl * parent, QListWidget *list); void addLine( const QString line ); void setDirectory( QString directory ) { m_directory = directory; }; void infoSources(const QString s ); private slots: void slotCurrentItemChanged ( QListWidgetItem * item, QListWidgetItem * ); private: QString m_directory; QStringList m_infoSources; MainImpl *m_mainImpl; QListWidget *m_list; }; #endif qdevelop-v0.28/src/addsetgetimpl.h0000644000175000017500000000323511362261066016220 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDSETGETIMPL_H #define ADDSETGETIMPL_H // #include "ui_addsetget.h" // class MainImpl; class TreeClasses; class QTreeWidgetItem; // class AddSetGetImpl : public QDialog, public Ui::AddSetGet { Q_OBJECT public: AddSetGetImpl(MainImpl * parent, TreeClasses *treeClasses, QString declaration, QString implementation, QString classname, QString type, QString variableName); private slots: void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QString m_declaration; QString m_implementation; QString m_classname; QString m_type; QString m_variableName; void insertInDeclaration(QString scope, QString insertedText); void insertInImplementation(QString insertedText); }; #endif qdevelop-v0.28/src/registersimpl.cpp0000644000175000017500000000341311362261066016614 0ustar jlbrdjlbrd#include "registersimpl.h" // #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // RegistersImpl::RegistersImpl( QWidget * parent, Qt::WFlags f) : QWidget(parent, f) { setupUi(this); QHeaderView *header = tableWidget->horizontalHeader(); header->resizeSection( 0, 50 ); tableWidget->verticalHeader()->hide(); } // void RegistersImpl::registers(QString regs) { regs = regs.section("Registers:", 1); while ( tableWidget->rowCount() ) tableWidget->removeRow(0); foreach(QString line, regs.split("\n") ) { QString name = line.section(" ", 0, 0); if( name == "(gdb)" || name.isEmpty() ) continue; line = line.section(" ", 1).simplified(); QString value1 = line.section(" ", 0, 0); line = line.section(" ", 1).simplified(); QString value2 = line.section(" ", 0); QTableWidgetItem *newItem1 = new QTableWidgetItem(name); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(value1); //newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(value2); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); int row = tableWidget->rowCount(); tableWidget->setRowCount(row+1); tableWidget->setItem(row, 0, newItem1); tableWidget->setItem(row, 1, newItem2); tableWidget->setItem(row, 2, newItem3); } } void RegistersImpl::on_applyButton_clicked() { QString command; for(int row=0; rowrowCount(); row++ ) { QString name = tableWidget->item(row, 0)->text(); QString value1 = tableWidget->item(row, 1)->text(); command += "set $" + name + "=" + value1 + "\n"; } emit debugCommand( command ); } qdevelop-v0.28/src/linenumbers.h0000644000175000017500000000517611362261066015723 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ /******************************************************************************************************** * Une partie de cette classe fait partie du projet Monkey Studio * de Azevedo Filipe aka Nox PasNox ( pasnox at gmail dot com ) ********************************************************************************************************/ #ifndef LINENUMBERS_H #define LINENUMBERS_H // #include #include // class QTextEdit; class TextEdit; class Editor; // class LineNumbers : public QWidget { Q_OBJECT Q_PROPERTY( int digitNumbers READ digitNumbers WRITE setDigitNumbers ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) Q_PROPERTY( QColor backgroundColor READ backgroundColor WRITE setBackgroundColor ) // public: LineNumbers( TextEdit*, Editor* ); // void setDigitNumbers( int ); int digitNumbers() const; // void setTextColor( const QColor& ); const QColor& textColor() const; // void setBackgroundColor( const QColor& ); const QColor& backgroundColor() const; // void setExecutedLine(int ligne); protected: virtual void paintEvent( QPaintEvent* ); virtual void mousePressEvent( QMouseEvent * event ); virtual void mouseMoveEvent( QMouseEvent * event ); // private: TextEdit* m_textEdit; Editor * m_editor; int mDigitNumbers; QColor mTextColor; QColor mBackgroundColor; int m_executedLine; int m_currentLine; QTextCursor m_cursor; // signals: void digitNumbersChanged(); void textColorChanged( const QColor& ); void backgroundColorChanged( const QColor& ); // protected slots: void slotResetExecutedLine(); private slots: void slotToggleBreakpoint(); void slotToggleBookmark(); void slotBreakpointCondition(); public slots: void setDefaultProperties(); }; // #endif qdevelop-v0.28/src/selectionborder.h0000644000175000017500000000304211362261066016551 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SELECTIONBORDER_H #define SELECTIONBORDER_H // #include // class QTextEdit; class TextEdit; // class SelectionBorder : public QWidget { public: SelectionBorder( TextEdit* ); void setBackgroundColor( const QColor& ); const QColor& backgroundColor() const; // protected: virtual void paintEvent( QPaintEvent* ); virtual void mousePressEvent( QMouseEvent * event ); virtual void mouseMoveEvent( QMouseEvent * event ); virtual void mouseReleaseEvent( QMouseEvent * event ); // private: TextEdit* m_textEdit; QColor mBackgroundColor; int m_begin; int m_end; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/treeproject.cpp0000644000175000017500000002557711362261066016270 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "treeproject.h" #include "projectmanager.h" #include #include #include #include #include #include // Delegator /** * @author: David Cuadrado \ */ class Delegator: public QItemDelegate { public: Delegator(QTreeWidget *tree, QWidget *parent ); ~Delegator(); virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; virtual QSize sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const; private: QTreeWidget *m_tree; }; Delegator::Delegator(QTreeWidget *tree, QWidget *parent) : QItemDelegate(parent), m_tree(tree) { } Delegator::~Delegator() { } void Delegator::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); QString text = model->data(index, Qt::DisplayRole).toString(); QRect r = option.rect; r.setX( 0 ); if ( text.toLower().endsWith(".pro") ) { // Project QPalette palette = option.palette; if (!model->parent(index).isValid()) { QColor color = palette.highlight().color(); color.setAlpha(70); palette.setBrush(QPalette::Button, color); } painter->save(); QStyleOptionButton buttonOption; buttonOption.state = option.state; buttonOption.state &= ~QStyle::State_HasFocus; buttonOption.rect = r; buttonOption.palette = palette; buttonOption.features = QStyleOptionButton::None; if(m_tree->selectedItems().contains(static_cast(m_tree)->itemFromIndex(index))) { buttonOption.state |= QStyle::State_Sunken; } m_tree->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, m_tree); painter->restore(); // draw text QRect textRect = QRect(r.left() + 20, r.top(), r.width() - (option.fontMetrics.width(text) /2), r.height()); QString textToDraw = elidedText(option.fontMetrics, textRect.width(), Qt::ElideMiddle, text.left(text.length()-4) ); m_tree->style()->drawItemText(painter, textRect, Qt::AlignCenter, option.palette, m_tree->isEnabled(), textToDraw); } else { // Childs QStyleOptionViewItem newOption = option; QModelIndex i = model->parent(model->parent(index)); if ( i.isValid() ) { QString text = model->data(i, Qt::DisplayRole).toString(); if ( !text.toLower().endsWith(".pro") ) { r.setX(0); } else { r.setX(20); } } newOption.rect = r; QItemDelegate::paint(painter, newOption, index); } } QSize Delegator::sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const { QStyleOptionViewItem option = opt; QSize sz = QItemDelegate::sizeHint(opt, index) + QSize(2, 2); return sz; } // TreeProject::TreeProject(QWidget * parent) : QTreeWidget(parent) { //setDragEnabled(true); //setAcceptDrops(true); //setDropIndicatorShown(true); //setAcceptDrops ( true ); krawekItemDelegate = 0; setup(); } TreeProject::~TreeProject() { } // void TreeProject::drawBranches( QPainter * painter, const QRect & rect, const QModelIndex & index ) const { if( normalItemDelegate == itemDelegate() ) { QTreeView::drawBranches(painter, rect, index ); } } void TreeProject::setup() { setColumnCount(1); normalItemDelegate = itemDelegate(); slotShowAsNormal(); krawekItemDelegate = 0; } void TreeProject::mousePressEvent( QMouseEvent * event ) { if( !m_projectManager ) return; m_itemClicked = itemAt( event->pos() ); if( !m_itemClicked ) return; emit itemClicked(m_itemClicked, 0); if( event->button() == Qt::RightButton ) { setCurrentItem( m_itemClicked ); if( !m_itemClicked ) return; QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); setCurrentItem( m_itemClicked ); QMenu *menu = new QMenu(this); if( key == "PROJECT" || key == "SCOPE" ) { if (key == "PROJECT" ) { QAction *sousProjet = menu->addAction(QIcon(), tr("Add sub-project...")); connect(sousProjet, SIGNAL(triggered()), this, SLOT(slotAddSubProject()) ); for(int i=0; ichildCount(); i++) if( QString("SCOPE:FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains( m_projectManager->toKey( m_itemClicked->child( i )->data(0, Qt::UserRole) ) ) ) sousProjet->setEnabled( false ); } connect(menu->addAction(QIcon(), tr("Add New Item...")), SIGNAL(triggered()), this, SLOT(slotAddNewItem()) ); connect(menu->addAction(QIcon(), tr("Add Scope...")), SIGNAL(triggered()), this, SLOT(slotAddScope()) ); connect(menu->addAction(QIcon(), tr("Add New Class...")), SIGNAL(triggered()), this, SLOT(slotAddNewClass()) ); connect(menu->addAction(QIcon(), tr("Add Existing Files...")), SIGNAL(triggered()), this, SLOT(slotAddExistingFiles()) ); } else if( key == "DATA" ) { if( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "TRANSLATIONS" ) { connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open in Linguist")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(":/toolbar/images/refresh.png"), tr("Refresh translation files")+" (.ts)"), SIGNAL(triggered()), this, SLOT(slotlupdate()) ); connect(menu->addAction(QIcon(""), tr("Build release translation files")+" (.qm)"), SIGNAL(triggered()), this, SLOT(slotlrelease()) ); } if( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "FORMS" ) { connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open in Designer")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(), tr("Dialog Subclassing...")), SIGNAL(triggered()), this, SLOT(slotSubclassing()) ); connect(menu->addAction(QIcon(), tr("Dialog Preview")), SIGNAL(triggered()), this, SLOT(slotPreviewForm()) ); } else connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(), tr("Rename...")), SIGNAL(triggered()), this, SLOT(slotRenameItem()) ); } else if( QString("FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains(key) ) { connect(menu->addAction(QIcon(), tr("Add New Item...")), SIGNAL(triggered()), this, SLOT(slotAddNewItem()) ); } // TODO: Divius: Temporary disabled for 0.27.1. may brake complex project files //connect(menu->addAction(QIcon(), tr("Sort")), SIGNAL(triggered()), this, SLOT(slotSort()) ); connect(menu->addAction(QIcon(":/toolbar/images/editdelete.png"), tr("Remove from project")), SIGNAL(triggered()), this, SLOT(slotDeleteItem()) ); menu->addSeparator(); QTreeWidgetItem *tmp = m_itemClicked; while( tmp && m_projectManager->toKey( tmp->data(0, Qt::UserRole) ) != "PROJECT" ) tmp = tmp->parent(); if( tmp ) connect(menu->addAction(QIcon(), tr("Properties of %1...").arg(tmp->text(0)) ), SIGNAL(triggered()), this, SLOT(slotProjectPropertie()) ); // menu->addSeparator(); QMenu *showAs = menu->addMenu(tr("Show As")); connect(showAs->addAction(QIcon(), tr("Normal")), SIGNAL(triggered()), this, SLOT(slotShowAsNormal()) ); connect(showAs->addAction(QIcon(), tr("Krawek")), SIGNAL(triggered()), this, SLOT(slotShowAsKrawek()) ); menu->exec(event->globalPos()); delete menu; } else if( event->button() == Qt::MidButton ) { QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); if ( (key == "DATA" ) && ( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "FORMS" ) ) { // show dialog previewForm(m_itemClicked); } } QTreeWidget::mousePressEvent(event); } // void TreeProject::resizeEvent ( QResizeEvent * event ) { QTreeWidget::resizeEvent( event ); } // void TreeProject::keyPressEvent( QKeyEvent * event ) { if ( event->key( ) == Qt::Key_Return ) { slotOpen( ); event->setAccepted( true ); } else { QTreeWidget::keyPressEvent( event ); m_itemClicked = currentItem( ); } } // void TreeProject::slotShowAsNormal() { setItemDelegate( normalItemDelegate ); header()->hide(); setRootIsDecorated(true); setAlternatingRowColors(false); if( krawekItemDelegate ) { delete krawekItemDelegate; krawekItemDelegate = 0; } } // void TreeProject::slotShowAsKrawek() { if( !krawekItemDelegate ) krawekItemDelegate = new Delegator(this, this); header()->hide(); setRootIsDecorated(false); setItemDelegate( krawekItemDelegate ); setAlternatingRowColors(true); } // void TreeProject::slotAddNewItem() { QString kind; QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); if( QString("FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains(key) ) kind = key; emit addNewItem(m_itemClicked, kind); } // void TreeProject::slotPreviewForm() { emit previewForm(m_itemClicked); } // void TreeProject::slotSubclassing() { emit subclassing(m_itemClicked); } // void TreeProject::slotlupdate() { emit lupdate(m_itemClicked); } // void TreeProject::slotlrelease() { emit lrelease(m_itemClicked); } // void TreeProject::slotAddExistingFiles() { emit addExistingsFiles(m_itemClicked); } // void TreeProject::slotAddScope() { emit addScope(m_itemClicked); } // void TreeProject::slotAddSubProject() { emit addSubProject(m_itemClicked); } // void TreeProject::slotProjectPropertie() { emit projectPropertie(m_itemClicked); } // void TreeProject::slotOpen() { emit open(m_itemClicked, 0); } // void TreeProject::slotDeleteItem() { emit deleteItem(m_itemClicked); } // void TreeProject::slotRenameItem() { emit renameItem(m_itemClicked); } // void TreeProject::slotAddNewClass() { emit addNewClass(m_itemClicked); } // void TreeProject::slotSort() { emit sort(); } // void TreeProject::dragEnterEvent(QDragEnterEvent *) { //if (event->mimeData()->hasFormat("text/plain")) //event->acceptProposedAction(); } // qdevelop-v0.28/src/editor.cpp0000644000175000017500000010622411362261066015215 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #define QD qDebug() << __FILE__ << __LINE__ << ":" // #include "editor.h" #include "mainimpl.h" #include "lineedit.h" #include "tabwidget.h" #include "linenumbers.h" #include "logbuild.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cpphighlighter.h" #include #include #include #include Editor::Editor(TabWidget * parent, MainImpl *mainimpl, InitCompletion *completion, QString name) : QWidget(parent) { m_parent = parent; m_mainimpl = mainimpl; m_completion = completion; m_filename = name; int vposLayout = 0; m_comboClasses = m_comboMethods = 0; m_otherFileButton = m_refreshButton = 0; m_editorToolbar = 0; m_textEdit = new TextEdit(this, mainimpl, completion); m_backward = false; m_activeEditor = false; m_nameOtherFile = ""; m_hideFindReplace = 10; // QGridLayout *gridLayout = new QGridLayout(this); gridLayout->setSpacing(0); gridLayout->setMargin(0); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); if ( suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc" || suffixe( m_filename ).toLower() == "c" || suffixe( m_filename ).toLower() == "h" || suffixe( m_filename ).toLower() == "hpp" ) { QHBoxLayout *hboxLayout = new QHBoxLayout(); hboxLayout->setSpacing(6); hboxLayout->setMargin(6); hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); // m_otherFileButton = new QToolButton(this); connect(m_otherFileButton, SIGNAL(clicked()), this, SLOT(slotOtherFile())); hboxLayout->addWidget(m_otherFileButton); // if ( (suffixe( m_filename ).toLower() != "h") && (suffixe( m_filename ).toLower() != "hpp") ) { m_refreshButton = new QToolButton(this); m_refreshButton->setIcon(QIcon(":/toolbar/images/refresh.png")); m_refreshButton->setToolTip( tr("Refresh classes and methods lists") ); connect(m_refreshButton, SIGNAL(clicked()), this, SLOT(slotClassesMethodsList()) ); hboxLayout->addWidget(m_refreshButton); // m_comboClasses = new QComboBox(this); m_comboClasses->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); m_comboClasses->setSizeAdjustPolicy(QComboBox::AdjustToContents); m_comboClasses->setLineEdit( new LineEdit(m_comboClasses) ); m_comboClasses->setEditable( true ); m_comboClasses->setAutoCompletion( true ); m_comboClasses->setObjectName(QString::fromUtf8("m_comboClasses")); connect(m_comboClasses, SIGNAL(activated(QString)), this, SLOT(slotComboClasses(QString)) ); hboxLayout->addWidget(m_comboClasses); // m_comboMethods = new QComboBox(this); m_comboMethods->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); m_comboMethods->setSizeAdjustPolicy(QComboBox::AdjustToContents); m_comboMethods->setMaximumSize( 500, m_comboMethods->height()); m_comboMethods->setLineEdit( new LineEdit(m_comboClasses) ); m_comboMethods->setEditable( true ); m_comboMethods->setAutoCompletion( true ); m_comboMethods->setMaxVisibleItems( 25 ); m_comboMethods->setObjectName(QString::fromUtf8("comboMethodes")); m_comboMethods->lineEdit()->setAlignment(Qt::AlignLeft); connect(m_comboMethods, SIGNAL(activated(int)), this, SLOT(slotComboMethods(int)) ); hboxLayout->addWidget(m_comboMethods); } // QSpacerItem *spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); hboxLayout->addItem(spacerItem); // // updateOtherFile(m_filename); // Update "other file" button m_otherFileButton->setIcon(QIcon(m_otherFileIcon)); m_editorToolbar = new QWidget( this ); m_editorToolbar->setLayout( hboxLayout ); gridLayout->addWidget(m_editorToolbar, vposLayout++, 0, 1, 1); } connect(m_textEdit, SIGNAL(editorModified(bool)), this, SLOT(slotModifiedEditor(bool)) ); // m_findWidget = new QWidget; uiFind.setupUi(m_findWidget); connect(uiFind.toolClose, SIGNAL(clicked()), m_findWidget, SLOT(hide()) ); connect(uiFind.editFind, SIGNAL(textChanged(QString)), this, SLOT(slotFindWidget_textChanged(QString)) ); connect(uiFind.editFind, SIGNAL(returnPressed()), this, SLOT(slotFindNext()) ); connect(uiFind.toolPrevious, SIGNAL(clicked()), this, SLOT(slotFindPrevious()) ); connect(uiFind.toolNext, SIGNAL(clicked()), this, SLOT(slotFindNext()) ); // autoHideTimer = new QTimer(this); // m_replaceWidget = new QWidget; uiReplace.setupUi(m_replaceWidget); uiReplace.replace->hide(); connect(uiReplace.toolClose, SIGNAL(clicked()), m_replaceWidget, SLOT(hide()) ); connect(uiReplace.textFind, SIGNAL(editTextChanged(QString)), uiFind.editFind, SLOT(setText(QString)) ); connect(uiReplace.textFind, SIGNAL(editTextChanged(QString)), this, SLOT(slotFindWidget_textChanged(QString)) ); connect(uiReplace.textReplace, SIGNAL(editTextChanged(QString)), autoHideTimer, SLOT(start()) ); connect(uiReplace.toolPrevious, SIGNAL(clicked()), this, SLOT(slotFindPrevious()) ); connect(uiReplace.toolNext, SIGNAL(clicked()), this, SLOT(slotFindNext()) ); connect(uiReplace.replace, SIGNAL(clicked()), this, SLOT(slotReplace()) ); connect(uiReplace.checkCase, SIGNAL(toggled(bool)), uiFind.checkCase, SLOT(setChecked(bool)) ); connect(uiReplace.checkWholeWords, SIGNAL(toggled(bool)), uiFind.checkWholeWords, SLOT(setChecked(bool)) ); // autoHideTimer->setInterval(10000); autoHideTimer->setSingleShot(true); connect(autoHideTimer, SIGNAL(timeout()), m_findWidget, SLOT(hide())); connect(autoHideTimer, SIGNAL(timeout()), m_replaceWidget, SLOT(hide())); // gridLayout->addWidget(m_textEdit, vposLayout++, 0, 1, 1); gridLayout->addWidget(m_findWidget, vposLayout++, 0, 1, 1); gridLayout->addWidget(m_replaceWidget, vposLayout++, 0, 1, 1); uiFind.labelWrapped->setVisible(false); uiReplace.labelWrapped->setVisible(false); m_findWidget->hide(); m_replaceWidget->hide(); // connect(&m_timerUpdateClasses, SIGNAL(timeout()), this, SLOT(slotTimerUpdateClasses())); connect(&m_timerCheckLastModified, SIGNAL(timeout()), this, SLOT(slotTimerCheckIfModifiedOutside())); } // void Editor::updateOtherFile(QString currentFile) { if ( !m_otherFileButton ) return; QString suffix; QString base = currentFile.left(currentFile.lastIndexOf(".") ); m_nameOtherFile = ""; if ( suffixe( currentFile ).toLower() == "h" || suffixe( currentFile ).toLower() == "hpp" ) suffix = "cpp"; else if ( suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc" || suffixe( m_filename ).toLower() == "c") suffix = "h"; // if the current file has one of the above suffixes and the other file exists, use it if (!suffix.isEmpty() && QFileInfo(base+"."+suffix).exists()) { m_nameOtherFile = base+"."+suffix; m_otherFileButton->setVisible(true); m_otherFileButton->setToolTip( tr("Open %1").arg(shortFilename(m_nameOtherFile)) ); m_otherFileIcon = ":/treeview/images/"+suffix+".png"; m_otherFileButton->setIcon(QIcon(m_otherFileIcon)); } else // otherwise, don't display the button m_otherFileButton->setVisible(false); emit otherFileChanged(); } // void Editor::setActiveEditor(bool b) { m_activeEditor = b; if ( b && m_showTreeClasses ) { m_timerUpdateClasses.start(m_intervalUpdatingClasses); if ( m_completion ) { m_completion->disconnect( m_textEdit ); connect(m_completion, SIGNAL(completionList(TagList)), m_textEdit, SLOT(slotCompletionList(TagList)) ); connect(m_completion, SIGNAL(completionHelpList(TagList)), m_textEdit, SLOT(slotCompletionHelpList(TagList)) ); } } else { slotTimerUpdateClasses(); m_timerUpdateClasses.stop(); if ( m_completion ) m_completion->disconnect( m_textEdit ); } } // void Editor::setShowTreeClasses(bool s) { m_showTreeClasses=s; if ( !m_showTreeClasses ) m_timerUpdateClasses.stop(); } // void Editor::slotTimerUpdateClasses() { QByteArray array( m_textEdit->toPlainText().toLocal8Bit() ); if ( !array.count() ) return; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); if ( check != m_checksum ) { m_checksum = check; emit updateClasses( filename(), m_textEdit->toPlainText()); m_mainimpl->slotCompile(true); } if( m_textEdit->hasFocus() ) m_textEdit->setMouseHidden( true ); else m_textEdit->setMouseHidden( false ); } // void Editor::slotTimerCheckIfModifiedOutside() { QFile file(m_filename); if ( !file.exists() ) { m_timerCheckLastModified.stop(); int rep = QMessageBox::question(this, "QDevelop", tr("The file \"%1\"\ndisappeared from fisk.\n\n").arg(m_filename)+ tr("What do you want to do?"), tr("Recreate"), tr("Close") ); if ( rep == 0 ) // Recreate { m_textEdit->document()->setModified( true ); save(); m_timerCheckLastModified.start( 5000 ); } else if ( rep == 1 ) // Closing { QList editors = m_mainimpl->allEditors(); for (int i = 0; i < editors.count(); i++) { qDebug() << editors[i]->filename() << filename(); if (editors[i]->filename() == filename()) { // TODO: Not very good idea to delete object during it's event handler! m_mainimpl->closeTab(i); return; } } } } else if ( m_lastModified != QFileInfo( file ).lastModified() ) { m_timerCheckLastModified.stop(); int rep = QMessageBox::question(this, "QDevelop", tr("The file \"%1\"\nwas modified outside editor.\n\n").arg(m_filename)+ tr("What do you want to do?"), tr("Overwrite"), tr("Reload File") ); if ( rep == 0 ) // Overwrite { m_textEdit->document()->setModified( true ); save(); } else if ( rep == 1 ) // Reload { open(false); } m_timerCheckLastModified.start( 5000 ); } checkBookmarks(); } // void Editor::checkBookmarks() { QMenu *menu = m_mainimpl->bookmarksMenu(); QList actions = menu->actions(); foreach(QAction *action, actions) { Bookmark bookmark = action->data().value(); QTextBlock block = bookmark.second; bool found = false; for ( QTextBlock b = m_textEdit->document()->begin(); b.isValid(); b = b.next() ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( block==b && blockUserData && blockUserData->bookmark ) { found = true; } } if ( !found ) { m_mainimpl->toggleBookmark(this, "", false, block); } } } // void Editor::clearAllBookmarks() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->bookmark ) toggleBookmark( line ); } } // Editor::~Editor() {} // bool Editor::open(bool silentMode) { bool ret = m_textEdit->open(silentMode, m_filename, m_lastModified); if ( ret && (suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc")) slotClassesMethodsList(); QByteArray array( m_textEdit->toPlainText().toLocal8Bit() ); if ( array.count() ) { char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); m_checksum = check; } m_timerCheckLastModified.start( 5000 ); return ret; } // bool Editor::close() { bool ret = m_textEdit->close( m_filename ); if ( ret ) clearAllBookmarks(); return ret; } // void Editor::setSyntaxHighlight(bool activate) { if ( activate && !QString(":c:cpp:cc:h:hpp:").contains( ":"+m_filename.section(".", -1, -1).toLower()+":" ) ) return; m_textEdit->setSyntaxHighlight(activate); } // bool Editor::save() { return m_textEdit->save( m_filename, m_lastModified); } // void Editor::gotoLine( int line, bool moveTop ) { m_textEdit->gotoLine( line, moveTop ); } // void Editor::slotFindPrevious() { m_backward = true; if ( m_textEdit->textCursor().selectedText().length() ) { QTextCursor cursor = m_textEdit->textCursor(); cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, cursor.selectedText().length()); cursor.movePosition(QTextCursor::NoMove, QTextCursor::KeepAnchor); m_textEdit->setTextCursor(cursor); } slotFindWidget_textChanged(uiFind.editFind->text(), true); } // void Editor::slotFindNext() { m_backward = false; slotFindWidget_textChanged(uiFind.editFind->text(), true); } // void Editor::find() { autoHideTimer->stop(); m_replaceWidget->hide(); m_findWidget->show(); uiFind.editFind->setFocus(Qt::ShortcutFocusReason); if ( m_textEdit->textCursor().selectedText().length() ) uiFind.editFind->setText( m_textEdit->textCursor().selectedText() ); else uiFind.editFind->setText( m_textEdit->wordUnderCursor() ); uiFind.editFind->selectAll(); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } // void Editor::slotReplace() { bool replaced; int nbFound = 0; do { replaced = false; if( ( m_textEdit->textCursor().selectedText() == uiReplace.textFind->currentText() || ( m_textEdit->textCursor().selectedText().toLower() == uiReplace.textFind->currentText().toLower() && !uiReplace.checkCase->isChecked() ) ) && uiReplace.textFind->currentText() != uiReplace.textReplace->currentText()) { m_textEdit->textCursor().removeSelectedText(); m_textEdit->textCursor().insertText( uiReplace.textReplace->currentText() ); replaced = true; nbFound++; if( m_backward ) slotFindPrevious(); else slotFindNext(); } } while( replaced && !uiReplace.prompt->isChecked() ); uiReplace.reached->setText(tr("%1 replacement(s) made.").arg(nbFound)); uiReplace.labelWrapped->setVisible( true ); if( uiReplace.textFind->findText( uiReplace.textFind->currentText() ) == -1 ) uiReplace.textFind->addItem( uiReplace.textFind->currentText() ); if( uiReplace.textReplace->findText( uiReplace.textReplace->currentText() ) == -1 ) uiReplace.textReplace->addItem( uiReplace.textReplace->currentText() ); } // void Editor::replace() { /*ReplaceImpl *dialog = new ReplaceImpl(this, m_textEdit, m_replaceOptions); dialog->exec(); m_replaceOptions = dialog->replaceOptions(); delete dialog;*/ m_findWidget->hide(); uiReplace.labelWrapped->setVisible(false); autoHideTimer->stop(); m_replaceWidget->show(); uiReplace.textFind->setFocus(Qt::ShortcutFocusReason); if ( m_textEdit->textCursor().selectedText().length() ) uiReplace.textFind->setEditText( m_textEdit->textCursor().selectedText() ); else uiReplace.textFind->setEditText( m_textEdit->wordUnderCursor() ); uiReplace.textFind->lineEdit()->selectAll(); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } //return current selected text or word under cursor QString Editor::selection() { if ( m_textEdit->textCursor().selectedText().length() ) return ( m_textEdit->textCursor().selectedText() ); else return ( m_textEdit->wordUnderCursor() ); } // void Editor::setFocus() { m_findWidget->hide(); m_replaceWidget->hide(); m_textEdit->setFocus(Qt::OtherFocusReason); } // void Editor::findContinue() { //slotFindWidget_textChanged(uiFind.editFind->text(), true); slotFindNext(); } // void Editor::findPrevious() { slotFindPrevious(); } // void Editor::slotFindWidget_textChanged(QString text, bool fromButton) { int options = 0; autoHideTimer->stop(); if ( m_backward ) options |= QTextDocument::FindBackward; if ( uiFind.checkWholeWords->isChecked() ) options |= QTextDocument::FindWholeWords; if ( uiFind.checkCase->isChecked() ) options |= QTextDocument::FindCaseSensitively; m_textEdit->slotFind(uiFind, uiReplace, text, (QTextDocument::FindFlags)options,fromButton); if( m_textEdit->textCursor().selectedText().length() ) uiReplace.replace->setVisible( true ); else uiReplace.replace->setVisible( false ); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } // QStringList Editor::classes() { QStringList liste = m_classesMethodsList.keys(); liste.sort(); return liste; } // QStringList Editor::methodes(QString classe) { QStringList liste; foreach(QString line, m_classesMethodsList.value( classe ) ) liste += QStringList(line.section("::", 1, 1)+"::"+ line.section("::", 0, 0)); liste.sort(); QStringList liste2; foreach(QString ligne2, liste) liste2 += QStringList(ligne2.section("::", 1, 1)+"::"+ ligne2.section("::", 0, 0)); return liste2; } // void Editor::slotClassesMethodsList() { if ( !m_comboClasses ) return; int width = 0; const QList *list; list = m_mainimpl->treeClassesItems(); if ( list->isEmpty() ) return; m_comboClasses->clear(); m_classesMethodsList.clear(); for (int i = 0; i < list->size(); ++i) { ParsedItem parsedItem = list->at( i ); if ( ( parsedItem.kind == "p" || parsedItem.kind == "f" ) && parsedItem.implementation.section("|", 0, 0) == filename() ) { QString numLine = parsedItem.implementation.section("|", -1, -1); QString returnName = parsedItem.ex_cmd; if ( returnName.left( returnName.indexOf("::") ).indexOf("\t") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section("\t", 0, 0); else if ( returnName.left( returnName.indexOf("::") ).indexOf(" ") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section(" ", 0, 0); else returnName = ""; QString add = returnName+" " +parsedItem.classname+"::"+parsedItem.name+parsedItem.signature+QChar(255)+numLine; QStringList methodes = m_classesMethodsList.value(parsedItem.classname); methodes << add; if ( !parsedItem.classname.simplified().isEmpty() ) { width = qMax(width, fontMetrics().width( parsedItem.classname ) ); } m_classesMethodsList[parsedItem.classname] = methodes; } } m_comboClasses->setGeometry(m_comboClasses->x(), m_comboClasses->y(), qMin(350, width+30), m_comboClasses->height()); slotComboClasses(); return; } // bool Editor::inQuotations(int position, QString text) { int debutQuote = 0, finQuote; bool realBegin = false; do { do { debutQuote = text.indexOf("\"", debutQuote); if ( debutQuote > 0 && (text.at(debutQuote-1) == '\\' || text.at(debutQuote-1) == '\'') ) { debutQuote++; realBegin = false; } else { realBegin = true; } } while (!realBegin); finQuote = -1; if ( debutQuote != -1 ) { finQuote = debutQuote+1; bool realEnd = false; do { finQuote = text.indexOf("\"", finQuote); if ( finQuote > 0 && text.at(finQuote-1) == '\\' ) { finQuote++; realEnd = false; } else { realEnd = true; } } while (!realEnd); } if ( debutQuote!=-1 && finQuote!=-1 ) { if ( position > debutQuote && position < finQuote ) { return true; } } debutQuote = finQuote+1; } while ( debutQuote!=-1 && finQuote!=-1 ); // Idem with "'" debutQuote = 0, finQuote=0; realBegin = false; do { do { debutQuote = text.indexOf('\'', debutQuote); if ( debutQuote > 0 && (text.at(debutQuote-1) == '\\' || text.at(debutQuote-1) == '\"') ) { debutQuote++; realBegin = false; } else { realBegin = true; } } while (!realBegin); finQuote = -1; if ( debutQuote != -1 ) { finQuote = debutQuote+1; bool realEnd = false; do { finQuote = text.indexOf('\'', finQuote); if ( finQuote > 0 && (text.at(finQuote-1) == '\\' || text.at(finQuote-1) == '\"') ) { finQuote++; realEnd = false; } else { realEnd = true; } } while (!realEnd); } if ( debutQuote!=-1 && finQuote!=-1 ) { if ( position > debutQuote && position < finQuote ) { return true; } } debutQuote = finQuote+1; } while ( debutQuote!=-1 && finQuote!=-1 ); return false; } // void Editor::toggleBookmark(int line) { QTextCursor save = m_textEdit->textCursor(); int scroll = verticalScrollBar(); gotoLine( line, false ); m_textEdit->textCursor().movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); m_textEdit->textCursor().movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); QString s = m_textEdit->textCursor().block().text().simplified(); // QTextCursor cursor = m_textEdit->textCursor(); bool activate; BlockUserData *blockUserData = (BlockUserData*)cursor.block().userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = cursor.block(); } blockUserData->bookmark = !blockUserData->bookmark; cursor.block().setUserData( blockUserData ); activate = blockUserData->bookmark; m_textEdit->setTextCursor( cursor ); // //emit bookmark(this, s, QPair(activate, cursor.block())); m_mainimpl->toggleBookmark(this, s, activate, cursor.block()); m_textEdit->setTextCursor( save ); setVerticalScrollBar( scroll ); if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } // QList Editor::bookmarksList() { QList list; int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->bookmark ) list << line; } return list; } // QList Editor::breakpointsList() { QList list; int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->breakpoint ) list << block; } return list; } void Editor::displayEditorToolbar( bool b ) { if (m_editorToolbar) m_editorToolbar->setVisible( b ); } // void Editor::toggleBreakpoint(int line, QString breakpointCondition, bool isTrue) { QTextCursor save = m_textEdit->textCursor(); int scroll = verticalScrollBar(); gotoLine( line, false ); QTextCursor cursor = m_textEdit->textCursor(); BlockUserData *blockUserData = (BlockUserData*)cursor.block().userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->isTrue = false; } blockUserData->breakpoint = !blockUserData->breakpoint; blockUserData->breakpointCondition = breakpointCondition; blockUserData->isTrue = isTrue; cursor.block().setUserData( blockUserData ); m_textEdit->setTextCursor( cursor ); m_textEdit->setTextCursor( save ); setVerticalScrollBar( scroll ); emit breakpoint(shortFilename(), line, blockUserData); if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } // void Editor::emitListBreakpoints() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->breakpoint ) emit breakpoint(shortFilename(), line, blockUserData); } } // QString Editor::shortFilename() { QString name = m_filename; int pos = m_filename.lastIndexOf( "/" ); if ( pos != -1 ) name = name.mid(pos+1); return name; } // QString Editor::directory() { return m_filename.left( m_filename.length()-shortFilename().length()-1 ); } QString Editor::shortFilename(QString nomLong) { QString name = nomLong; int pos = nomLong.lastIndexOf( "/" ); if ( pos != -1 ) name = name.mid(pos+1); return name; } // QString Editor::suffixe(QString filename) { return filename.section(".", -1, -1); } // void Editor::setExecutedLine(int line) { m_textEdit->setExecutedLine(line); } // void Editor::slotModifiedEditor(bool modified) { emit editorModified(this, modified); } // // void Editor::slotComboClasses(QString text) { if ( !m_comboClasses ) return; if ( text.isEmpty() ) { m_comboClasses->clear(); m_comboClasses->addItems( classes() ); m_comboClasses->setCurrentIndex(0); text = m_comboClasses->currentText(); } if ( !classes().count() || (m_comboClasses->count() == 1 && m_comboClasses->itemText(0).simplified().isEmpty() ) ) m_comboClasses->setHidden( true ); else m_comboClasses->setHidden( false ); m_comboMethods->setHidden( !classes().count() ); m_comboMethods->clear(); int width = 0; foreach(QString line, methodes(text) ) { int numLine = QString(line.section(QChar(255), -1)).toInt(); QString methode = line.left( line.indexOf(QChar(255)) ); methode.remove('\r').remove('\n'); QString typeRetour = " : " + methode.section(" ", 0, 0); if ( typeRetour.contains("::") ) typeRetour = ""; methode = methode.section("::", 1, 1); int last = methode.lastIndexOf(":"); if ( last != 1 && !inQuotations(last, methode) ) methode = methode.left( last ); methode += typeRetour; QTextBlock block; int n=1; for (block = m_textEdit->document()->begin(); block.isValid() && n != numLine; block = block.next(), n++ ) ; m_comboMethods->addItem(methode, QVariant(block.text())); width = qMax(width, fontMetrics().width( methode ) ); } m_comboMethods->setGeometry(m_comboClasses->x()+m_comboClasses->width()+6, m_comboMethods->y(), qMin(500, width+30), m_comboMethods->height()); m_comboMethods->setCurrentIndex(0); } // void Editor::slotComboMethods(int index) { m_textEdit->gotoLine(1, false); QString s = m_comboMethods->itemData(index).toString(); m_textEdit->find( s ); gotoLine( m_textEdit->currentLineNumber(), true); } // void Editor::setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g) { m_textEdit->setSyntaxColors(a, b, c, d, e, f, g); } // void Editor::slotOtherFile() { m_mainimpl->openFile( QStringList(m_nameOtherFile) ); } // void Editor::setNameOtherFile(QString oldName, QString newName) { /* When a file is renamed in files browser (by a right-click the "Rename..."), this function is called on all editors to rename the other file. */ if ( oldName != m_nameOtherFile ) return; updateOtherFile(newName); } // void Editor::methodsList() { if ( NULL == m_comboMethods ) { QApplication::beep(); } else { QLineEdit* pLineEdit = m_comboMethods->lineEdit(); pLineEdit->setSelection(0, pLineEdit->text().count()); m_comboMethods->showPopup(); m_comboMethods->setFocus(); } } // void Editor::setTextColor(QColor textColor) { m_textEdit->setTextColor(textColor); } // void Editor::slotMessagesBuild(QString list, QString directory) { /* If your language is not translated in QDevelop and if g++ display the errors and warnings in your language, modify the two strings below "error" and "warning" to adapt in your language. Also have a look at logbuild.cpp */ bool messageContainsWarnings = false; bool messageContainsErrors = false; foreach(QString message, list.split("\n")) { if ( !message.isEmpty() ) { bool error = false; message.remove( "\r" ); QString filename; uint numLine; if ( LogBuild::containsError(message, filename, numLine) ) { // Error error = true; messageContainsErrors = true; if( message.toLower().contains("error") ) message = message.section("error", 1).simplified(); else if( message.toLower().contains( LogBuild::tr("error").toLower() ) ) message = message.section(LogBuild::tr("error"), 1).simplified(); } else if ( LogBuild::containsWarning(message, filename, numLine) ) { // Warning error = false; messageContainsWarnings = true; if( message.toLower().contains("warning") ) message = message.section("warning", 1).simplified(); else if( message.toLower().contains( LogBuild::tr("warning").toLower() ) ) message = message.section(LogBuild::tr("warning"), 1).simplified(); } QString absoluteName = QDir(directory).absoluteFilePath(filename); if( absoluteName.endsWith("-qdeveloptmp.cpp") ) absoluteName = absoluteName.section("-qdeveloptmp.cpp", 0, 0) + ".cpp"; if( absoluteName != m_filename ) continue; if( message.startsWith(":") ) message = message.section(":", 1).simplified(); uint line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { if( line != numLine ) continue; BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = block; } if( error && !blockUserData->errorString.contains(message) ) blockUserData->errorString += message + "\n"; else if( !error && !blockUserData->warningString.contains(message) ) blockUserData->warningString += message + "\n"; block.setUserData( blockUserData ); break; } } } if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); int state = 0; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next() ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = block; } if( blockUserData && !blockUserData->errorString.isEmpty() ) { state = 2; break; } else if( blockUserData && !blockUserData->warningString.isEmpty() ) state = 1; } m_mainimpl->automaticCompilationState(this, state); } void Editor::clearErrorsAndWarnings() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData ) { blockUserData->errorString = ""; blockUserData->warningString = ""; block.setUserData( blockUserData ); } } if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } void Editor::slotEndBuild() { QFile::remove( tempFilename() ); } void Editor::nextWarningError() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( line>currentLineNumber() && blockUserData && (!blockUserData->errorString.isEmpty() || !blockUserData->warningString.isEmpty()) ) { gotoLine(line, true); break; } } } void Editor::previousWarningError() { int line = currentLineNumber(); for ( QTextBlock block = m_textEdit->textCursor().block(); block.isValid(); block = block.previous(), line-- ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( lineerrorString.isEmpty() || !blockUserData->warningString.isEmpty()) ) { gotoLine(line, true); break; } } } // qdevelop-v0.28/src/main.cpp0000644000175000017500000001156211362261066014653 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "mainimpl.h" // QSplashScreen *splash = 0; // int main(int argc, char *argv[]) { QApplication app(argc, argv); splash = new QSplashScreen(QPixmap(":/divers/images/SplashQDevelop.png")); splash->setFont( QFont("Helvetica", 10) ); splash->show(); // // change the plugins path (add the installation directory) QStringList list_path ; QDir dir = QDir(qApp->applicationDirPath()+"/QtPlugins/"); list_path << dir.absolutePath () << app.libraryPaths (); app.setLibraryPaths( list_path ); // QTranslator translatorQDevelop, translatorQt; QString language = QLocale::languageToString( QLocale::system().language() ); // QStringList toOpen, args = QCoreApplication::arguments(); if (!args.isEmpty()) args.removeFirst(); bool nextArgIsLanguage = false; foreach (QString arg, args) { if (arg.simplified() == "-l") { nextArgIsLanguage = true; } else if (nextArgIsLanguage) { language = arg.simplified(); nextArgIsLanguage = false; } else { toOpen << arg; } } qApp->processEvents(); // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Interface translation"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/translations"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); // load & install QDevelop translation translatorQDevelop.load(translationsDir.absoluteFilePath("QDevelop_"+language+".qm")); if (translatorQDevelop.isEmpty()) { // Cmake workaround // (checking file existance is necessary as it will try loading other files, including "qdevelop" which might actually exist since // it is the name of the Linux binary) if (QFile::exists(QCoreApplication::applicationDirPath() + "/QDevelop_"+language+".qm")) translatorQDevelop.load(QCoreApplication::applicationDirPath() + "/QDevelop_"+language+".qm"); if (translatorQDevelop.isEmpty()) { // Qmake workaround translatorQDevelop.load(QCoreApplication::applicationDirPath() + "/../resources/translations/QDevelop_"+language+".qm"); } } if (!translatorQDevelop.isEmpty()) app.installTranslator( &translatorQDevelop ); // search, load & install Qt translation translatorQt.load(translationsDir.absoluteFilePath("qt_"+language+".qm")); if (translatorQt.isEmpty()) translatorQt.load( QLibraryInfo::location( QLibraryInfo::TranslationsPath) + "/qt_"+QLocale::system().name()+".qm" ); if (!translatorQt.isEmpty()) app.installTranslator( &translatorQt ); // MainImpl main; main.setGeometry(50,50, 800, 550); // QString projectName = main.loadINI(); // splash->showMessage(QObject::tr("Environment control"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.slotToolsControl(false); // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Files on editor"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); // if( !projectName.isEmpty() ) { main.openProject( projectName ); } foreach(QString s, toOpen) { if( s.right(4).toLower() == ".pro" ) { if( s.toLower() != projectName.toLower() ) main.openProject(s); break; } else main.openFile( QStringList( s ) ); } // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Plugins"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.loadPlugins(); // splash->showMessage(QObject::tr("Main Window creation"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.show(); splash->finish(&main); delete splash; splash = 0; // app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); main.checkQtDatabase(); return app.exec(); } qdevelop-v0.28/src/openfileimpl.cpp0000644000175000017500000001071311362261066016407 0ustar jlbrdjlbrd/* * Open File in Project dialog implementation * Copyright (C) 2007 Branimir Karadzic * * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include "openfileimpl.h" OpenFileImpl::OpenFileImpl(QWidget* _pParent, ProjectManager* _pProjectManager, MainImpl* _pMainImpl) : QDialog(_pParent) , m_pProjectManager(_pProjectManager) , m_pMainImpl(_pMainImpl) { setupUi(this); connect(FilterEdit, SIGNAL(textChanged(QString)), this, SLOT(slotTextChanged(QString)) ); connect(FilterEdit, SIGNAL(returnPressed()), this, SLOT(slotSelect()) ); connect(FileList, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(slotSelect()) ); FilterEdit->installEventFilter(this); QList projectsList; m_pProjectManager->childsList(0, "PROJECT", projectsList); // TODO - FileList should be regenerated based on FilterEdit string. for (int nbProjects = 0; nbProjects < projectsList.count(); nbProjects++) { QList dirSourcesList; m_pProjectManager->childsList(projectsList.at(nbProjects), "SOURCES", dirSourcesList); m_pProjectManager->childsList(projectsList.at(nbProjects), "HEADERS", dirSourcesList); m_pProjectManager->childsList(projectsList.at(nbProjects), "RESOURCES", dirSourcesList); for (int nbSrc=0; nbSrc < dirSourcesList.count(); nbSrc++) { QList filesList; m_pProjectManager->childsList(dirSourcesList.at(nbSrc), "DATA", filesList); for (int nbFic=0; nbFic < filesList.count(); nbFic++) { QString name = filesList.at(nbFic)->text(0); FileList->insertItem(0, name); } } FileList->sortItems(Qt::AscendingOrder); } FilterEdit->setFocus(); } bool OpenFileImpl::eventFilter(QObject* _pObject, QEvent* _pEvent) { if ( _pObject == FilterEdit && _pEvent->type() == QEvent::KeyPress ) { switch (static_cast(_pEvent)->key()) { case Qt::Key_Up: case Qt::Key_Down: case Qt::Key_PageDown: case Qt::Key_PageUp: QApplication::sendEvent(FileList, _pEvent); break; default: break; } } return QWidget::eventFilter(_pObject, _pEvent); } void OpenFileImpl::slotTextChanged(QString text) { QList matches = FileList->findItems(text, Qt::MatchContains); if ( 0 < matches.count() ) { FileList->setCurrentItem(matches.at(0)); } else { FileList->setItemSelected( FileList->currentItem(), false ); } } void OpenFileImpl::slotSelect() { QList selected = FileList->selectedItems(); if ( 0 < selected.count() ) { QListWidgetItem* pItem = selected.at(0); QList projectsList; m_pProjectManager->childsList(0, "PROJECT", projectsList); QString filename = pItem->text(); QString projectName = m_pProjectManager->projectFilename(projectsList.at(0)); QString projectDirectory = m_pProjectManager->projectDirectory(projectsList.at(0)); QString absoluteName = QDir(projectDirectory+"/"+filename).absolutePath(); QStringList locationsList; locationsList << absoluteName; foreach(QString dir, m_pProjectManager->dependpath(projectsList.at(0)) ) { locationsList << QDir(projectDirectory + "/" +dir + "/" + filename).absolutePath(); } m_pMainImpl->openFile( locationsList ); } accept(); } qdevelop-v0.28/src/optionsimpl.h0000644000175000017500000000505311362261066015747 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef OPTIONSIMPL_H #define OPTIONSIMPL_H #include "ui_options.h" // class CppHighlighter; class QTextCodec; // class OptionsImpl : public QDialog, public Ui::Options { Q_OBJECT public: OptionsImpl(QWidget * parent, QFont f, bool num, bool marge, bool ind, bool coloration, int tab, bool enr, bool res, QTextCharFormat pre, QTextCharFormat qt, QTextCharFormat commSimples, QTextCharFormat commMulti, QTextCharFormat guillemets, QTextCharFormat meth, QTextCharFormat cles, bool autoMask, int end, bool spaces, bool complete, QColor back, bool prompt, bool hcl, QColor lc, bool bk, // Divius: comments autoclose bool comm, // bool tc, int in, QString directory, bool m, QColor mc, bool close, QString pd, QString mo, int mi, QString ic, bool editorToolbars, bool whiteSpaces, int rightMargin, QString docDirectory, QColor textCol, bool ac, // Divius: word wrap bool ww, // Divius: autohide find/replace int findReplace, // Divius: smart click bool sc ); QFont font(); CppHighlighter *syntaxe() { return cppHighLighter; }; QColor backgroundColor(); QColor currentLineColor(); QColor matchingColor(); QColor textColor(); int mib(); private: CppHighlighter *cppHighLighter; QColor m_backgroundColor; QColor m_textColor; QColor m_colorCurrentLine; QColor m_matchingColor; void findCodecs(); void setCodecList(const QList &list, int m); QList codecs; private slots: void slotChangeColor(); void slotDefault(); void slotChooseProjectsDirectory(); void slotChoosePluginsDirectory(); void slotChooseIncludeDirectory(); void slotChooseDocumentationDirectory(); signals: }; #endif qdevelop-v0.28/src/treeclasses.h0000644000175000017500000000764611362261066015721 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TREECLASSES_H #define TREECLASSES_H #include #include #include #include #include // class QProcess; // typedef struct { QString key; QStringList parents; QString name; QString implementation; QString declaration; QString ex_cmd; QString language; QString classname; QString structname; QString enumname; QString access; QString signature; QString kind; bool markedForDelete; QString icon; } ParsedItem; Q_DECLARE_METATYPE(ParsedItem) // typedef struct { QStringList parents; QString filename; int numTempFile; QString ext; } TempProcess; // class ProjectManager; class MainImpl; // class TreeClasses : public QTreeWidget { Q_OBJECT public: TreeClasses(QWidget * parent); ~TreeClasses(); void setProjectManager( QPointer g ) { m_projectManager = g; }; void setCtagsIsPresent( bool b ) { m_ctagsPresent = b; }; void setMainImpl(MainImpl *m) { m_mainImpl=m; }; void clear(); void toDB(QString projectDirectory); void fromDB(QString projectDirectory); void setCtagsName(QString s) { m_ctagsName=s;}; const QList *treeClassesItems() { return m_treeClassesItems; }; //const QList *treeClassesItems(QString classname); QString signature(QString line); QStringList methods(QString filename, QString classname); protected: void mousePressEvent( QMouseEvent * event ); void mouseDoubleClickEvent ( QMouseEvent * event ); private: QList *m_treeClassesItems; QTreeWidgetItem *m_itemClicked; QList m_listDeletion; QTreeWidgetItem *findItem(const QTreeWidgetItem *begin, const QString text, const QString key, const bool recursive); QTreeWidgetItem *findAndCreate(QTreeWidgetItem *begin, QString pixname, QString text, QString key, bool recursive, bool update, ParsedItem parsedItem); bool m_ctagsPresent; QMap tempProcessMap; MainImpl *m_mainImpl; QPointer m_projectManager; void markForDeletion(QTreeWidgetItem *current, QString filename, QString ext, QStringList parents); void deleteMarked(QTreeWidgetItem *current); QString markForSorting(QString kind, QString text); void setSortingSymbols( QTreeWidgetItem *it, bool active, QString filename, QString ext, QStringList parents); void setTooltip(QTreeWidgetItem *item, ParsedItem parsedItem); void writeItemsInDB(const QTreeWidgetItem *it, QString parents, QSqlQuery query, QString projectDirectory); void createItemFromDB(QTreeWidgetItem *parent, QString text, QString tooltip, QString parents, ParsedItem parsedItem); QString getPathHash(QString const& pathName); QString m_ctagsName; private slots: void slotParseCtags(); void slotOpenImplementation(); void slotOpenDeclaration(); void slotRefresh(); void parse(ParsedItem parsedItem); void slotAddNewClassMethod(); void slotAddNewClassVariable(); void slotAddGetSetMethod(); public slots: void updateClasses( QString filename, QString buffer, QStringList parents, QString ext); signals: //void modifiedClasse(QString); }; #endif qdevelop-v0.28/src/mainimpl.h0000644000175000017500000002203211362261066015174 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef MAINIMPL_H #define MAINIMPL_H #include "ui_main.h" #include "debug.h" #include #include #include #include #include "treeproject.h" class QProcess; class Editor; class Build; class QComboBox; class ProjectManager; class Assistant; class Designer; class QActionGroup; class TabWidget; class FindFileImpl; class StackImpl; class InitCompletion; // typedef QPair Bookmark; Q_DECLARE_METATYPE(Bookmark) // class MainImpl : public QMainWindow, public Ui::Main { Q_OBJECT public: void automaticCompilationState(Editor *editor, int state); QList allEditors(); MainImpl(QWidget * parent = 0); ~MainImpl(); enum ExecuteVersion { ExecuteNone, ExecuteRelease, ExecuteDebug}; Editor * openFile(QStringList locationsList, int numLine=-1, bool silentMode=false, bool moveTop=false); QString loadINI(); bool saveBeforeBuild() { return m_saveBeforeBuild; }; bool openProject(QString s); QString qmakeName() { return m_qmakeName; }; QString ctagsName() { return m_ctagsName; }; QString lupdateName() { return m_lupdateName; }; QString lreleaseName() { return m_lreleaseName; }; enum EndLine { Default, Unix, Windows }; TabWidget *tabEditors() const { return m_tabEditors; }; bool ctagsIsPresent() { return m_ctagsIsPresent; }; void closeTab(int numTab); void closeOtherTab(int numTab); bool showTreeClasses() { return m_showTreeClasses; }; void toggleBookmark(Editor *editor, QString text, bool activate, QTextBlock block); QMenu *bookmarksMenu() { return menuBookmarks; }; const QList *treeClassesItems() { return treeClasses->treeClassesItems(); }; void loadPlugins(); void renameEditor(QString oldName, QString newName); void configureCompletion(QString projectDirectory); void gotoFileInProject(QString& filename); Editor * currentEditor(); Editor * givenEditor(int i); void resetProjectsDirectoriesList(); void resetDebugAfterBuild(); int mibCodec() { return m_mibCodec; } void checkQtDatabase(); InitCompletion* buildQtDatabase() { return m_buildQtDatabase; } inline void setQmakeForcedMode(const QString & mode) { actionDebug_mode->setChecked(false); actionRelease_mode->setChecked(false); if (mode == "debug") { actionDebug_mode->setChecked(true); } else if (mode == "release") { actionRelease_mode->setChecked(true); } m_lastForcedMode = mode; } inline QString qmakeForcedMode() const { return m_lastForcedMode; } private: // Functions void createConnections(); void updateActionsRecentsFiles(); void updateActionsRecentsProjects(); QString strippedName(const QString &fullFileName); void setCurrentProject(const QString &file); void setCurrentFile(const QString &file); void saveINI(); void setCrossButton(bool activate); bool modifiedEditors(); // Objects and Variables bool m_automaticCompilation; QColor m_textColor; bool m_buildQtDatabaseAsked; Build *m_builder; Debug *m_debug; ProjectManager *m_projectManager; enum { maxRecentsFiles = 10 }; QAction *actionsRecentsFiles[maxRecentsFiles]; enum { maxRecentsProjects = 10 }; QAction *actionsProjetsRecents[maxRecentsProjects]; QStringList m_projectsDirectoriesList; bool m_clean; bool m_build; Assistant *m_assistant; Designer *m_designer; QFont m_font; int m_tabStopWidth; QString m_qmakeName; QString m_makeName; QString m_makeOptions; QString m_gdbName; QString m_ctagsName; QString m_linguistName; QString m_lupdateName; QString m_lreleaseName; QString m_designerName; QString m_qtInstallHeaders; QString m_projectsDirectory; QString m_pluginsDirectory; QString m_includeDirectory; QString m_documentationDirectory; bool m_lineNumbers, m_selectionBorder, m_autoIndent, m_cppHighlighter; bool m_saveBeforeBuild; bool m_restoreOnStart; bool m_promptBeforeQuit; ExecuteVersion m_debugAfterBuild; bool m_buildAfterDebug; bool m_checkEnvironmentOnStartup; bool m_autoMaskDocks; bool m_autoCompletion; bool m_autobrackets; // Divius: comments autoclose bool m_autocomments; // bool m_match; bool m_highlightCurrentLine; bool m_ctagsIsPresent; bool m_configureCompletionNeeded; QColor m_backgroundColor; QColor m_currentLineColor; QColor m_matchingColor; EndLine m_endLine; bool m_tabSpaces; bool m_closeButtonInTabs; bool m_displayEditorToolbars; bool m_displayWhiteSpaces; int m_rightMarginLine; bool m_wordWrap; int m_hideFindReplace; QToolButton *crossButton; QPointer m_projectGroup; QPointer m_buildingGroup; QTextCharFormat m_formatPreprocessorText, m_formatQtText, m_formatSingleComments; QTextCharFormat m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords; TabWidget *m_tabEditors; FindFileImpl *m_findInFiles; StackImpl *m_stack; int m_intervalUpdatingClasses; bool m_showTreeClasses; InitCompletion *m_completion; InitCompletion *m_buildQtDatabase; QAction *actionActiveBookmark; int m_mibCodec; bool m_smartClick; //QList m_maximizedEditors; QAction *separatorOtherFile, *actionOtherFile; QHash toolbarStatus; QString m_lastForcedMode; protected: void closeEvent( QCloseEvent * event ); private slots: void slotClearAllWarningsErrors(); void slotPreviousWarningError(); void slotNextWarningError(); void slotQmake(); void slotOpen(); void slotOpenProject(); void slotSaveFile(); void slotCompleteCode(); void slotSaveFileAs(); bool slotSaveAll(); void slotBuild(bool clean=false, bool build=true, bool forceQmake=false, QString forceMode = QString()); void slotBuildRelease(); void slotBuildDebug(); void slotForgetBuildMode(); void slotNewProject(); void slotRebuild(); void slotStopBuild(); void slotClean(); void slotCut(); void slotCopy(); void slotPaste(); void slotUndo(); void slotRedo(); void slotGotoLine(); void slotSelectAll(); void slotUnindent(); void slotIndent(); void slotFind(); void slotReplace(); void slotFindContinue(); void slotFindPrevious(); void slotEndBuild(); bool slotDebug(bool executeOnly=false); void slotExecuteWithoutDebug(); void slotContinueDebug(); void slotEndDebug(); void slotMessagesDebug(QString message); void slotFindFilesActivated(QListWidgetItem *item, QListWidgetItem *); void slotDoubleClickFindLines( QListWidgetItem *item); void slotModifiedEditor(Editor *editor, bool modified); void slotStepInto(); void slotStepOver(); void slotStepOut(); void slotEditToGdb(QString); void slotOnPause(); void slotOpenRecentFile(); void slotOpenRecentProject(); void slotAbout(); void slotHelpQtWord(); void slotOptions(); void slotClickTreeFiles(QTreeWidgetItem *item, int); void slotCloseCurrentTab(); void slotPreviousTab(); void slotNextTab(); void slotOtherFile(); void slotSetFocusToEditor(); void slotToggleBreakpoint(); void slotShortcuts(); void slotFindInFiles(); void slotNewFile(); void slotToggleComment(); void slotComment(); void slotUncomment(); void slotParameters(); void slotCurrentTabChanged(int index); void slotDebugVariables( QList list); void slotAddDebugVariable(); void slotRemoveDebugVariable(); void slotToggleBookmark(); void slotActivateBookmark(QAction *action=0); void slotPreviousBookmark(); void slotNextBookmark(); void slotClearAllBookmarks(); void slotGotoMatchingBracket(); void slotSimplePlugin(); void slotTextEditPlugin(); void slotConfigPlugin(); void slotPrint(); void slotOpenFile(); void slotGotoDeclaration(); void slotGotoImplementation(); void slotMethodsList(); void slotNewQtVersion(); void slotUpdateOtherFileActions(); void on_actionEditor_mode_triggered(); void on_actionFullDocksView_triggered(); void on_actionMinimalDocksView_triggered(); public slots: void slotCompile(bool automaticCompilation=false); void slotBuildQtDatabaseEnded(); void slotShowMessage(QString message); void slotDoubleClickTreeFiles(QTreeWidgetItem *item, int); bool slotCloseAllFiles(); void slotToolsControl(bool show=true); void slotUpdateClasses(QString filename, QString buffer); bool slotCloseProject(bool hide=false); //void slotShowMaximized(Editor *editor=0); signals: void debugCommand(QString); void stopBuild(); void stopDebug(); void pauseDebug(); void resetExecutedLine(); void otherVariables(QStringList); }; #endif qdevelop-v0.28/src/addnewclassmethodimpl.cpp0000644000175000017500000001755211362261066020307 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassmethodimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include // AddNewClassMethodImpl::AddNewClassMethodImpl( MainImpl * parent, TreeClasses *treeClasses, QString implementation, QString declaration, QString classname) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_implementation(implementation), m_declaration(declaration), m_classname(classname) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private" << "public slots" << "protected slots" << "private slots" << "signals"); returnType->addItems(QStringList() << "void" << "bool" << "char" << "short" << "long" << "int" << "signed" << "unsigned " << "float" << "double" << "QString" ); setWindowTitle ( tr("Add New Method in class %1").arg(m_classname) ); } // void AddNewClassMethodImpl::on_okButton_clicked() { QString l_methodName = methodName->text().simplified(); if( l_methodName.isEmpty() ) return; QString l_parameters = parameters->text().simplified(); if ( !l_parameters.startsWith( "(" ) ) l_parameters = "("+l_parameters; if ( !l_parameters.endsWith( ")" ) ) l_parameters = l_parameters+")"; QString l_scope = scope->currentText(); QString l_returnType = returnType->currentText(); bool l_Inline = Inline->isChecked(); bool l_Virtual = Virtual->isChecked(); bool l_Static = Static->isChecked(); bool l_Pure = Pure->isChecked(); if ( m_implementation.section("|", 0, 0).isEmpty() && !l_Inline && !l_Pure && l_scope.simplified() != "signals" ) { QMessageBox::warning(this, "QDevelop", tr("An implementation file is required."), tr("Cancel") ); return; } // Find if method already exists in class (same name and same signature). QStringList listMethods = m_treeClasses->methods(m_declaration.section("|", 0, 0), m_classname); foreach(QString s, listMethods) { QString sign = l_returnType+" "+l_methodName+l_parameters; if ( s.contains(l_methodName) && m_treeClasses->signature(s) == m_treeClasses->signature(sign) ) { QMessageBox::warning(this, "QDevelop", tr("%1 already exists in class %2.").arg(l_methodName+m_treeClasses->signature(sign), m_classname), tr("Cancel") ); return; } } // First, add in declaration file or editor // The file is perhaps already opened. Find filename in tabs. QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, insertAfterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(insertAfterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } if ( l_Pure || l_Inline || l_scope.simplified() == "signals" ) accept(); // Now, add in implementation file or editor if ( l_parameters.contains( "=" ) ) { QString formattedParams; foreach(QString param, l_parameters.remove("(").remove(")").split(",") ) { param = param.simplified(); param = param.section("=", 0, 0); formattedParams += " " + param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.simplified().lastIndexOf(",") ); l_parameters ="(" + formattedParams + ")"; } editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } insertedText = l_returnType + " " + m_classname + "::" + l_methodName + l_parameters; insertedText += "\n{\n\t// TODO\n}\n"; if ( editor ) { // Write content in opened editor lines = editor->toPlainText().split("\n"); insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, write content in file on disk QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } accept(); } qdevelop-v0.28/src/tabwidget.cpp0000644000175000017500000001626411362261066015705 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include "tabwidget.h" #include "mainimpl.h" #include "editor.h" // TabWidget::TabWidget(MainImpl *parent) : QTabWidget(parent), m_mainImpl( parent ) { setMouseTracking( true ); cross = new QToolButton(this); cross->hide(); cross->setIcon( QIcon(":/toolbar/images/cross.png") ); connect(cross, SIGNAL(clicked()), this, SLOT(slotCloseTab()) ); cross->setGeometry(0,0,15,15); tabBar()->installEventFilter(this); m_clickedItem = -1; m_closeButtonInTabs = true; } // TabWidget::~TabWidget() {} // bool TabWidget::eventFilter(QObject *obj, QEvent *event) { if (obj==tabBar()) { // this code handles the tab movement if (event->type() == QEvent::Leave) { QPoint point = cross->mapToGlobal( QPoint(0, 0) ); QRect rect(point.x(), point.y(), cross->width(), cross->height() ); if ( !rect.contains( QCursor::pos() ) ) cross->hide(); } else if (event->type() == QEvent::HoverMove && m_closeButtonInTabs ) { QHoverEvent *mouseEvent = static_cast(event); mousePos = mouseEvent->pos(); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { m_clickedItem= i; break; } } cross->setGeometry(tabBar()->tabRect(m_clickedItem).x()+tabBar()->tabRect(m_clickedItem).width()-cross->width()-5, //tabBar()->height()-(tabBar()->tabRect(m_clickedItem).height()/2), 5, cross->width(), cross->height()); cross->show(); } else if (event->type() == QEvent::MouseButtonRelease ) { qApp->restoreOverrideCursor(); } else if (event->type() == QEvent::MouseButtonPress ) { QMouseEvent *mouseEvent = static_cast(event); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { m_clickedItem = i; break; } } if ( mouseEvent->button() == Qt::LeftButton ) qApp->setOverrideCursor( Qt::OpenHandCursor ); if ( mouseEvent->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); connect(menu->addAction(QIcon(":/toolbar/images/cross.png"), tr("Close Tab")), SIGNAL(triggered()), this, SLOT(slotCloseTab()) ); connect(menu->addAction(QIcon(":/toolbar/images/fileclose.png"), tr("Close Other Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseOtherTab()) ); connect(menu->addAction(QIcon(":/toolbar/images/fileclose.png"), tr("Close All Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseAllTab()) ); menu->exec(mouseEvent->globalPos()); delete menu; } } else if (event->type() == QEvent::MouseMove ) { QMouseEvent *mouseEvent = static_cast(event); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { if ( swapTabs(i, m_clickedItem) ) { setCurrentWidget(widget(i)); update(); int x; if ( !tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { if ( tabBar()->tabRect(m_clickedItem).x() < tabBar()->tabRect(i).x() ) x = tabBar()->tabRect(i).x(); else x = tabBar()->tabRect(i).x()+(tabBar()->tabRect(i).width()-(qAbs(tabBar()->tabRect(i).width()-tabBar()->tabRect(m_clickedItem).width()))); QPoint point = QPoint( x, mouseEvent->pos().y() ); point = widget(i)->mapToGlobal( point ); m_clickedItem = i; QCursor::setPos ( point.x(), QCursor::pos().y() ); } m_clickedItem = i; break; } } } } } return QTabWidget::eventFilter( obj, event); } /** * \brief set the tooltip of a recently inserted tab * * When a new tab is inserted, a tooltip is set to that tab. * In the past this code was in the event filter, which worked * until Qt 4.4, but since it triggers an infinite loop. * * This is also the correct way of handling this. * \since 0.26 */ void TabWidget::tabInserted ( int index ) { Editor *editor = m_mainImpl->givenEditor(index); QString filename; if( editor ) filename = editor->filename(); tabBar()->setTabToolTip(index,filename); } // void TabWidget::setCloseButtonInTabs(bool b) { m_closeButtonInTabs = b; if( !m_closeButtonInTabs ) cross->hide(); } // bool TabWidget::swapTabs(int index1, int index2) { if (index1==index2) return false; int t1 = qMin(index1,index2); int t2 = qMax(index1,index2); index1=t1; index2=t2; QString name1 = tabBar()->tabText(index1); QString name2 = tabBar()->tabText(index2); QWidget *editor1 = widget(index1); QWidget *editor2 = widget(index2); removeTab(index2); removeTab(index1); insertTab(index1,editor2,name2); insertTab(index2,editor1,name1); return true; } // void TabWidget::slotCloseTab() { cross->hide(); m_mainImpl->closeTab( m_clickedItem ); } // void TabWidget::slotCloseAllTab() { m_mainImpl->slotCloseAllFiles( ); } // void TabWidget::slotCloseOtherTab() { m_mainImpl->closeOtherTab( m_clickedItem ); } // // kate: space-indent on; tab-indent off; tab-width 4; indent-width 4; mixedindent off; indent-mode cstyle; // kate: end-of-line: unix qdevelop-v0.28/src/assistant.cpp0000644000175000017500000000564011362261066015740 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "assistant.h" #include "mainimpl.h" #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // Assistant::Assistant() { process = new QProcess( this ); socket = new QTcpSocket( this ); } // Assistant::~Assistant() { if ( process->state() == QProcess::Running ) { process->terminate(); } } // void Assistant::showQtWord(QString className, QString word) { QString lu; QString doc = QDir::cleanPath( m_documentationDirectory ) + "/html/"; if ( process->state() == QProcess::NotRunning ) { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) process->start(m_assistantName, QStringList() << "-enableRemoteControl" ); else { process->start(m_assistantName, QStringList() << "-server" ); process->waitForFinished(3000); lu = process->readAll(); if ( lu.isEmpty() ) { QMessageBox::information(0, "QDevelop", QObject::tr("Unable to start Assistant !") ); return; } else { m_port = lu.toUShort(); socket->connectToHost( "localhost", m_port ); } } } QTextStream os( socket ); if( !word.isEmpty() ) { if( className == word ) { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) { QTextStream str(process); str << QString("activateIdentifier "+className) << endl; } else os << doc+className.toLower()+".html" << "\n"; } else { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) { if (!className.isEmpty()) { QTextStream str(process); str << QString("activateIdentifier "+className+"::"+word) << endl; } else { QTextStream str(process); str << QString("activateKeyword "+word) << endl; } } else os << doc+className.toLower()+".html#"+word << "\n"; } } if( m_qVersion.left(5).remove(".").toInt() < 440 ) os.flush(); } qdevelop-v0.28/src/designer.h0000644000175000017500000000255411362261066015175 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DESIGNER_H #define DESIGNER_H // #include // class MainImpl; class QProcess; class QTcpSocket; // class Designer : public QObject { public: Designer(); ~Designer(); void openUI(QString file); void setName( QString s ) { m_designerName = s; }; // protected: // private: QProcess *process; QTcpSocket *socket; QString m_location; quint16 m_port; QString m_designerName; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/addscopeimpl.cpp0000644000175000017500000000222111362261066016363 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addscopeimpl.h" #include "projectmanager.h" #include #include #include // AddScopeImpl::AddScopeImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); } // qdevelop-v0.28/src/findfileimpl.cpp0000644000175000017500000001525211362261066016371 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "findfileimpl.h" #include #include #include #include #include #include #include // FindFileImpl::FindFileImpl( QWidget * parent, QStringList directories, QListWidget *listResult, QListWidget *findLines) : QDialog(parent), m_parent(parent), m_listResult(listResult), m_listLines(findLines) { setupUi(this); // BK - store last entered search on the top. textFind->setInsertPolicy(QComboBox::InsertAtTop); textReplace->setInsertPolicy(QComboBox::InsertAtTop); for (int i=0; iaddItem(directories.at(i)+"/"); //initialize the variable used to remember where we are in the recursive search algorithm m_recursiveDepth=0; } // void FindFileImpl::setDefaultWord( QString s) { defaultWord=s; } // void FindFileImpl::showEvent(QShowEvent* _pEvent) { // BK - put focus on textFind and select previous search word textFind->setFocus(); QLineEdit* pLineEdit = textFind->lineEdit(); //set the default word if existing if(!defaultWord.isEmpty()) { pLineEdit->setText(defaultWord); defaultWord.clear(); } //select the displayed word pLineEdit->setSelection(0, pLineEdit->text().count()); QWidget::showEvent(_pEvent); } // void FindFileImpl::on_chooseDirectoryButton_clicked() { QString s = QFileDialog::getExistingDirectory( m_parent, tr("Choose a directory"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel clicked return; } comboFindIn->addItem(s); comboFindIn->setCurrentIndex( comboFindIn->count()-1 ); } // void FindFileImpl::on_findButton_clicked() { // BUG when button Find/Close is pressed, textFind doesn't remember last entered string. if ( !comboFindIn->count() || textFind->currentText().isEmpty() ) return; if ( findButton->text() == tr("&Find") ) { if ( textFind->findText( textFind->currentText() ) == -1 ) { textFind->addItem( textFind->currentText() ); } findButton->setText(tr("&Stop")); closeButton->setEnabled( false ); m_stop = false; m_listResult->clear(); m_listLines->clear(); } else { findButton->setText(tr("&Find")); closeButton->setEnabled( true ); m_stop = true; } find( comboFindIn->currentText() ); if ( m_listResult->count() ) { m_listResult->setItemSelected( m_listResult->item(0), true); m_listLines->addItems( m_listResult->item(0)->data(Qt::UserRole).toStringList() ); } findButton->setText(tr("&Find")); closeButton->setEnabled( true ); } // void FindFileImpl::find( QString directory ) { //save the folder only if the search is just beginning if(m_recursiveDepth==0) { m_searchDirectory=directory; } m_recursiveDepth++; //search is one-level deeper QDir dir(directory); QString filterNames = comboFileTypes->currentText(); filterNames.remove(" "); QFileInfoList list = dir.entryInfoList(filterNames.split(";"), QDir::AllDirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); foreach(QFileInfo fileInfo, list) { qApp->processEvents(); if ( m_stop ) return; if ( fileInfo.isFile() ) { findInFile( fileInfo.absoluteFilePath() ); } else if ( checkRecursive->isChecked() )// Directory { find( fileInfo.absoluteFilePath() ); } } //search is one-level less deep m_recursiveDepth--; } // void FindFileImpl::findInFile( QString filename ) { QFile file(filename); bool replace = checkReplace->isChecked(); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QString tempFileName = QDir::tempPath() + QDir::separator() + "qdtemp-" + QDateTime::currentDateTime().toString("yyMMddmmss") + QFileInfo(filename).fileName(); QFile tempFile(tempFileName); QTextStream tempStream; if (replace) { if (!tempFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { qDebug() << tr("Cannot open temporary file %1").arg(tempFileName); replace = false; } else { tempStream.setDevice(&tempFile); } } // QRegExp exp; if ( checkWholeWords->isChecked() ) exp.setPattern( "\\b"+textFind->currentText()+"\\b"); else exp.setPattern( textFind->currentText()); exp.setCaseSensitivity((Qt::CaseSensitivity) checkCase->isChecked()); // QTextStream in(&file); int numLine = 0; QStringList lines; while (!in.atEnd()) { numLine++; QString line = in.readLine(); if (replace) { line = line.replace(exp, textReplace->currentText()); tempStream << line << endl; } if ( line.contains(exp) ) { lines << tr("Line")+" "+QString::number(numLine)+" : "+line; } } if (tempFile.isOpen()) tempFile.close(); file.close(); if (replace) { QFile::remove(filename); QFile::copy(tempFileName, filename); QFile::remove(tempFileName); } if ( lines.count() ) { //display only the relative path m_listResult->addItem( tr("File")+" : "+filename.mid(m_searchDirectory.size()) ); QListWidgetItem *item = m_listResult->item(m_listResult->count()-1); item->setData(Qt::UserRole, QVariant(lines) ); //complete filename (used in slotDoubleClickFindLines) item->setData(Qt::UserRole+1, QVariant(filename) ); } } // qdevelop-v0.28/src/addexistantimpl.h0000644000175000017500000000256011362261066016564 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDEXISTANT_H #define ADDEXISTANT_H #include "ui_addexistant.h" // class ProjectManager; // class AddExistantImpl : public QDialog, public Ui::AddExistant { Q_OBJECT public: AddExistantImpl(ProjectManager * parent = 0); public slots: void slotComboProjects(QString projectName); private: ProjectManager *m_projectManager; QString m_projectDirectory; private slots: void slotAccept(); void slotFilesChoice(); void slotLocationChoice(); }; #endif qdevelop-v0.28/src/registersimpl.h0000644000175000017500000000055611362261066016266 0ustar jlbrdjlbrd#ifndef REGISTERSIMPL_H #define REGISTERSIMPL_H // #include #include "ui_registers.h" // class RegistersImpl : public QWidget, public Ui::Registers { Q_OBJECT public: void registers(QString regs); RegistersImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: void on_applyButton_clicked(); signals: void debugCommand(QString); }; #endif qdevelop-v0.28/src/lineedit.cpp0000644000175000017500000000210411362261066015514 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "lineedit.h" // LineEdit::LineEdit( QWidget* parent ) : QLineEdit( parent ) { } // void LineEdit::mousePressEvent ( QMouseEvent * ) { selectAll(); } // qdevelop-v0.28/src/openfileimpl.h0000644000175000017500000000302711362261066016054 0ustar jlbrdjlbrd/* * Open File in Project dialog implementation * Copyright (C) 2007 Branimir Karadzic * * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef __OPENFILEIMPL_H__ #define __OPENFILEIMPL_H__ #include "ui_openfile.h" #include "mainimpl.h" #include "projectmanager.h" class OpenFileImpl : public QDialog, public Ui::OpenFile { Q_OBJECT public: OpenFileImpl(QWidget* _pParent, ProjectManager* _pProjectManager, MainImpl* _pMainImpl); bool eventFilter(QObject* _pObject, QEvent* _pEvent); private: ProjectManager* m_pProjectManager; MainImpl* m_pMainImpl; private slots: void slotTextChanged(QString text); void slotSelect(); }; #endif // __OPENFILEIMPL_H__ qdevelop-v0.28/src/addsetgetimpl.cpp0000644000175000017500000001612411362261066016554 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addsetgetimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include #include // AddSetGetImpl::AddSetGetImpl(MainImpl * parent, TreeClasses *treeClasses, QString declaration, QString implementation, QString classname, QString type, QString variableName) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_declaration(declaration), m_implementation(implementation), m_classname(classname), m_type(type), m_variableName(variableName) { setupUi(this); groupBox->setTitle( groupBox->title() + " " + m_variableName ); setName->setText( "set"+m_variableName.toUpper().left(1)+m_variableName.mid(1) ); getName->setText( "get"+m_variableName.toUpper().left(1)+m_variableName.mid(1) ); } // void AddSetGetImpl::on_okButton_clicked() { if ( get->isChecked() && getName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The get method name is empty", tr("Cancel") ); return; } if ( set->isChecked() && setName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The set method name is empty", tr("Cancel") ); return; } // Add get/set methods QString insertedText; if ( get->isChecked() ) { if ( getInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\t" + m_type + " " + getName->text() + "() { return " + m_variableName + "; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\t" + m_type + " " + getName->text() + "();"; insertInDeclaration("public", insertedText); insertedText = m_type + " " + m_classname+"::" + getName->text() + "()\n{\n\treturn " + m_variableName + ";\n}\n"; insertInImplementation(insertedText); } } if ( set->isChecked() ) { if ( setInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\tvoid " + setName->text() + "( "+m_type+" value) { " + m_variableName + " = value; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\tvoid " + setName->text() + "( "+m_type+" value);"; insertInDeclaration("public", insertedText); insertedText = "void " + m_classname+"::"+setName->text() + "("+m_type+" value)\n{\n\t" + m_variableName + " = value;\n}\n"; insertInImplementation(insertedText); } } accept(); } // void AddSetGetImpl::insertInDeclaration(QString scope, QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, afterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(afterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } // void AddSetGetImpl::insertInImplementation(QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, get content from file QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } qdevelop-v0.28/src/shortcutsimpl.h0000644000175000017500000000237711362261066016320 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SHORTCUTSIMPL_H #define SHORTCUTSIMPL_H #include "ui_shortcuts.h" // class MainImpl; // class ShortcutsImpl : public QDialog, public Ui::Shortcuts { Q_OBJECT public: ShortcutsImpl(QWidget * parent); private: MainImpl *m_mainImpl; void initTable(MainImpl *main); private slots: void slotAccept(); void slotDefault(); signals: }; #endif qdevelop-v0.28/src/toolscontrolimpl.cpp0000644000175000017500000002250011362261066017344 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "toolscontrolimpl.h" #include "ui_warning.h" #include "misc.h" // #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // ToolsControlImpl::ToolsControlImpl( QWidget * parent, Qt::WFlags f) : QDialog(parent, f) { QString suffix; #ifdef Q_OS_WIN32 suffix = ".exe"; QChar dirDelimiter = '\\'; #else if ( QFileInfo("/etc/debian_version").exists() ) suffix = "-qt4"; QChar dirDelimiter = '/'; #endif setupUi(this); QSettings settings( getQDevelopPath() + "qdevelop.ini" , QSettings::IniFormat); settings.beginGroup("Options"); QString bindir = QLibraryInfo::location( QLibraryInfo::BinariesPath ); bindir.append( dirDelimiter ); qmake->setText( settings.value("m_qmakeName", bindir+"qmake"+suffix).toString() ); lupdate->setText ( settings.value("m_lupdateName" , bindir+"lupdate" +suffix).toString() ); lrelease->setText( settings.value("m_lreleaseName", bindir+"lrelease"+suffix).toString() ); #ifdef Q_OS_MACX linguist->setText( settings.value("m_linguistName", bindir+"Linguist.app").toString() ); designer->setText( settings.value("m_designerName", bindir+"Designer.app").toString() ); assistant->setText( settings.value("m_assistantName", bindir+"Assistant.app").toString() ); #else linguist->setText( settings.value("m_linguistName", bindir+"linguist"+suffix).toString() ); designer->setText( settings.value("m_designerName", bindir+"designer"+suffix).toString() ); assistant->setText( settings.value("m_assistantName", bindir+"assistant"+suffix).toString() ); #endif #ifdef Q_OS_WIN32 make->setText( settings.value("m_makeName").toString() ); gdb->setText( settings.value("m_gdbName").toString() ); ctags->setText( settings.value("m_ctagsName").toString() ); #else make->setText( settings.value("m_makeName", "/usr/bin/make").toString() ); gdb->setText( settings.value("m_gdbName", "/usr/bin/gdb").toString() ); ctags->setText( settings.value("m_ctagsName", "/usr/bin/ctags").toString() ); #endif checkEnvironmentOnStartup->setChecked( settings.value("m_checkEnvironmentOnStartup", true).toBool() ); settings.endGroup(); } // void ToolsControlImpl::on_qmakeLocation_clicked() { chooseLocation( qmake ); } // void ToolsControlImpl::on_makeLocation_clicked() { chooseLocation( make ); } // void ToolsControlImpl::on_gdbLocation_clicked() { chooseLocation( gdb ); } // void ToolsControlImpl::on_ctagsLocation_clicked() { chooseLocation( ctags ); } // void ToolsControlImpl::chooseLocation(QLineEdit *dest) { QString s = QFileDialog::getOpenFileName( this, tr("Please select the program"), QDir::cleanPath(dest->text()), "*" ); if ( !s.isEmpty() ) // Ok clicked { dest->setText( QDir::toNativeSeparators ( s ) ); } } // void ToolsControlImpl::on_test_clicked() { toolsControl(); } // bool ToolsControlImpl::toolsControl() { bool result = true; qmakeIcon->setPixmap( QPixmap(":/divers/images/good.png") ); makeIcon->setPixmap( QPixmap(":/divers/images/good.png") ); gdbIcon->setPixmap( QPixmap(":/divers/images/good.png") ); ctagsIcon->setPixmap( QPixmap(":/divers/images/good.png") ); linguistIcon->setPixmap( QPixmap(":/divers/images/good.png") ); lupdateIcon->setPixmap( QPixmap(":/divers/images/good.png") ); lreleaseIcon->setPixmap( QPixmap(":/divers/images/good.png") ); designerIcon->setPixmap( QPixmap(":/divers/images/good.png") ); assistantIcon->setPixmap( QPixmap(":/divers/images/good.png") ); // Control external tools QString lu; QProcess *testqmake = new QProcess(this); testqmake->start(qmake->text(), QStringList("-v")); testqmake->waitForFinished(5000); lu = testqmake->readAll(); m_qVersion = lu.section("Using Qt version", 1, 1).section("in ", 0, 0).simplified(); if ( lu.remove(":").left(15) != "QMake version 2" ) { qmakeIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } delete testqmake; // //m_qtInstallHeaders = QLibraryInfo::location( QLibraryInfo::HeadersPath ); // make control QProcess *testMake = new QProcess(this); testMake->start(make->text(), QStringList("-v")); testMake->waitForFinished(5000); lu = testMake->readAll(); if ( !lu.toLower().contains( "make" ) ) { makeIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testMake->waitForFinished(5000); testMake->terminate(); delete testMake; // gdb control QProcess *testGdb = new QProcess(this); testGdb->start(gdb->text(), QStringList("-v")); testGdb->waitForFinished(5000); lu = testGdb->readAll(); if ( lu.left(7) != "GNU gdb" ) { gdbIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testGdb->waitForFinished(5000); testGdb->terminate(); delete testGdb; // ctags control // ctags control QProcess *testCtags = new QProcess(this); testCtags->start(ctags->text(), QStringList("--version")); testCtags->waitForFinished(5000); lu = testCtags->readAll(); m_ctagsIsPresent = true; if ( lu.isEmpty() ) { if (testCtags->error() == QProcess::UnknownError) { QMessageBox::warning(this, "QDevelop", tr("Ctags was detected in path %1, but this version is too old.").arg(ctags->text()) , tr("Ok") ); } m_ctagsIsPresent = false; ctagsIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testCtags->waitForFinished(5000); testCtags->terminate(); delete testCtags; // // linguist control QString s = linguist->text(); if ( !QFile::exists( s ) ) { linguistIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // lupdate control s = lupdate->text(); if ( !QFile::exists( s ) ) { lupdateIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // lrelease control s = lrelease->text(); if ( !QFile::exists( s ) ) { lreleaseIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // designer control s = designer->text(); if ( !QFile::exists( s ) ) { designerIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // assistant control s = assistant->text(); if ( !QFile::exists( s ) ) { assistantIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } return result; } // void ToolsControlImpl::on_buttonBox_clicked(QAbstractButton * button ) { // we only deal with "ok" and "cancel" clicks, all others are ignored if (buttonBox->button(QDialogButtonBox::Cancel) == button) { reject(); return; } else if (buttonBox->button(QDialogButtonBox::Ok) != button) return; QSettings settings( getQDevelopPath() + "qdevelop.ini" , QSettings::IniFormat); settings.beginGroup("Options"); settings.setValue("m_qmakeName", qmake->text()); settings.setValue("m_makeName", make->text()); settings.setValue("m_ctagsName", ctags->text()); settings.setValue("m_gdbName", gdb->text()); settings.setValue("m_linguistName", linguist->text()); settings.setValue("m_lreleaseName", lrelease->text()); settings.setValue("m_lupdateName", lupdate->text()); settings.setValue("m_designerName", designer->text()); settings.setValue("m_assistantName", assistant->text()); settings.setValue("m_checkEnvironmentOnStartup", checkEnvironmentOnStartup->isChecked()); settings.endGroup(); accept(); } // void ToolsControlImpl::on_linguistLocation_clicked() { chooseLocation( linguist ); } // void ToolsControlImpl::on_lupdateLocation_clicked() { chooseLocation( lupdate ); } // void ToolsControlImpl::on_lreleaseLocation_clicked() { chooseLocation( lrelease ); } // void ToolsControlImpl::on_designerLocation_clicked() { chooseLocation( designer ); } // void ToolsControlImpl::on_assistantLocation_clicked() { chooseLocation( assistant ); } QString ToolsControlImpl::qVersion() { if( m_qVersion.isEmpty() ) //return QString(qVersion()).left(5); return QString(QT_VERSION_STR).left(5); else return m_qVersion; } qdevelop-v0.28/src/addnewclassmethodimpl.h0000644000175000017500000000272611362261066017751 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSMETHODIMPL_H #define ADDNEWCLASSMETHODIMPL_H // #include "ui_addnewclassmethod.h" // class MainImpl; class TreeClasses; // class AddNewClassMethodImpl : public QDialog, public Ui::AddNewClassMethod { Q_OBJECT public: AddNewClassMethodImpl( MainImpl * parent, TreeClasses *treeClasses, QString implementation, QString declaration, QString classname); private slots: void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QString m_implementation; QString m_declaration; QString m_classname; }; #endif qdevelop-v0.28/src/addnewclassimpl.h0000644000175000017500000000272611362261066016550 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSIMPL_H #define ADDNEWCLASSIMPL_H #include "ui_addnewclass.h" class ProjectManager; class AddNewClassImpl : public QDialog, public Ui::AddNewClass { Q_OBJECT public: AddNewClassImpl(ProjectManager * parent); private slots: void on_okButton_clicked(); void on_className_textChanged(QString ); void on_directoryButton_clicked(); public slots: void on_comboProjects_currentIndexChanged(int index); private: ProjectManager *m_projectManager; void control(); QString templateSourceImpl(); QString templateHeaderImpl(); }; #endif qdevelop-v0.28/src/assistant.h0000644000175000017500000000312611362261066015402 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ASSISTANT_H #define ASSISTANT_H // #include // class MainImpl; class QProcess; class QTcpSocket; // class Assistant : public QObject { Q_OBJECT public: Assistant(); ~Assistant(); void showQtWord(QString className, QString word); void setName( QString s ) { m_assistantName = s; }; void setdocumentationDirectory( QString s ) { m_documentationDirectory = s; }; void setqVersion(QString s) { m_qVersion = s; }; // protected: // private: QProcess *process; QTcpSocket *socket; QString m_location; quint16 m_port; QString m_assistantName; QString m_documentationDirectory; QString m_qVersion; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/newprojectimpl.h0000644000175000017500000000314011362261066016427 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef NEWPROJECTIMPL_H #define NEWPROJECTIMPL_H #include "ui_newproject.h" #include // class ProjectManager; class MainImpl; // class NewProjectImpl : public QDialog, public Ui::NewProject { Q_OBJECT public: NewProjectImpl(QWidget * parent, QString s); QString absoluteProjectName() { return m_absoluteProjectName; } QString filename() { return m_filename; } public slots: private: QString m_projectLocation; QString m_absoluteProjectName; QString m_filename; MainImpl *m_mainImpl; private slots: void on_okButton_clicked(); void on_dialog_clicked(bool checked); void on_mainwindow_clicked(bool checked); void slotChooseDirectory(); void slotLabel(); }; #endif qdevelop-v0.28/src/mainimpl.cpp0000644000175000017500000027561011362261066015543 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #define QD qDebug() << __FILE__ << __LINE__ << ":" // #include "mainimpl.h" #include "editor.h" #include "build.h" #include "debug.h" #include "ui_about.h" #include "ui_warning.h" #include "parametersimpl.h" #include "findfileimpl.h" #include "openfileimpl.h" #include "shortcutsimpl.h" #include "projectmanager.h" #include "assistant.h" #include "designer.h" #include "optionsimpl.h" #include "newprojectimpl.h" #include "cpphighlighter.h" #include "tabwidget.h" #include "stackimpl.h" #include "toolscontrolimpl.h" #include "InitCompletion.h" #include "pluginsinterfaces.h" #include "misc.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // #define PROJECT_NAME "QDevelop" #define VERSION "0.28-2" MainImpl::MainImpl(QWidget * parent) : QMainWindow(parent) { setupUi(this); setStatusBar( false ); m_saveBeforeBuild = true; m_restoreOnStart = true; m_projectManager = 0; m_debug = 0; m_debugAfterBuild = ExecuteNone; m_buildAfterDebug = false; m_checkEnvironmentOnStartup = true; m_endLine = Default; m_tabSpaces = false; m_autoCompletion = true; m_autobrackets = true; m_autocomments = true; m_match = true; m_highlightCurrentLine = true; m_backgroundColor = Qt::white; m_textColor = Qt::black; m_promptBeforeQuit = false; m_currentLineColor = QColor(215,252,255); m_matchingColor = Qt::red; m_findInFiles = 0; m_stack = 0; m_intervalUpdatingClasses = 5; m_showTreeClasses = true; m_completion = 0; m_projectsDirectory = QDir::homePath(); m_closeButtonInTabs = false; m_wordWrap = false; m_assistant = 0; m_designer = 0; crossButton = 0; m_pluginsDirectory = ""; m_includeDirectory = QLibraryInfo::location( QLibraryInfo::HeadersPath ); m_documentationDirectory = QLibraryInfo::location( QLibraryInfo::DocumentationPath ); m_configureCompletionNeeded = false; m_mibCodec = 106; // UTF-8 by default m_buildQtDatabase = 0; m_buildQtDatabaseAsked = false; m_displayEditorToolbars = true; m_displayWhiteSpaces = true; m_rightMarginLine = 80; m_automaticCompilation = true; m_hideFindReplace = 10; m_smartClick = true; // m_formatPreprocessorText.setForeground(QColor(0,128,0)); m_formatQtText.setForeground(Qt::blue); m_formatSingleComments.setForeground(Qt::red); m_formatMultilineComments.setForeground(Qt::red); m_formatQuotationText.setForeground(Qt::darkGreen); m_formatMethods.setForeground(Qt::black); m_formatKeywords.setForeground(Qt::blue); tableLocalVariables->verticalHeader()->hide(); tableOtherVariables->verticalHeader()->hide(); separatorOtherFile = toolBarEdit->addSeparator(); separatorOtherFile->setVisible(false); actionOtherFile = new QAction(this); actionOtherFile->setVisible(false); toolBarEdit->addAction(actionOtherFile); #ifdef Q_WS_WIN m_font = QFont("Courier New", 10); #elif defined Q_WS_MACX m_font = QFont("Monaco", 12); setUnifiedTitleAndToolBarOnMac(false); #else m_font = QFont("Monospace", 10); #endif m_tabStopWidth = 4; m_lineNumbers = m_selectionBorder = m_autoIndent = m_cppHighlighter = true; // m_tabEditors = new TabWidget( this ); connect(m_tabEditors, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentTabChanged(int)) ); connect(m_tabEditors, SIGNAL(currentChanged(int)), this, SLOT(slotUpdateOtherFileActions()) ); // // setCentralWidget( m_tabEditors ); // m_assistant = new Assistant(); m_designer = new Designer(); // treeFiles->setColumnCount(1); treeFiles->setHeaderLabels(QStringList("")); // treeClasses->setColumnCount(1); treeClasses->setHeaderLabels(QStringList("")); treeClasses->setMainImpl( this ); menuDockWindows->addAction(dockFiles->toggleViewAction() ); menuDockWindows->addAction(dockClasses->toggleViewAction() ); menuDockWindows->addAction(dockBuild->toggleViewAction() ); menuDockWindows->addAction(dockOutputs->toggleViewAction() ); menuDockWindows->addAction(dockVariables->toggleViewAction() ); menuDockWindows->addAction(dockOtherVariables->toggleViewAction() ); menuDockWindows->addAction(dockFindInFiles->toggleViewAction() ); menuDockWindows->addAction(dockRegisters->toggleViewAction() ); menuDockWindows->addAction(dockCallsStack->toggleViewAction() ); menuToolbar->addAction(toolBarFiles->toggleViewAction()); menuToolbar->addAction(toolBarEdit->toggleViewAction()); menuToolbar->addAction(toolBarBuild->toggleViewAction()); for (int i = 0; i < maxRecentsFiles; ++i) { actionsRecentsFiles[i] = new QAction(this); menuLastsFiles->addAction(actionsRecentsFiles[i]); actionsRecentsFiles[i]->setVisible(false); connect(actionsRecentsFiles[i], SIGNAL(triggered()),this, SLOT(slotOpenRecentFile())); } updateActionsRecentsFiles(); // for (int i = 0; i < maxRecentsProjects; ++i) { actionsProjetsRecents[i] = new QAction(this); menuLastsProjects->addAction(actionsProjetsRecents[i]); actionsProjetsRecents[i]->setVisible(false); connect(actionsProjetsRecents[i], SIGNAL(triggered()),this, SLOT(slotOpenRecentProject())); } updateActionsRecentsProjects(); createConnections(); setMouseTracking( true ); logBuild->zoomOut( 1 ); logDebug->zoomOut( 1 ); m_stack = new StackImpl(this, callStacks); treeClasses->setCtagsName( m_ctagsName ); logBuild->setMainImpl( this ); on_actionFullDocksView_triggered(); } // MainImpl::~MainImpl() { if ( m_completion ) { m_completion->terminate(); m_completion->wait(); delete m_completion; m_completion = 0; } if( m_buildQtDatabase ) { m_buildQtDatabase->setStopRequired(); m_buildQtDatabase->wait(); delete m_buildQtDatabase; m_buildQtDatabase = 0; } } //convenient functions to access editor tabs Editor * MainImpl::currentEditor() { Editor *editor = 0; int currentIndex = m_tabEditors->currentIndex(); if( currentIndex != -1 ) editor = (Editor*) (m_tabEditors->widget( currentIndex )); return editor; } Editor * MainImpl::givenEditor(int i) { return qobject_cast (m_tabEditors->widget(i)); } // void MainImpl::renameEditor(QString oldName, QString newName) { foreach(Editor *editor, allEditors() ) { if ( editor->filename() == oldName) { editor->setFilename( newName ); slotModifiedEditor(editor, editor->isModified() ); editor->save(); break; } } } // void MainImpl::configureCompletion(QString projectDirectory) { QString QTDIR; QStringList includes; includes << projectDirectory; m_completion->setCtagsCmdPath( ctagsName() ); m_completion->addIncludes( includes, projectDirectory); m_configureCompletionNeeded = false; } // void MainImpl::gotoFileInProject(QString& filename) { if ( !m_projectManager ) return; dockFiles->show(); dockFiles->raise(); m_projectManager->setCurrentItem(filename); } // void MainImpl::setCrossButton(bool activate) { if (crossButton && !activate) { crossButton->hide(); } else if ( activate ) { if ( !crossButton ) { crossButton = new QToolButton(m_tabEditors); crossButton->setIcon( QIcon(":/toolbar/images/cross.png") ); connect(crossButton, SIGNAL(clicked()), this, SLOT(slotCloseCurrentTab()) ); crossButton->setGeometry(0,0,32,32); m_tabEditors->setCornerWidget(crossButton); } crossButton->show(); } m_tabEditors->setCloseButtonInTabs( !activate ); } // void MainImpl::slotOtherFile() { Editor *editor = currentEditor(); if ( editor ) editor->slotOtherFile(); } // void MainImpl::createConnections() { connect(actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotAbout()) ); connect(actionNewProject, SIGNAL(triggered()), this, SLOT(slotNewProject()) ); connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(actionOpenProject, SIGNAL(triggered()), this, SLOT(slotOpenProject()) ); connect(actionSaveFile, SIGNAL(triggered()), this, SLOT(slotSaveFile()) ); connect(actionSaveAll, SIGNAL(triggered()), this, SLOT(slotSaveAll()) ); connect(actionSaveFileAs, SIGNAL(triggered()), this, SLOT(slotSaveFileAs()) ); connect(actionCompile, SIGNAL(triggered()), this, SLOT(slotCompile()) ); connect(actionBuild, SIGNAL(triggered()), this, SLOT(slotBuild()) ); connect(actionRelease_mode, SIGNAL(triggered()), this, SLOT(slotBuildRelease()) ); connect(actionDebug_mode, SIGNAL(triggered()), this, SLOT(slotBuildDebug()) ); connect(action_Forget_last_used_mode, SIGNAL(triggered()), this, SLOT(slotForgetBuildMode()) ); connect(actionRebuild, SIGNAL(triggered()), this, SLOT(slotRebuild()) ); connect(actionQmake, SIGNAL(triggered()), this, SLOT(slotQmake()) ); connect(actionStopBuild, SIGNAL(triggered()), this, SLOT(slotStopBuild()) ); connect(actionClean, SIGNAL(triggered()), this, SLOT(slotClean()) ); connect(actionCut, SIGNAL(triggered()), this, SLOT(slotCut()) ); connect(actionCopy, SIGNAL(triggered()), this, SLOT(slotCopy()) ); connect(actionPaste, SIGNAL(triggered()), this, SLOT(slotPaste()) ); connect(actionUndo, SIGNAL(triggered()), this, SLOT(slotUndo()) ); connect(actionIndent, SIGNAL(triggered()), this, SLOT(slotIndent()) ); connect(actionUnindent, SIGNAL(triggered()), this, SLOT(slotUnindent()) ); connect(actionSelectAll, SIGNAL(triggered()), this, SLOT(slotSelectAll()) ); connect(actionRedo, SIGNAL(triggered()), this, SLOT(slotRedo()) ); connect(actionFind, SIGNAL(triggered()), this, SLOT(slotFind()) ); connect(actionReplace, SIGNAL(triggered()), this, SLOT(slotReplace()) ); connect(actionGotoLine, SIGNAL(triggered()), this, SLOT(slotGotoLine()) ); connect(actionFindContinue, SIGNAL(triggered()), this, SLOT(slotFindContinue()) ); connect(actionFindPrevious, SIGNAL(triggered()), this, SLOT(slotFindPrevious()) ); connect(actionCloseAllFiles, SIGNAL(triggered()), this, SLOT(slotCloseAllFiles()) ); connect(actionCloseProject, SIGNAL(triggered()), this, SLOT(slotCloseProject()) ); connect(actionOptions, SIGNAL(triggered()), this, SLOT(slotOptions()) ); connect(actionConfigureShortcuts, SIGNAL(triggered()), this, SLOT(slotShortcuts()) ); connect(actionCompleteCode, SIGNAL(triggered()), this, SLOT(slotCompleteCode()) ); connect(actionFindInFiles, SIGNAL(triggered()), this, SLOT(slotFindInFiles()) ); connect(actionNewFile, SIGNAL(triggered()), this, SLOT(slotNewFile()) ); connect(actionToggleComment, SIGNAL(triggered()), this, SLOT(slotToggleComment()) ); connect(actionComment, SIGNAL(triggered()), this, SLOT(slotComment()) ); connect(actionUncomment, SIGNAL(triggered()), this, SLOT(slotUncomment()) ); connect(actionParameters, SIGNAL(triggered()), this, SLOT(slotParameters()) ); connect(actionGotoMatchingBracket, SIGNAL(triggered()), this, SLOT(slotGotoMatchingBracket()) ); connect(addDebugVariable, SIGNAL(clicked()), this, SLOT(slotAddDebugVariable()) ); connect(removeDebugVariable, SIGNAL(clicked()), this, SLOT(slotRemoveDebugVariable()) ); connect(actionPrint, SIGNAL(triggered()), this, SLOT(slotPrint()) ); connect(actionGotoDeclaration, SIGNAL(triggered()), this, SLOT(slotGotoDeclaration()) ); connect(actionGotoImplementation, SIGNAL(triggered()), this, SLOT(slotGotoImplementation()) ); connect(actionMethodsList, SIGNAL(triggered()), this, SLOT(slotMethodsList()) ); connect(actionNextWarningError, SIGNAL(triggered()), this, SLOT(slotNextWarningError()) ); connect(actionPreviousWarningError, SIGNAL(triggered()), this, SLOT(slotPreviousWarningError()) ); connect(actionClearAllWarningsErrors, SIGNAL(triggered()), this, SLOT(slotClearAllWarningsErrors()) ); // connect(actionExternalTools, SIGNAL(triggered()), this, SLOT(slotToolsControl()) ); connect(actionCloseCurrentEditor, SIGNAL(triggered()), this, SLOT(slotCloseCurrentTab()) ); actionCloseCurrentEditor->setShortcutContext( Qt::ApplicationShortcut ); connect(actionPreviousTab, SIGNAL(triggered()), this, SLOT(slotPreviousTab()) ); actionPreviousTab->setShortcutContext( Qt::ApplicationShortcut ); connect(actionNextTab, SIGNAL(triggered()), this, SLOT(slotNextTab()) ); actionNextTab->setShortcutContext( Qt::ApplicationShortcut ); connect(actionsetFocusToEditor, SIGNAL(triggered()), this, SLOT(slotSetFocusToEditor()) ); actionsetFocusToEditor->setShortcutContext( Qt::WindowShortcut ); connect(actionToggleBreakpoint, SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); connect(actionDebug, SIGNAL(triggered()), this, SLOT(slotDebug()) ); connect(actionExecuteWithoutDebug, SIGNAL(triggered()), this, SLOT(slotExecuteWithoutDebug()) ); connect(actionStopDebug, SIGNAL(triggered()), this, SLOT(slotContinueDebug()) ); connect(actionStepInto, SIGNAL(triggered()), this, SLOT(slotStepInto()) ); connect(actionStepOver, SIGNAL(triggered()), this, SLOT(slotStepOver()) ); connect(actionStepOut, SIGNAL(triggered()), this, SLOT(slotStepOut()) ); connect(actionQuit, SIGNAL(triggered()), this, SLOT(close()) ); connect(treeFiles, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotDoubleClickTreeFiles(QTreeWidgetItem *, int)) ); connect(treeFiles, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(slotClickTreeFiles(QTreeWidgetItem *, int)) ); connect(findFiles, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotFindFilesActivated( QListWidgetItem *, QListWidgetItem *)) ); connect(findLines, SIGNAL(itemDoubleClicked ( QListWidgetItem *)), this, SLOT(slotDoubleClickFindLines( QListWidgetItem *)) ); connect(actionHelpQtWord, SIGNAL(triggered()), this, SLOT(slotHelpQtWord()) ); connect(actionSwitchHeaderSources, SIGNAL(triggered()), this, SLOT(slotOtherFile()) ); connect(actionToggleBookmark, SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(actionNextBookmark, SIGNAL(triggered()), this, SLOT(slotNextBookmark()) ); connect(actionPreviousBookmark, SIGNAL(triggered()), this, SLOT(slotPreviousBookmark()) ); connect(actionClearAllBookmarks, SIGNAL(triggered()), this, SLOT(slotClearAllBookmarks()) ); connect(actionOpenFile, SIGNAL(triggered()), this, SLOT(slotOpenFile()) ); connect(actionNewQtVersion, SIGNAL(triggered()), this, SLOT(slotNewQtVersion()) ); connect(actionOtherFile, SIGNAL(triggered()), this, SLOT(slotOtherFile()) ); // m_projectGroup = new QActionGroup( this ); m_projectGroup->addAction( actionCloseProject ); m_projectGroup->addAction( actionSaveProject ); m_projectGroup->addAction( actionAddNewItem ); m_projectGroup->addAction( actionAddNewClass ); m_projectGroup->addAction( actionAddScope ); m_projectGroup->addAction( actionAddExistingFiles ); m_projectGroup->addAction( actionProjectPropertie ); m_projectGroup->addAction( actionBuild ); m_projectGroup->addAction( actionRebuild ); m_projectGroup->addAction( actionClean ); m_projectGroup->addAction( actionStopBuild ); m_projectGroup->addAction( actionCompile ); m_projectGroup->addAction( actionQmake ); m_projectGroup->addAction( actionDebug ); m_projectGroup->addAction( actionStopDebug ); m_projectGroup->addAction( actionExecuteWithoutDebug ); m_projectGroup->addAction( actionStepOut ); m_projectGroup->addAction( actionStepOver ); m_projectGroup->addAction( actionStepInto ); m_projectGroup->addAction( actionResetExecutablesList ); m_projectGroup->setEnabled( false ); // m_buildingGroup = new QActionGroup( this ); m_buildingGroup->addAction( actionCompile ); m_buildingGroup->addAction( actionQmake ); m_buildingGroup->addAction( actionClean ); m_buildingGroup->addAction( actionBuild ); m_buildingGroup->addAction( actionRebuild ); m_buildingGroup->addAction( actionExecuteWithoutDebug ); m_buildingGroup->addAction( actionDebug ); m_buildingGroup->addAction( actionStopDebug ); m_buildingGroup->addAction( actionStepInto ); m_buildingGroup->addAction( actionStepOver ); m_buildingGroup->addAction( actionStepOut ); m_buildingGroup->addAction( actionDebug_mode ); m_buildingGroup->addAction( actionRelease_mode ); m_buildingGroup->addAction( action_Forget_last_used_mode ); m_buildingGroup->setEnabled( false ); } // void MainImpl::slotShortcuts() { ShortcutsImpl *dialog = new ShortcutsImpl(this); dialog->exec(); delete dialog; } // void MainImpl::slotNewFile() { QString s = QFileDialog::getSaveFileName( this, tr("Choose the file to create"), "", tr("Files")+" (*.cpp *.h *.txt *.* *)" ); if ( s.isEmpty() ) { // Cancel is clicked return; } QFile file(s); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists in directory.").arg(s), tr("Cancel") ); return; } if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::about(0, "QDevelop",tr("Unable to create %1").arg(s)); return; } file.close(); openFile( QStringList( s ) ); } // void MainImpl::slotSetFocusToEditor() { Editor *editor = currentEditor(); if ( editor ) editor->setFocus(); } // void MainImpl::slotToggleBreakpoint() { Editor *editor = currentEditor(); if ( editor ) editor->toggleBreakpoint(); } // void MainImpl::slotPreviousBookmark() { QList actionsList = menuBookmarks->actions(); int pos = actionsList.indexOf( actionActiveBookmark ); int posFirstBookmark = actionsList.indexOf( actionClearAllBookmarks ) + 2; if ( posFirstBookmark > actionsList.count() ) posFirstBookmark = -1; int posLastBookmark = actionsList.count()-1; if ( pos != -1 && posFirstBookmark < pos ) { QAction *newAction = actionsList.at( pos - 1 ); slotActivateBookmark( newAction ); } else if ( posFirstBookmark != -1 ) { QAction *newAction = actionsList.at( posLastBookmark ); slotActivateBookmark( newAction ); } } // void MainImpl::slotNextBookmark() { QList actionsList = menuBookmarks->actions(); int count = actionsList.count(); int pos = actionsList.indexOf( actionActiveBookmark ); if ( pos != 1 && pos+1 < count ) { QAction *newAction = actionsList.at( pos + 1 ); slotActivateBookmark( newAction ); } else { int posFirstBookmark = actionsList.indexOf( actionClearAllBookmarks ) + 2; if ( posFirstBookmark < count ) { QAction *newAction = actionsList.at( posFirstBookmark ); slotActivateBookmark( newAction ); } } } // void MainImpl::slotToggleBookmark() { Editor *editor = currentEditor(); if ( editor ) editor->toggleBookmark(); } // void MainImpl::slotToggleComment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Toggle ); } // void MainImpl::slotComment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Comment ); } // void MainImpl::slotMethodsList() { Editor *editor = currentEditor(); if ( editor ) editor->methodsList(); } // void MainImpl::slotGotoImplementation() { Editor *editor = currentEditor(); if ( editor ) editor->gotoImplementation(); } // void MainImpl::slotGotoDeclaration() { Editor *editor = currentEditor(); if ( editor ) editor->gotoDeclaration(); } // void MainImpl::slotGotoMatchingBracket() { Editor *editor = currentEditor(); if ( editor ) editor->gotoMatchingBracket(); } // void MainImpl::slotUncomment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Uncomment ); } // void MainImpl::slotPreviousTab() { if ( 0 < m_tabEditors->count() ) { int i = m_tabEditors->currentIndex()-1; Editor *editor = givenEditor( 0>i?m_tabEditors->count()-1:i ); if ( editor ) m_tabEditors->setCurrentWidget( editor ); } } // void MainImpl::slotNextTab() { if ( 0 < m_tabEditors->count() ) { int i = (m_tabEditors->currentIndex()+1)%m_tabEditors->count(); Editor *editor = givenEditor(i); if ( editor ) m_tabEditors->setCurrentWidget( editor ); } } // void MainImpl::slotParameters() { if (!m_projectManager) return; ParametersImpl *parametersimpl = new ParametersImpl(this); parametersimpl->setParameters( m_projectManager->parameters() ); if ( parametersimpl->exec() == QDialog::Accepted ) m_projectManager->setParameters( parametersimpl->parameters() ); delete parametersimpl; } // void MainImpl::slotOptions() { OptionsImpl *options = new OptionsImpl(this, m_font, m_lineNumbers, m_selectionBorder, m_autoIndent, m_cppHighlighter, m_tabStopWidth, m_saveBeforeBuild, m_restoreOnStart, m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords, m_autoMaskDocks, m_endLine, m_tabSpaces, m_autoCompletion, m_backgroundColor, m_promptBeforeQuit, m_highlightCurrentLine, m_currentLineColor, m_autobrackets, m_autocomments, m_showTreeClasses, m_intervalUpdatingClasses, m_projectsDirectory, m_match, m_matchingColor, m_closeButtonInTabs, m_pluginsDirectory, m_makeOptions, m_mibCodec, m_includeDirectory, m_displayEditorToolbars, m_displayWhiteSpaces, m_rightMarginLine, m_documentationDirectory, m_textColor, m_automaticCompilation, m_wordWrap, m_hideFindReplace, m_smartClick ); if ( options->exec() == QDialog::Accepted ) { QApplication::setOverrideCursor(Qt::WaitCursor); m_showTreeClasses = options->showTreeClasses->isChecked(); m_automaticCompilation = options->compileAuto->isChecked(); m_intervalUpdatingClasses = options->interval->value(); m_font = QFont( options->font().family(), options->font().pointSize() ); m_tabStopWidth = options->tabStopWidth->value(); m_cppHighlighter = options->highlight->isChecked(); m_lineNumbers = options->numbers->isChecked(); m_autoIndent = options->indent->isChecked(); m_selectionBorder = options->selectionBorder->isChecked(); m_saveBeforeBuild = options->saveAll->isChecked(); m_restoreOnStart = options->restore->isChecked(); m_endLine = (EndLine)options->endLine->currentIndex(); m_tabSpaces = options->tabSpaces->isChecked(); m_autoCompletion = options->completion->isChecked(); m_autobrackets = options->brackets->isChecked(); // Divius: comments autoclose m_autocomments = options->comments->isChecked(); // m_match = options->match->isChecked(); m_highlightCurrentLine = options->groupHighlightCurrentLine->isChecked(); m_promptBeforeQuit = options->promptBeforeQuit->isChecked(); m_projectsDirectory = options->projectsDirectory->text(); m_pluginsDirectory = options->pluginsDirectory->text(); m_includeDirectory = options->includeDirectory->text(); m_documentationDirectory = options->documentationDirectory->text(); m_makeOptions = options->makeOptions->text(); m_closeButtonInTabs = options->closeButton->isChecked(); setCrossButton( !m_closeButtonInTabs ); // m_formatPreprocessorText = options->syntaxe()->preprocessorFormat(); m_formatQtText = options->syntaxe()->classFormat(); m_formatSingleComments = options->syntaxe()->singleLineCommentFormat(); m_formatMultilineComments = options->syntaxe()->multiLineCommentFormat(); m_formatQuotationText = options->syntaxe()->quotationFormat(); m_formatMethods = options->syntaxe()->functionFormat(); m_formatKeywords = options->syntaxe()->keywordFormat(); m_backgroundColor = options->backgroundColor(); m_textColor = options->textColor(); m_currentLineColor = options->currentLineColor(); m_matchingColor = options->matchingColor(); m_mibCodec = options->mib(); m_displayEditorToolbars = options->showEditorToolbars->isChecked(); m_displayWhiteSpaces = options->displayWhiteSpaces->isChecked(); if (options->rightMarginLine->isChecked()) m_rightMarginLine = options->rightMarginPos->value(); else m_rightMarginLine = 0; m_wordWrap = options->wordwrap->isChecked(); if (options->hideFindReplace->isChecked()) m_hideFindReplace = options->findReplaceDelay->value(); else m_hideFindReplace = 0; m_smartClick = options->smartClick->isChecked(); slotUpdateOtherFileActions(); foreach(Editor *editor, allEditors() ) { editor->setShowTreeClasses( m_showTreeClasses ); editor->setIntervalUpdatingTreeClasses( m_intervalUpdatingClasses ); editor->setFont( m_font ); editor->setTabStopWidth( m_tabStopWidth ); editor->setSyntaxHighlight( m_cppHighlighter ); editor->setLineNumbers( m_lineNumbers ); editor->setAutoIndent( m_autoIndent ); editor->setMatch( m_match ); editor->setHighlightCurrentLine( m_highlightCurrentLine ); editor->setSelectionBorder( m_selectionBorder ); editor->setAutoCompletion( m_autoCompletion ); editor->setEndLine( m_endLine ); editor->setTabSpaces( m_tabSpaces ); editor->setBackgroundColor( m_backgroundColor ); editor->setTextColor( m_textColor ); editor->setCurrentLineColor( m_currentLineColor ); editor->setMatchingColor( m_matchingColor ); editor->setAutobrackets( m_autobrackets ); editor->setAutocomments( m_autocomments ); editor->setShowWhiteSpaces( m_displayWhiteSpaces ); editor->setRightMargin( m_rightMarginLine ); editor->displayEditorToolbar( m_displayEditorToolbars ); editor->setSyntaxColors ( m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords ); editor->setWordWrap(m_wordWrap); editor->setHideFindReplace(m_hideFindReplace); editor->smartClick = m_smartClick; } /* TODO if (!m_showTreeClasses) //ToolsOptions/General tabExplorer->setTabToolTip( 1, tr("Classes explorer is disabled, please enable it in the Options dialog") ); else tabExplorer->setTabToolTip( 1, "" ); */ m_assistant->setdocumentationDirectory( m_documentationDirectory ); QApplication::restoreOverrideCursor(); } delete options; } // void MainImpl::saveINI() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("Options"); settings.setValue("m_showTreeClasses", m_showTreeClasses); settings.setValue("m_intervalUpdatingClasses", m_intervalUpdatingClasses); settings.setValue("m_automaticCompilation", m_automaticCompilation); settings.setValue("m_font", m_font.toString()); settings.setValue("m_tabStopWidth", m_tabStopWidth); settings.setValue("m_cppHighlighter", m_cppHighlighter); settings.setValue("m_lineNumbers", m_lineNumbers); settings.setValue("m_autoIndent", m_autoIndent); settings.setValue("m_selectionBorder", m_selectionBorder); settings.setValue("m_saveBeforeBuild", m_saveBeforeBuild); settings.setValue("m_restoreOnStart", m_restoreOnStart); settings.setValue("m_promptBeforeQuit", m_promptBeforeQuit); settings.setValue("m_autoCompletion", m_autoCompletion); settings.setValue("m_autobrackets", m_autobrackets); // Divius: comments autoclose settings.setValue("m_autocomments", m_autocomments); // settings.setValue("m_closeButtonInTabs", m_closeButtonInTabs); settings.setValue("m_match", m_match); settings.setValue("m_highlightCurrentLine", m_highlightCurrentLine); settings.setValue("m_checkEnvironmentOnStartup", m_checkEnvironmentOnStartup); settings.setValue("m_endLine", m_endLine); settings.setValue("m_tabSpaces", m_tabSpaces); settings.setValue("m_backgroundColor", m_backgroundColor.name()); settings.setValue("m_textColor", m_textColor.name()); settings.setValue("m_currentLineColor", m_currentLineColor.name()); settings.setValue("m_matchingColor", m_matchingColor.name()); settings.setValue("m_projectsDirectory", m_projectsDirectory); settings.setValue("m_pluginsDirectory", m_pluginsDirectory); settings.setValue("m_includeDirectory", m_includeDirectory); settings.setValue("m_documentationDirectory", m_documentationDirectory); settings.setValue("m_makeOptions", m_makeOptions); settings.setValue("m_mibCodec", m_mibCodec); // settings.setValue("m_formatPreprocessorText", m_formatPreprocessorText.foreground().color().name()); settings.setValue("m_formatQtText", m_formatQtText.foreground().color().name()); settings.setValue("m_formatSingleComments", m_formatSingleComments.foreground().color().name()); settings.setValue("m_formatMultilineComments", m_formatMultilineComments.foreground().color().name()); settings.setValue("m_formatQuotationText", m_formatQuotationText.foreground().color().name()); settings.setValue("m_formatMethods", m_formatMethods.foreground().color().name()); settings.setValue("m_formatKeywords", m_formatKeywords.foreground().color().name()); settings.setValue("m_displayEditorToolbars", m_displayEditorToolbars); settings.setValue("m_displayWhiteSpaces", m_displayWhiteSpaces); settings.setValue("m_rightMarginLine", m_rightMarginLine); settings.setValue("editorMode", actionEditor_mode->isChecked() ); settings.setValue("m_wordWrap", m_wordWrap); settings.setValue("m_hideFindReplace", m_hideFindReplace); settings.setValue("m_smartClick", m_smartClick); settings.endGroup(); // Save shortcuts settings.beginGroup("Shortcuts"); QList childrens; childrens = children(); QListIterator iterator(childrens); while ( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if ( (action) && (!(action->data().toString().contains( "Recent|" )))) { QString text = action->objectName(); if (!text.isEmpty()) { QString shortcut = action->shortcut(); settings.setValue( text, shortcut ); } } } settings.endGroup(); //if ( !m_projectManager ) //return; if ( m_restoreOnStart ) { settings.beginGroup("Project"); QString projectDirectory; if ( m_projectManager ) projectDirectory = m_projectManager->absoluteNameProjectFile(treeFiles->topLevelItem(0)); settings.setValue("absoluteNameProjectFile", projectDirectory); settings.endGroup(); } // // HACK to prevent the compiler toolbar from being moved to the right more and more: Hide otherFilesAction button before saving state if (actionOtherFile->isVisible()) { separatorOtherFile->setVisible(false); actionOtherFile->setVisible(false); // yes, we have to call it twice to really update the other toolbars' positions QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } // settings.beginGroup("mainwindowstate"); if (!isMinimized() && !isMaximized() && !isFullScreen()) { settings.setValue("pos", pos()); settings.setValue("size", size()); } settings.setValue("maximized", isMaximized()); settings.setValue("fullscreen", isFullScreen()); settings.setValue("geometry", saveGeometry()); // Window geometry and state (only needed for Windows!). settings.setValue("state", saveState()); // Toolbar and DockWidget state. settings.endGroup(); settings.beginGroup("editormode"); QList dockWidgets = findChildren(); foreach( QWidget *w, dockWidgets ) settings.setValue( w->objectName(), toolbarStatus[w] );; settings.endGroup(); // // HACK to prevent the compiler toolbar from being moved to the right more and more: Hide otherFilesAction button before saving state // and restore it when we are done slotUpdateOtherFileActions(); } // void MainImpl::slotNewProject() { NewProjectImpl *window = new NewProjectImpl(this, m_projectsDirectory); window->labelProjetParent->setHidden( true ); window->parentProjectName->setHidden( true ); if ( window->exec() == QDialog::Accepted ) { openProject( window->absoluteProjectName() ); QTreeWidgetItem *itProject = m_projectManager->itemProject( window->filename() ); m_projectManager->setSrcDirectory(itProject, window->srcDirectory->text()); m_projectManager->setUiDirectory(itProject, window->uiDirectory->text()); } delete window; } // QString MainImpl::loadINI() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); QString projectName; settings.beginGroup("Options"); QString s = settings.value("m_font", m_font.toString()).toString(); m_font.fromString(s); m_tabStopWidth = settings.value("m_tabStopWidth", m_tabStopWidth).toInt(); m_cppHighlighter = settings.value("m_cppHighlighter", m_cppHighlighter).toBool(); m_automaticCompilation = settings.value("m_automaticCompilation", m_automaticCompilation).toBool(); m_lineNumbers = settings.value("m_lineNumbers", m_lineNumbers).toBool(); m_autoIndent = settings.value("m_autoIndent", m_autoIndent).toBool(); m_autoCompletion = settings.value("m_autoCompletion", m_autoCompletion).toBool(); m_autobrackets = settings.value("m_autobrackets", m_autobrackets).toBool(); // Divius: comments autoclose m_autocomments = settings.value("m_autocomments", m_autocomments).toBool(); // m_selectionBorder = settings.value("m_selectionBorder", m_selectionBorder).toBool(); m_saveBeforeBuild = settings.value("m_saveBeforeBuild", m_saveBeforeBuild).toBool(); m_restoreOnStart = settings.value("m_restoreOnStart", m_restoreOnStart).toBool(); m_promptBeforeQuit = settings.value("m_promptBeforeQuit", m_promptBeforeQuit).toBool(); m_checkEnvironmentOnStartup = settings.value("m_checkEnvironmentOnStartup", m_checkEnvironmentOnStartup).toBool(); m_autoMaskDocks = settings.value("m_autoMaskDocks", m_autoMaskDocks).toBool(); m_endLine = (EndLine)settings.value("m_endLine", m_endLine).toInt(); m_tabSpaces = settings.value("m_tabSpaces", m_tabSpaces).toBool(); m_match = settings.value("m_match", m_match).toBool(); m_highlightCurrentLine = settings.value("m_highlightCurrentLine", m_highlightCurrentLine).toBool(); m_backgroundColor = QColor(settings.value("m_backgroundColor", m_backgroundColor).toString()); m_textColor = QColor(settings.value("m_textColor", m_textColor).toString()); m_currentLineColor = QColor(settings.value("m_currentLineColor", m_currentLineColor).toString()); m_matchingColor = QColor(settings.value("m_matchingColor", m_matchingColor).toString()); m_projectsDirectory = settings.value("m_projectsDirectory", m_projectsDirectory).toString(); m_pluginsDirectory = settings.value("m_pluginsDirectory", m_pluginsDirectory).toString(); m_includeDirectory = settings.value("m_includeDirectory", m_includeDirectory).toString(); m_documentationDirectory = settings.value("m_documentationDirectory", m_documentationDirectory).toString(); m_makeOptions = settings.value("m_makeOptions", m_makeOptions).toString(); m_showTreeClasses = settings.value("m_showTreeClasses", m_showTreeClasses).toBool(); m_closeButtonInTabs = settings.value("m_closeButtonInTabs", m_closeButtonInTabs).toBool(); m_displayEditorToolbars = settings.value("m_displayEditorToolbars", m_displayEditorToolbars).toBool(); slotUpdateOtherFileActions(); m_displayWhiteSpaces = settings.value("m_displayWhiteSpaces", m_displayWhiteSpaces).toBool(); m_rightMarginLine = settings.value("m_rightMarginLine", m_rightMarginLine).toInt(); m_wordWrap = settings.value("m_wordWrap", m_wordWrap).toBool(); m_hideFindReplace = settings.value("m_hideFindReplace", m_hideFindReplace).toInt(); m_smartClick = settings.value("m_smartClick", m_smartClick).toBool(); if( !QDir().exists(m_includeDirectory) ) { QMessageBox::warning(0, "QDevelop", tr("The Qt include directory doesn't exist,\nYou can change in Options dialog."), tr("Ok") ); } setCrossButton( !m_closeButtonInTabs ); m_intervalUpdatingClasses = settings.value("m_intervalUpdatingClasses", m_intervalUpdatingClasses).toInt(); if ( m_currentLineColor == Qt::black ) m_currentLineColor = QColor(); m_mibCodec = settings.value("m_mibCodec", m_mibCodec).toInt(); // m_formatPreprocessorText.setForeground( QColor(settings.value("m_formatPreprocessorText", m_formatPreprocessorText.foreground().color().name()).toString() ) ); m_formatQtText.setForeground( QColor(settings.value("m_formatQtText", m_formatQtText.foreground().color().name()).toString() ) ); m_formatSingleComments.setForeground( QColor(settings.value("m_formatSingleComments", m_formatSingleComments.foreground().color().name()).toString() ) ); m_formatMultilineComments.setForeground( QColor(settings.value("m_formatMultilineComments", m_formatMultilineComments.foreground().color().name()).toString() ) ); m_formatQuotationText.setForeground( QColor(settings.value("m_formatQuotationText", m_formatQuotationText.foreground().color().name()).toString() ) ); m_formatMethods.setForeground( QColor(settings.value("m_formatMethods", m_formatMethods.foreground().color().name()).toString() ) ); m_formatKeywords.setForeground( QColor(settings.value("m_formatKeywords", m_formatKeywords.foreground().color().name()).toString() ) ); actionEditor_mode->setChecked( settings.value("editorMode", actionEditor_mode->isChecked()).toBool() ); settings.endGroup(); /* TODO if (!m_showTreeClasses) //ToolsOptions/General tabExplorer->setTabToolTip( 1, tr("Classes explorer is disabled, please enable it in the Options dialog") ); else tabExplorer->setTabToolTip( 1, "" ); */ m_assistant->setdocumentationDirectory( m_documentationDirectory ); // Load shortcuts settings.beginGroup("Shortcuts"); QList childrens; childrens = children(); QListIterator iterator(childrens); while ( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if ( (action) && (!(action->data().toString().contains( "Recent|" ))) && (!action->objectName().isEmpty()) ) { QString text = object->objectName(); if ( !text.isEmpty() ) { QString shortcut = action->shortcut(); shortcut = settings.value(text, shortcut).toString(); action->setShortcut( shortcut ); } } } settings.endGroup(); if ( m_restoreOnStart ) { settings.beginGroup("Project"); projectName = settings.value("absoluteNameProjectFile").toString(); settings.endGroup(); } // settings.beginGroup("mainwindowstate"); #ifdef Q_OS_WIN32 // Restores position, size and state for both normal and maximized/fullscreen state. Problems reported unter X11. // See Qt doc: Geometry: Restoring a Window's Geometry for details. restoreGeometry(settings.value("geometry", saveGeometry()).toByteArray()); // Window geometry and state. #else // Restores position, size and state including maximized/fullscreen. move(settings.value("pos", pos()).toPoint()); // Window position. resize(settings.value("size", size()).toSize()); // Window size. // Note: Yes, the window can be maximized and fullscreen! if (settings.value("maximized", isMaximized()).toBool()) // Window maximized. setWindowState(windowState() | Qt::WindowMaximized); if (settings.value("fullscreen", isFullScreen()).toBool()) // Window fullscreen. setWindowState(windowState() | Qt::WindowFullScreen); #endif restoreState(settings.value("state", saveState()).toByteArray()); // Toolbar and DockWidget state. settings.endGroup(); settings.beginGroup("editormode"); QList dockWidgets = findChildren(); foreach( QWidget *w, dockWidgets ) toolbarStatus[w] = settings.value(w->objectName(),w->isVisible()).toBool(); settings.endGroup(); return projectName; } void MainImpl::closeEvent( QCloseEvent * event ) { int response = 0; if ( m_promptBeforeQuit ) { response = QMessageBox::question(this, "QDevelop", tr("Do you want to quit QDevelop ?"), tr("Yes"), tr("No"), QString(), 0, 1); } if ( response == 1 ) { event->ignore(); return; } saveINI(); if ( slotCloseProject(true) ) { delete m_assistant; delete m_designer; this->hide(); //give an impression of quick close event->accept(); } else event->ignore(); } // bool MainImpl::slotCloseAllFiles() { bool ok = true; foreach(Editor *editor, allEditors() ) { if ( !editor->close() ) ok = false; else delete editor; } slotUpdateOtherFileActions(); return ok; } // static QString dir; void MainImpl::slotOpen() { static QString selectedFilter; if ( dir.isEmpty() && m_projectManager ) dir = m_projectManager->projectDirectory( treeFiles->topLevelItem ( 0 ) ); QString s = QFileDialog::getOpenFileName( this, tr("Choose a file to open"), dir, tr("Sources")+" (*.cpp *.h);;"+ tr("Projects")+" (*.pro);;"+ tr("Texts")+" (*.txt *.TXT);;"+ tr("All Files")+" (* *.*)", &selectedFilter ); if ( s.isEmpty() ) { // Cancel is clicked return; } if ( s.right(4).toLower() == ".pro" ) { openProject(s); } else openFile( QStringList( s ) ); dir = QDir().absoluteFilePath( s ); } void MainImpl::slotOpenProject() { if ( dir.isEmpty() && m_projectManager ) dir = m_projectManager->projectDirectory( treeFiles->topLevelItem ( 0 ) ); QString s = QFileDialog::getOpenFileName( this, tr("Choose a project to open"), dir, tr("Projects")+" (*.pro)" ); if ( s.isEmpty() ) { // Cancel is clicked return; } openProject(s); dir = QDir().absoluteFilePath( s ); } // bool MainImpl::openProject(QString s) { s = QDir::cleanPath( s ); QFile file ( s ); if ( !file.exists() ) { QMessageBox::warning(this, "QDevelop", tr("The project %1 doesn't exist.").arg(s), tr("Cancel") ); return false; } if ( !slotCloseProject() ) return false; if ( m_completion ) delete m_completion; m_completion = new InitCompletion (this, treeClasses); QStringList includes; includes << m_includeDirectory; #ifdef WIN32 includes << QDir::cleanPath( QFileInfo(m_qmakeName).absoluteDir().path()+"/../src" ) ; #endif m_completion->setCtagsCmdPath( ctagsName() ); m_completion->setQtInclude( includes ); configureCompletion( QFileInfo(s).absoluteDir().path() ); m_projectManager = new ProjectManager(this, treeFiles, treeClasses); m_projectManager->init(s); treeFiles->setProjectManager( m_projectManager ); treeClasses->setProjectManager( m_projectManager ); connect(actionResetExecutablesList, SIGNAL(triggered()), m_projectManager, SLOT(slotResetExecutablesList()) ); connect(actionSaveProject, SIGNAL(triggered()), m_projectManager, SLOT(slotSaveProject()) ); connect(actionAddExistingFiles, SIGNAL(triggered()), m_projectManager, SLOT(slotAddExistingFiles()) ); connect(actionAddNewItem, SIGNAL(triggered()), m_projectManager, SLOT(slotAddNewItem()) ); connect(actionAddNewClass, SIGNAL(triggered()), m_projectManager, SLOT(slotAddNewClass()) ); connect(actionAddScope, SIGNAL(triggered()), m_projectManager, SLOT(slotAddScope()) ); connect(actionProjectPropertie, SIGNAL(triggered()), m_projectManager, SLOT(slotProjectPropertie()) ); setWindowTitle( s ); setCurrentProject( s ); m_projectGroup->setEnabled( true ); m_buildingGroup->setEnabled( true ); slotClickTreeFiles( treeFiles->topLevelItem ( 0 ), 0); return true; } // bool MainImpl::slotCloseProject(bool /*hide*/) { /*QList maximized = m_maximizedEditors; foreach(Editor *editor, maximized) { slotShowMaximized( editor ); }*/ if ( m_projectManager ) m_projectManager->saveProjectSettings(); slotClearAllBookmarks(); if ( !slotCloseAllFiles() ) return false; logBuild->clear(); logDebug->clear(); // if ( m_completion ) { m_completion->wait(); delete m_completion; m_completion = 0; } // if ( m_projectManager && !m_projectManager->close() ) return false; delete m_projectManager; m_projectManager = 0; setWindowTitle( "QDevelop" ); m_projectGroup->setEnabled( false ); m_buildingGroup->setEnabled( false ); delete m_findInFiles; m_findInFiles = 0; return true; } // void MainImpl::slotDoubleClickTreeFiles(QTreeWidgetItem *item, int) { if ( item->childCount() > 0 ) return; QString filename = item->text(0); QString projectName = m_projectManager->projectFilename( item ); QString projectDirectory = m_projectManager->projectDirectory(item); QString absoluteName = QDir(projectDirectory+"/"+filename).absolutePath(); QStringList locationsList; locationsList << absoluteName; foreach(QString dir, m_projectManager->dependpath(item) ) locationsList << QDir(projectDirectory + "/" +dir + "/" + filename).absolutePath(); openFile( locationsList ); } // void MainImpl::slotClickTreeFiles(QTreeWidgetItem *item, int) { QString projectName = m_projectManager->projectFilename( item ); actionProjectPropertie->setText( tr("Properties of %1...").arg(projectName) ); } // void MainImpl::slotSaveFile() { Editor *editor = currentEditor(); if ( editor ) { editor->save(); } } // void MainImpl::slotSaveFileAs() { Editor *editor = currentEditor(); if ( !editor ) return; QString s = QFileDialog::getSaveFileName( this, tr("Choose the file to create"), editor->filename(), tr("Files (*.cpp *.h *.txt *.* *)") ); if ( s.isEmpty() ) { return; } editor->setFilename( s ); editor->save(); m_tabEditors->setTabText(m_tabEditors->currentIndex(), editor->shortFilename() ); } // void MainImpl::slotHelpQtWord() { Editor *editor = currentEditor(); QString className = "index"; QString word = "index"; if ( editor ) { word = editor->wordUnderCursor(); className = editor->classNameUnderCursor(); if (className.isEmpty() ) className = word; if( !word.isEmpty() ) className = m_completion->classForFunction(className, word); } m_assistant->showQtWord(className, word ); } // void MainImpl::slotCloseCurrentTab() { Editor *editor = currentEditor(); if ( editor && !editor->close() ) return; delete editor; slotUpdateOtherFileActions(); } // void MainImpl::closeTab(int numTab) { Editor *editor = givenEditor(numTab); if ( editor && !editor->close() ) return; delete editor; slotUpdateOtherFileActions(); } // void MainImpl::closeOtherTab(int numTab) { Editor *noClose = givenEditor(numTab); QList editorlist; for (int i=0; icount(); i++) editorlist.append( givenEditor(i) ); foreach(Editor *editor, editorlist) { if ( editor != noClose ) { if ( editor && !editor->close() ) return; delete editor; } } slotUpdateOtherFileActions(); } // void MainImpl::slotClearAllBookmarks() { foreach(Editor *editor, allEditors() ) { if ( editor ) { editor->clearAllBookmarks(); } } } // bool MainImpl::slotSaveAll() { bool ok = m_projectManager->slotSaveProject(); ok = true; foreach(Editor *editor, allEditors() ) { if ( editor ) { if ( !editor->save() ) ok = false; } } return ok; } // Editor * MainImpl::openFile(QStringList locationsList, int numLine, bool silentMode, bool moveTop) { //QApplication::setOverrideCursor(Qt::WaitCursor); QString s; foreach(s, locationsList) { if ( QFile::exists( s ) ) { break; } } s = QDir::cleanPath( s ); // The file is really opened only if it exists and if it is a file. if ( !QFileInfo(s).isFile() ) { QApplication::restoreOverrideCursor(); return 0; } if ( Editor::shortFilename(s).section(".", -1, -1).toLower() == "ui" ) { //QProcess::startDetached (m_designerName, QStringList(s)); m_designer->openUI( s ); QApplication::restoreOverrideCursor(); return 0; } else if ( Editor::shortFilename(s).section(".", -1, -1).toLower() == "ts" ) { if (!QProcess::startDetached (m_linguistName, QStringList(s))) { #ifdef Q_OS_MACX if (!QProcess::startDetached (m_linguistName + "/Contents/MacOS/Linguist", QStringList(s))) { QMessageBox::critical(this, "QDevelop", tr("Cannot launch Linguist")); } #else QMessageBox::critical(this, "QDevelop", tr("Cannot launch Linguist")); #endif } QApplication::restoreOverrideCursor(); return 0; } // The file is perhaps already opened. Find filename in tabs. foreach(Editor *editor, allEditors() ) { if ( editor->filename() == s) { for (int i=0; icount(); i++) { if( givenEditor(i)->filename() == s) { m_tabEditors->setCurrentIndex( i ); } } if ( numLine != -1 ) { editor->setFocus(); editor->gotoLine( numLine, moveTop ); slotCurrentTabChanged( 0 ); } QApplication::restoreOverrideCursor(); return editor; } } // Not found in tabs, opens really. Editor *editor = new Editor(m_tabEditors, this, m_completion ,s); editor->setShowTreeClasses( m_showTreeClasses ); editor->setIntervalUpdatingTreeClasses( m_intervalUpdatingClasses ); editor->setFont( m_font ); editor->setSyntaxHighlight( m_cppHighlighter ); editor->setLineNumbers( m_lineNumbers ); editor->setAutoIndent( m_autoIndent ); editor->setSelectionBorder( m_selectionBorder ); editor->setEndLine( m_endLine ); editor->setTabSpaces( m_tabSpaces ); editor->setAutoCompletion( m_autoCompletion ); editor->setAutobrackets( m_autobrackets ); editor->setAutocomments( m_autocomments ); editor->setBackgroundColor( m_backgroundColor ); editor->setTextColor( m_textColor ); editor->setMatch( m_match ); editor->setHighlightCurrentLine( m_highlightCurrentLine ); editor->setMatchingColor( m_matchingColor ); editor->setCurrentLineColor( m_currentLineColor ); editor->setShowWhiteSpaces( m_displayWhiteSpaces ); editor->setRightMargin( m_rightMarginLine ); editor->displayEditorToolbar( m_displayEditorToolbars ); editor->setSyntaxColors ( m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords ); editor->setWordWrap(m_wordWrap); editor->setHideFindReplace(m_hideFindReplace); editor->smartClick = m_smartClick; if ( !editor->open(silentMode) ) { delete editor; QApplication::restoreOverrideCursor(); return 0; } editor->setTabStopWidth( m_tabStopWidth ); m_tabEditors->setCurrentIndex( m_tabEditors->addTab(editor, editor->shortFilename()+" ") ); editor->setFocus(); if ( numLine != -1 ) editor->gotoLine(numLine, moveTop); connect(editor, SIGNAL(editorModified(Editor *, bool)), this, SLOT(slotModifiedEditor( Editor *, bool)) ); connect(editor, SIGNAL(updateClasses(QString, QString)), this, SLOT(slotUpdateClasses(QString, QString)) ); connect(editor, SIGNAL(otherFileChanged()), this, SLOT(slotUpdateOtherFileActions())); if ( m_debug ) connect(editor, SIGNAL(breakpoint(QString, unsigned int, BlockUserData *)), m_debug, SLOT(slotBreakpoint(QString, unsigned int, BlockUserData *)) ); setCurrentFile(s); slotCurrentTabChanged( m_tabEditors->currentIndex() ); slotUpdateOtherFileActions(); QApplication::restoreOverrideCursor(); return editor; } // void MainImpl::toggleBookmark(Editor *editor, QString text, bool activate, QTextBlock block) { Bookmark bookmark; bookmark.first = editor; bookmark.second = block; int line = editor->currentLineNumber( block ); if ( activate ) { QString s = text; if ( s.length() > 50 ) s = s.left(50)+" ..."; QAction *action = new QAction(s, menuBookmarks); connect(action, SIGNAL(triggered()), this, SLOT(slotActivateBookmark())); // QAction *before = 0; QList actionsList = menuBookmarks->actions(); foreach(QAction *actionBefore, actionsList) { Bookmark bookmarkAction = actionBefore->data().value(); if ( bookmarkAction.first == editor && editor->currentLineNumber( bookmarkAction.second ) > line ) { before = actionBefore; break; } } // menuBookmarks->insertAction(before, action); QVariant v; v.setValue( bookmark ); action->setData( v ); actionActiveBookmark = action; } else { QList actionsList = menuBookmarks->actions(); foreach(QAction *action, actionsList) { Bookmark bookmarkAction = action->data().value(); if ( bookmarkAction.first == editor && bookmarkAction.second == block ) { delete action; break; } } } } // void MainImpl::slotActivateBookmark(QAction *action) { if ( action ) actionActiveBookmark = action; else actionActiveBookmark = (QAction *)sender(); Bookmark bookmark = actionActiveBookmark->data().value(); Editor *editor = 0; Editor *bookmarkEditor = bookmark.first; QTextBlock block = bookmark.second; foreach(Editor *edit, allEditors() ) { if ( edit == bookmarkEditor ) { editor = edit; break; } } if ( editor ) { QString filename = editor->filename(); int line = editor->currentLineNumber( block ); openFile(QStringList(filename), line); } } // void MainImpl::slotUpdateClasses(QString filename, QString buffer) { if ( !m_projectManager ) return; QString ext = "." + filename.section(".", -1, -1); QList projectsList; m_projectManager->childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = m_projectManager->findData(projectName, "projectDirectory"); QStringList files; if ( ext == ".cpp" ) m_projectManager->sources( m_projectManager->itemProject(projectName), files ); else m_projectManager->headers( m_projectManager->itemProject(projectName), files ); foreach(QString s, files) { if ( QDir::cleanPath(s) == QDir::cleanPath(filename) ) { QStringList parents = m_projectManager->parents(projectsList.at(nbProjects)); treeClasses->updateClasses(QDir::cleanPath(filename), buffer, parents, ext); } } } } // void MainImpl::slotModifiedEditor( Editor *editor, bool modified) { for (int i=0; icount(); i++) { if ( givenEditor(i) == editor ) { if ( modified && m_tabEditors->tabText(i).left(1) != "*" ) m_tabEditors->setTabText(i, "* "+m_tabEditors->tabText(i) ); if ( !modified && m_tabEditors->tabText(i).left(1) == "*" ) m_tabEditors->setTabText(i, m_tabEditors->tabText(i).mid(2) ); return; } } foreach(Editor *e, allEditors() ) { if( e == editor ) { if ( modified && e->windowTitle().left(1) != "*" ) e->setWindowTitle("* "+e->windowTitle() ); if ( !modified && e->windowTitle().left(1) == "*" ) e->setWindowTitle( e->windowTitle().mid(2) ); } } } // void MainImpl::slotRebuild() { slotBuild(true); } // void MainImpl::slotClean() { slotBuild(true, false); } // void MainImpl::slotCompile(bool automaticCompilation) { if( automaticCompilation && !m_automaticCompilation ) return; if( !m_projectManager ) return; Editor *editor = currentEditor(); if ( editor && Editor::suffixe( editor->filename() ).toLower() == "cpp" ) { if( automaticCompilation ) { editor->saveAsTemp(); editor->clearErrorsAndWarnings(); } if( !automaticCompilation ) { m_buildingGroup->setEnabled( false ); logBuild->clear(); dockBuild->show(); dockBuild->raise(); } if ( m_saveBeforeBuild && !automaticCompilation) slotSaveAll(); if ( !automaticCompilation ) { // // TODO should we raise the dockBuild ? // tabOutputs->setCurrentIndex( 0 ); m_projectsDirectoriesList << editor->directory(); } QString projectDirectory = m_projectManager->fileDirectory(editor->filename() ); QString filename = editor->filename(); if( automaticCompilation ) filename = editor->tempFilename(); Build* builder = new Build(this, m_qmakeName, m_makeName, m_makeOptions, projectDirectory+"/", false, false, true, filename); connect(builder, SIGNAL(finished()), builder, SLOT(deleteLater()) ); if( automaticCompilation ) { connect(builder, SIGNAL(finished()), editor, SLOT(slotEndBuild()) ); connect(builder, SIGNAL(message(QString, QString)), editor, SLOT(slotMessagesBuild(QString, QString)) ); } else { connect(builder, SIGNAL(finished()), this, SLOT(slotEndBuild()) ); connect(builder, SIGNAL(message(QString, QString)), logBuild, SLOT(slotMessagesBuild(QString, QString)) ); } connect(logBuild, SIGNAL(incErrors()), builder, SLOT(slotIncErrors()) ); connect(logBuild, SIGNAL(incWarnings()), builder, SLOT(slotIncWarnings()) ); builder->start(); } } // void MainImpl::slotBuild(bool clean, bool build, bool forceQmake, QString forceMode) { bool qmakeNeeded = false; if (!m_projectManager) { return; } if ( m_qmakeName.isEmpty() || m_makeName.isEmpty() ) { slotToolsControl(); return; } if ( actionDebug->text() == tr("Stop") && !slotDebug()) return; m_buildAfterDebug = false; if (forceMode.isEmpty()) forceMode = m_lastForcedMode; qmakeNeeded = m_projectManager->isModifiedProject(); if ( m_projectsDirectoriesList.count() == 0 ) { foreach(Editor *editor, allEditors() ) { editor->clearErrorsAndWarnings(); } m_buildingGroup->setEnabled( false ); logBuild->clear(); if ( m_saveBeforeBuild ) slotSaveAll(); dockBuild->show(); dockBuild->raise(); // m_projectsDirectoriesList = m_projectManager->buildableProjectsDirectories(); m_clean = clean; m_build = build; } QString projectDirectory = m_projectsDirectoriesList.first(); QString projectName = m_projectManager->projectName( projectDirectory ); QString makefilePath = projectDirectory + "/Makefile"; qmakeNeeded = qmakeNeeded || !QFile::exists(makefilePath) || forceQmake; if ( qmakeNeeded ) { m_configureCompletionNeeded = true; } m_builder = new Build(this, m_qmakeName, m_makeName, m_makeOptions, projectDirectory+"/"+projectName, qmakeNeeded|m_clean, m_clean, m_build, QString(), forceMode); connect(logBuild, SIGNAL(incErrors()), m_builder, SLOT(slotIncErrors()) ); connect(logBuild, SIGNAL(incWarnings()), m_builder, SLOT(slotIncWarnings()) ); connect(m_builder, SIGNAL(finished()), this, SLOT(slotEndBuild()) ); connect(m_builder, SIGNAL(finished()), m_builder, SLOT(deleteLater()) ); connect(m_builder, SIGNAL(message(QString, QString)), logBuild, SLOT(slotMessagesBuild(QString, QString)) ); foreach(Editor *editor, allEditors() ) { connect(m_builder, SIGNAL(message(QString, QString)), editor, SLOT(slotMessagesBuild(QString, QString)) ); } m_builder->start(); } void MainImpl::slotBuildRelease() { if (actionRelease_mode->isChecked()) { setQmakeForcedMode("release"); slotBuild(true, false, true, "release"); } else { slotForgetBuildMode(); } } void MainImpl::slotBuildDebug() { if (actionDebug_mode->isChecked()) { setQmakeForcedMode("debug"); slotBuild(true, false, true, "debug"); } else { slotForgetBuildMode(); } } void MainImpl::slotForgetBuildMode() { if (!m_lastForcedMode.isEmpty()) { setQmakeForcedMode(""); slotBuild(true, false, true); } } // void MainImpl::slotStopBuild() { m_projectsDirectoriesList = QStringList(QString()); m_debugAfterBuild = ExecuteNone; emit stopBuild(); } // void MainImpl::slotEndBuild() { if ( m_configureCompletionNeeded ) configureCompletion(m_projectsDirectoriesList.first()); if ( m_projectsDirectoriesList.count() ) m_projectsDirectoriesList.removeFirst(); if ( m_projectsDirectoriesList.count() ) slotBuild(); else { QString msg; Build* builder = (Build *)sender(); if ( builder->nbErrors()==0 && builder->nbWarnings()==0 ) msg = tr("Build finished without error"); else msg = tr("Build finished with")+" "; if ( builder->nbErrors() ) msg += QString::number(builder->nbErrors())+" "+tr("error(s)")+ (builder->nbWarnings() ? " "+tr("and")+ " " : QString(" ")); if ( builder->nbWarnings() ) msg += QString::number(builder->nbWarnings())+" "+tr("warning(s)")+" "; logBuild->slotMessagesBuild( QString("\n---------------------- "+msg+"----------------------\n"), ""); m_buildingGroup->setEnabled( true ); if ( m_debugAfterBuild ) slotDebug( (int)m_debugAfterBuild-1 ); } } // void MainImpl::slotFindFilesActivated(QListWidgetItem *item, QListWidgetItem *) { findLines->clear(); if ( !item ) return; QStringList list = item->data(Qt::UserRole).toStringList(); findLines->addItems( list ); } // void MainImpl::slotDoubleClickFindLines( QListWidgetItem *item) { QString texte = item->text(); int numLine = texte.section(":", 0, 0).section(" ", 1,1).toInt(); if ( numLine == 0 ) return; QListWidgetItem *it = findFiles->currentItem(); if ( !it ) it = findFiles->item(0); QString filename = it->data(Qt::UserRole+1).toString(); QApplication::setOverrideCursor(Qt::WaitCursor); openFile( QStringList( filename ), numLine, false, true); QApplication::restoreOverrideCursor(); } // void MainImpl::slotCut() { Editor *editor = currentEditor(); if ( editor ) editor->cut(); } // void MainImpl::slotPrint() { Editor *editor = currentEditor(); if ( editor ) editor->print(); } // void MainImpl::slotCurrentTabChanged(int) { foreach(Editor *editor, allEditors() ) { editor->setActiveEditor( editor == currentEditor() ); } } // void MainImpl::slotCopy() { Editor *editor = currentEditor(); if ( editor ) editor->copy(); } // void MainImpl::slotCompleteCode() { Editor *editor = currentEditor(); if ( editor ) editor->completeCode(); } // void MainImpl::slotPaste() { Editor *editor = currentEditor(); if ( editor ) editor->paste(); } // void MainImpl::slotUndo() { Editor *editor = currentEditor(); if ( editor ) editor->undo(); } // void MainImpl::slotIndent() { Editor *editor = currentEditor(); if ( editor ) editor->slotIndent(); } // void MainImpl::slotUnindent() { Editor *editor = currentEditor(); if ( editor ) editor->slotUnindent(); } // void MainImpl::slotRedo() { Editor *editor = currentEditor(); if ( editor ) editor->redo(); } // void MainImpl::slotSelectAll() { Editor *editor = currentEditor(); if ( editor ) editor->selectAll(); } // void MainImpl::slotFind() { Editor *editor = currentEditor(); if ( editor ) editor->find(); } // void MainImpl::slotReplace() { Editor *editor = currentEditor(); if ( editor ) editor->replace(); } // void MainImpl::slotGotoLine() { Editor *editor = currentEditor(); if ( editor ) editor->dialogGotoLine(); } // void MainImpl::slotFindContinue() { Editor *editor = currentEditor(); if ( editor ) editor->findContinue(); } // void MainImpl::slotFindPrevious() { Editor *editor = currentEditor(); if ( editor ) editor->findPrevious(); } // void MainImpl::slotExecuteWithoutDebug() { slotDebug(true); } // bool MainImpl::modifiedEditors() { bool modified = false; foreach(Editor *editor, allEditors() ) { if ( editor ) { if ( editor->isModified() ) modified = true; } } return modified; } // bool MainImpl::slotDebug(bool executeOnly) { if (!m_projectManager) { return false; } if ( actionDebug->text() == tr("Start") && ( m_projectManager->qmake() || modifiedEditors() ) ) { // Proposer sauvegarde int choice = QMessageBox::question(this, "QDevelop", tr("The project has been modified, do you want to save your changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( choice == 2 ) return false; if ( choice == 0 ) { m_debugAfterBuild = (ExecuteVersion)(executeOnly+1); slotBuild(); return true; } } QString exeName; if ( actionDebug->text() == tr("Stop") ) { int choice = QMessageBox::question(this, "QDevelop", tr("Stop debugging ?"), tr("Yes"), tr("No") ); if ( choice == 1 ) return false; } else exeName = m_projectManager->executableName( executeOnly ? "release" : "debug"); executeOnly = m_projectManager->isReleaseVersion(); m_debugAfterBuild = ExecuteNone; if ( exeName.isEmpty() && actionDebug->text() != tr("Stop")) { QMessageBox::critical(0, "QDevelop", tr("The program doesn't exist,")+"\n"+ tr("run Build."),tr("Ok") ); return false; } emit resetExecutedLine(); if ( actionDebug->text() == tr("Stop") ) { emit stopDebug(); m_debug->wait(); delete m_debug; m_debug = 0; slotEndDebug(); return true; } actionDebug->setText(tr("Stop")); actionDebug->setIcon( QIcon(":/toolbar/images/stop.png") ); actionDebug->setShortcut( tr("Shift+F5") ); actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setEnabled( !executeOnly ); logDebug->clear(); registersImpl->registers(QString()); dockOutputs->show(); dockOutputs->raise(); Parameters parameters = m_projectManager->parameters(); if ( parameters.workingDirectory.isEmpty() ) parameters.workingDirectory = m_projectManager->projectDirectoryOfExecutable(); m_stack->setDirectory( m_projectManager->projectDirectoryOfExecutable() ); m_debug = new Debug(this, registersImpl, m_gdbName, parameters, exeName, executeOnly); if ( !executeOnly ) { foreach(Editor *editor, allEditors() ) { connect(editor, SIGNAL(breakpoint(QString, unsigned int, BlockUserData *)), m_debug, SLOT(slotBreakpoint(QString, unsigned int, BlockUserData *)) ); editor->emitListBreakpoints(); } QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } if ( !executeOnly ) connect(m_debug, SIGNAL(onPause()), this, SLOT(slotOnPause()) ); connect(m_debug, SIGNAL(endDebug()), this, SLOT(slotEndDebug()) ); connect(m_debug, SIGNAL(message(QString)), this, SLOT(slotMessagesDebug(QString)) ); connect(m_debug, SIGNAL(debugVariables( QList )), this, SLOT(slotDebugVariables( QList )) ); m_debug->start(); return true; } // void MainImpl::slotDebugVariables( QList list) { m_stack->clear(); while ( tableLocalVariables->rowCount() ) tableLocalVariables->removeRow(0); foreach(Variable var, list ) { QTableWidgetItem *newItem1 = new QTableWidgetItem(var.name); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(var.type); newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(var.address); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem4 = new QTableWidgetItem(var.content); newItem4->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); // if ( var.kind == Debug::Local ) { int row = tableLocalVariables->rowCount(); tableLocalVariables->setRowCount(row+1); tableLocalVariables->setItem(row, 0, newItem1); tableLocalVariables->setItem(row, 1, newItem2); tableLocalVariables->setItem(row, 2, newItem3); tableLocalVariables->setItem(row, 3, newItem4); } else if ( var.kind == Debug::OtherArgs ) { for (int i=0; i < tableOtherVariables->rowCount(); i++) { if ( tableOtherVariables->item(i, 0)->text() == var.name ) { tableOtherVariables->setItem(i, 1, newItem2); tableOtherVariables->setItem(i, 2, newItem3); tableOtherVariables->setItem(i, 3, newItem4); } } } } } // void MainImpl::slotEndDebug() { m_buildingGroup->setEnabled( true ); actionDebug->setText(tr("Start")); actionDebug->setShortcut( tr("F5") ); actionDebug->setIcon( QIcon(":/toolbar/images/dbgrun.png") ); actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setText( tr("Abort") ); actionStopDebug->setToolTip( tr("Abort") ); while ( tableLocalVariables->rowCount() ) tableLocalVariables->removeRow(0); emit resetExecutedLine(); if ( m_buildAfterDebug ) slotBuild(); } // void MainImpl::slotMessagesDebug(QString message) { char identifiantPointArret[] = { 26, 26, 0x0 }; if ( message.indexOf( identifiantPointArret )==0 ) { actionStopDebug->setEnabled( true ); QString filename = message.section(":", 0, -5).mid(2); int numLine = message.section(":", -4, -4).toInt(); if ( !filename.isEmpty() && numLine ) { Editor *editor = openFile( QStringList(filename), numLine, true); if ( editor ) editor->setExecutedLine( numLine ); slotOnPause(); setWindowState(windowState() & ~Qt::WindowMinimized); raise(); activateWindow(); } } else if ( message.simplified().indexOf( '#' ) == 0 ) { m_stack->addLine( message ); } else if ( message.indexOf( "InfoSources" ) == 0 ) { m_stack->infoSources( message ); } else if ( message.indexOf( "Registers" ) == 0 ) { registersImpl->registers( message ); } else if ( message.indexOf( "Breakpoint" ) == 0 ) { // Nothing } else { logDebug->append( message ); } } // void MainImpl::slotContinueDebug() { if ( actionStopDebug->text() == tr("Abort") ) { // Ne marche pas avec gdb sous Windows #ifdef Q_OS_LINUX emit pauseDebug(); #else logDebug->append(tr("Stopping is not possible under Windows. Put breakpoints.")); #endif } else { actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setText( tr("Abort") ); actionStopDebug->setToolTip( tr("Abort") ); emit resetExecutedLine(); emit debugCommand("cont\n"); } } // void MainImpl::slotStepInto() { emit resetExecutedLine(); emit debugCommand("step\n"); } // void MainImpl::slotStepOver() { emit resetExecutedLine(); emit debugCommand("next\n"); } // void MainImpl::slotStepOut() { emit resetExecutedLine(); emit debugCommand("finish\n"); } // // void MainImpl::slotEditToGdb(QString texte) { logDebug->append( texte ); emit debugCommand(texte+"\n"); } // void MainImpl::slotOnPause() { actionStopDebug->setIcon( QIcon(":/toolbar/images/resume.png") ); actionStopDebug->setToolTip( tr("Continue") ); actionStopDebug->setText( tr("Continue") ); } // void MainImpl::updateActionsRecentsFiles() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentFiles"); QStringList files = settings.value("RecentFilesList").toStringList(); QStringList existingFiles; foreach (QString fileName, files) { if (QFile(fileName).exists()) existingFiles.push_back(fileName); } if (existingFiles.size() < files.size()) { settings.setValue("RecentFilesList", files); files = existingFiles; } int numRecentFiles = qMin(files.size(), (int)maxRecentsFiles); for (int i = 0; i < numRecentFiles; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i])); actionsRecentsFiles[i]->setText(text); actionsRecentsFiles[i]->setData("Recent|"+files[i]); actionsRecentsFiles[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentsFiles; ++j) actionsRecentsFiles[j]->setVisible(false); } // void MainImpl::updateActionsRecentsProjects() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentProjects"); QStringList files = settings.value("RecentProjectsList").toStringList(); QStringList existingFiles; foreach (QString fileName, files) { if (QFile(fileName).exists()) existingFiles.push_back(fileName); } if (existingFiles.size() < files.size()) { settings.setValue("RecentProjectsList", files); files = existingFiles; } int numRecentFiles = qMin(existingFiles.size(), (int)maxRecentsProjects); for (int i = 0; i < numRecentFiles; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i])); actionsProjetsRecents[i]->setText(text); actionsProjetsRecents[i]->setData("Recent|"+files[i]); actionsProjetsRecents[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentsProjects; ++j) actionsProjetsRecents[j]->setVisible(false); } // void MainImpl::slotOpenRecentFile() { QAction *action = qobject_cast(sender()); if (action) openFile(QStringList(action->data().toString().remove("Recent|"))); } // void MainImpl::slotOpenRecentProject() { QAction *action = qobject_cast(sender()); if (action) openProject(action->data().toString().remove("Recent|")); } // QString MainImpl::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); } // void MainImpl::setCurrentFile(const QString &file) { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentFiles"); QStringList files = settings.value("RecentFilesList").toStringList(); files.removeAll(file); files.prepend(file); while (files.size() > maxRecentsFiles) files.removeLast(); settings.setValue("RecentFilesList", files); updateActionsRecentsFiles(); } // void MainImpl::setCurrentProject(const QString &file) { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentProjects"); QStringList files = settings.value("RecentProjectsList").toStringList(); files.removeAll(file); files.prepend(file); while (files.size() > maxRecentsProjects) files.removeLast(); settings.setValue("RecentProjectsList", files); updateActionsRecentsProjects(); } // void MainImpl::slotFindInFiles() { if ( !m_findInFiles ) { QStringList directories; if ( m_projectManager ) { QList listeProjets; m_projectManager->childsList(0, "PROJECT", listeProjets); for (int nbProjets=0; nbProjets < listeProjets.count(); nbProjets++) { directories << m_projectManager->projectDirectory(listeProjets.at(nbProjets)->text(0)); } } m_findInFiles = new FindFileImpl(this, directories, findFiles, findLines); } else { // BK - allow find in files dialog to be moved around // and on signal set the focus. QRect rect = m_findInFiles->geometry(); m_findInFiles->hide(); m_findInFiles->setGeometry(rect); } //read selected text or current word Editor *editor = currentEditor(); if ( editor ) { m_findInFiles->setDefaultWord(editor->selection()); } dockFindInFiles->show(); dockFindInFiles->raise(); m_findInFiles->show(); // Not delete dialog to save options, location and pattern on next showing. } // void MainImpl::slotToolsControl(bool show) { ToolsControlImpl *toolsControlImpl = new ToolsControlImpl( this ); if ( (!toolsControlImpl->toolsControl() && m_checkEnvironmentOnStartup ) || show ) // toolsControlImpl->toolsControl() is always called so that there was a check done - if it isn't called, all tools will appear valid if m_checkEnvironmentOnStartup is disabled toolsControlImpl->exec(); m_qmakeName = toolsControlImpl->qmakeName(); m_makeName = toolsControlImpl->makeName(); m_gdbName = toolsControlImpl->gdbName(); m_ctagsName = toolsControlImpl->ctagsName(); m_linguistName = toolsControlImpl->linguistName(); m_lupdateName = toolsControlImpl->lupdateName(); m_lreleaseName = toolsControlImpl->lreleaseName(); m_designerName = toolsControlImpl->designerName(); // m_ctagsIsPresent = toolsControlImpl->ctagsIsPresent(); m_checkEnvironmentOnStartup = toolsControlImpl->checkEnvOnStartup(); m_assistant->setName( toolsControlImpl->assistantName() ); m_designer->setName( toolsControlImpl->designerName() ); m_assistant->setqVersion( toolsControlImpl->qVersion() ); delete toolsControlImpl; treeClasses->setCtagsIsPresent( m_ctagsIsPresent ); treeClasses->setCtagsName( m_ctagsName ); } // void MainImpl::slotAbout() { QDialog about; Ui::About ui; ui.setupUi( &about ); ui.version->setText( tr("Version %1").arg(VERSION) ); about.exec(); } // void MainImpl::slotAddDebugVariable() { bool ok; QString var = QInputDialog::getText(this, "QDevelop", tr("New Variable:"), QLineEdit::Normal, "", &ok); if (!ok || var.isEmpty()) return; for (int i=0; i < tableOtherVariables->rowCount(); i++) { if ( tableOtherVariables->item(i, 0)->text() == var ) { QMessageBox::warning(0, "QDevelop", tr("The variable \"%1\"\n already exists.").arg(var), tr("Cancel") ); return; } } QTableWidgetItem *newItem1 = new QTableWidgetItem(var); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(); newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem4 = new QTableWidgetItem(); newItem4->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); // int row = tableOtherVariables->rowCount(); tableOtherVariables->setRowCount(row+1); tableOtherVariables->setItem(row, 0, newItem1); tableOtherVariables->setItem(row, 1, newItem2); tableOtherVariables->setItem(row, 2, newItem3); tableOtherVariables->setItem(row, 3, newItem4); QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } // void MainImpl::slotRemoveDebugVariable() { if ( tableOtherVariables->currentRow() == -1 ) return; tableOtherVariables->removeRow( tableOtherVariables->currentRow() ); QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } // void MainImpl::slotOpenFile() { if ( !m_projectManager ) return; OpenFileImpl dialog(this, m_projectManager, this); dialog.exec(); } // void MainImpl::loadPlugins() { QStringList entryList; #if defined(Q_OS_WIN) if ( m_pluginsDirectory.isEmpty() ) { QDir dir = QDir(qApp->applicationDirPath()+"/plugins"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } else { QDir dir = QDir(m_pluginsDirectory); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } #else if ( m_pluginsDirectory.isEmpty() ) { QDir dir = QDir(qApp->applicationDirPath()+"/../lib/qdevelop/plugins/"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } dir = QDir(QDir::homePath() + "/.qdevelop/plugins"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } // for linux only dir = QDir(qApp->applicationDirPath()+"/plugins/"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } else { QDir dir = QDir(m_pluginsDirectory); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } #endif // foreach (QString fileName, entryList) { QPluginLoader loader(fileName); QObject *plugin = loader.instance(); if (plugin) { SimplePluginInterface *iSimple = qobject_cast(plugin); if (iSimple) { QAction *action = new QAction(iSimple->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotSimplePlugin())); menuPlugins->addAction(action); if ( iSimple->hasConfigDialog() ) { QAction *action = new QAction(iSimple->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotConfigPlugin())); menuPluginsSettings->addAction(action); } } TextEditInterface *iTextEdit = qobject_cast(plugin); if (iTextEdit) { QAction *action = new QAction(iTextEdit->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotTextEditPlugin())); menuPlugins->addAction(action); if ( iTextEdit->hasConfigDialog() ) { QAction *action = new QAction(iTextEdit->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotConfigPlugin())); menuPluginsSettings->addAction(action); } } } } if ( menuPlugins->actions().isEmpty() ) { delete menuPlugins; delete menuPluginsSettings; } } // void MainImpl::slotSimplePlugin() { QAction *action = qobject_cast(sender()); SimplePluginInterface * iSimple = qobject_cast(action->parent()); iSimple->start(this); } // void MainImpl::slotTextEditPlugin() { Editor *editor = currentEditor(); if ( !editor ) return; QAction *action = qobject_cast(sender()); TextEditInterface *iTextEdit = qobject_cast(action->parent()); editor->textPlugin( iTextEdit ); } // void MainImpl::slotConfigPlugin() { QAction *action = qobject_cast(sender()); TextEditInterface *iTextEdit = qobject_cast(action->parent()); if ( iTextEdit ) iTextEdit->config(); SimplePluginInterface * iSimple = qobject_cast(action->parent()); if ( iSimple ) iSimple->config(); } // void MainImpl::resetProjectsDirectoriesList() { if ( m_projectsDirectoriesList.count() ) m_projectsDirectoriesList = QStringList(QString()); } // void MainImpl::resetDebugAfterBuild() { m_debugAfterBuild = ExecuteNone; } // void MainImpl::slotNewQtVersion() { if( m_buildQtDatabase ) { QMessageBox::information(this, "QDevelop", tr("The Qt database building is already in progress.")); return; } QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); QFile::remove( getQDevelopPath() + "qdevelop.db" ); m_buildQtDatabaseAsked = true; checkQtDatabase(); } // void MainImpl::checkQtDatabase() { if( !QFile::exists(ctagsName()) ) return; actionNewQtVersion->setEnabled(false); m_buildQtDatabase = new InitCompletion (this, treeClasses); connect(m_buildQtDatabase, SIGNAL(finished()), m_buildQtDatabase, SLOT(deleteLater()) ); connect(m_buildQtDatabase, SIGNAL(showMessage(QString)), this, SLOT(slotShowMessage(QString)) ); connect(m_buildQtDatabase, SIGNAL(finished()), this, SLOT(slotBuildQtDatabaseEnded()) ); QStringList includes; includes << m_includeDirectory; #ifdef WIN32 includes << QDir::cleanPath( QFileInfo(m_qmakeName).absoluteDir().path()+"/../src" ) ; #endif m_buildQtDatabase->setCtagsCmdPath( ctagsName() ); m_buildQtDatabase->setQtInclude( includes ); m_buildQtDatabase->slotInitParse(InitCompletion::CheckQtDatabase, QString(), QString(), true, false, true, QString()); // } void MainImpl::slotQmake() { slotBuild(false, false, true); } // void MainImpl::slotShowMessage(QString message) { QMessageBox::information(this, "QDevelop", message); } // void MainImpl::slotBuildQtDatabaseEnded() { actionNewQtVersion->setEnabled(true); m_buildQtDatabase = 0; if( m_buildQtDatabaseAsked ) QMessageBox::information(this, "QDevelop", tr("The Qt classes database build is ended.") ); } QList MainImpl::allEditors() { QList editorList; for (int i=0; icount(); i++) editorList.append( givenEditor(i) ); return editorList; } void MainImpl::slotUpdateOtherFileActions() { Editor *editor = currentEditor(); if ( !m_displayEditorToolbars && editor && editor->hasOtherFile() ) { actionOtherFile->setToolTip(editor->getOtherFileToolTip()); actionOtherFile->setIcon(QIcon(editor->getOtherFileIcon())); separatorOtherFile->setVisible(true); actionOtherFile->setVisible(true); } else { separatorOtherFile->setVisible(false); actionOtherFile->setVisible(false); } } void MainImpl::on_actionEditor_mode_triggered() { QWidget *w; bool editMode = actionEditor_mode->isChecked(); QList dockWidgets = findChildren(); foreach( w, dockWidgets ) { if (editMode) { toolbarStatus[w] = w->isVisible(); w->setVisible( false ); } else w->setVisible( toolbarStatus[w] ); } } // set up the main window for "full view" // docks on the left, right and bottom, all tabified // tabs in the sides "win" over the bottom group, as I think // it looks better. void MainImpl::on_actionFullDocksView_triggered() { setUpdatesEnabled( false ); blockSignals( true ); setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea ); setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); addDockWidget( Qt::BottomDockWidgetArea, dockBuild ); addDockWidget( Qt::BottomDockWidgetArea, dockOutputs ); addDockWidget( Qt::BottomDockWidgetArea, dockVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockOtherVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockFindInFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockClasses ); addDockWidget( Qt::RightDockWidgetArea , dockCallsStack ); addDockWidget( Qt::RightDockWidgetArea , dockRegisters ); // left docks tabifyDockWidget( dockFiles, dockClasses ); // bottom docks tabifyDockWidget( dockBuild, dockOutputs ); tabifyDockWidget( dockBuild, dockVariables ); tabifyDockWidget( dockBuild, dockOtherVariables ); tabifyDockWidget( dockBuild, dockFindInFiles ); // right docks tabifyDockWidget( dockCallsStack, dockRegisters ); foreach( QDockWidget *dock, findChildren() ) { dock->setFloating( false ); dock->show(); } // raise the first tabs in each group dockBuild->raise(); dockFiles->raise(); dockCallsStack->raise(); // just in case :) actionEditor_mode->setChecked( false ); blockSignals( false ); setUpdatesEnabled( true ); } // this is my favorite display mode, it gets it's own method // and menu item :) void MainImpl::on_actionMinimalDocksView_triggered() { setUpdatesEnabled( false ); blockSignals( true ); setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea ); setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); addDockWidget( Qt::BottomDockWidgetArea, dockBuild ); addDockWidget( Qt::BottomDockWidgetArea, dockOutputs ); addDockWidget( Qt::BottomDockWidgetArea, dockVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockOtherVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockFindInFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockClasses ); addDockWidget( Qt::RightDockWidgetArea , dockCallsStack ); addDockWidget( Qt::RightDockWidgetArea , dockRegisters ); // left docks splitDockWidget( dockFiles, dockClasses, Qt::Vertical ); // bottom docks tabifyDockWidget( dockBuild, dockOutputs ); tabifyDockWidget( dockBuild, dockVariables ); tabifyDockWidget( dockBuild, dockOtherVariables ); tabifyDockWidget( dockBuild, dockFindInFiles ); // right docks splitDockWidget( dockCallsStack, dockRegisters, Qt::Vertical ); foreach( QDockWidget *dock, findChildren() ) { dock->setFloating( false ); dock->hide(); } dockBuild->raise(); // just in case :) actionEditor_mode->setChecked( false ); // only visible docks in this mode dockBuild->show(); dockOutputs->show(); dockFiles->show(); dockClasses->show(); setUpdatesEnabled( true ); blockSignals( false ); } void MainImpl::automaticCompilationState(Editor *editor, int state) { if( state == 2 ) m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/error.png")); else if( state == 1 ) m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/warning.png")); else m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/empty-16x16.png")); } void MainImpl::slotNextWarningError() { if( currentEditor() ) currentEditor()->nextWarningError(); } void MainImpl::slotPreviousWarningError() { if( currentEditor() ) currentEditor()->previousWarningError(); } void MainImpl::slotClearAllWarningsErrors() { foreach(Editor *editor, allEditors() ) { editor->clearErrorsAndWarnings(); automaticCompilationState(editor, 0); } } qdevelop-v0.28/src/lineedit.h0000644000175000017500000000226511362261066015171 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef LINEEDIT_H #define LINEEDIT_H // #include // class LineEdit : public QLineEdit { public: LineEdit( QWidget* parent); protected: virtual void mousePressEvent ( QMouseEvent * ); private: signals: protected slots: public slots: }; // #endif // LINEEDIT_H qdevelop-v0.28/src/projectmanager.cpp0000644000175000017500000024741711362261066016742 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "mainimpl.h" #include "projectmanager.h" #include "ui_exechoice.h" #include "addexistantimpl.h" #include "addnewimpl.h" #include "addnewclassimpl.h" #include "addscopeimpl.h" #include "misc.h" #include "newprojectimpl.h" #include "projectpropertieimpl.h" #include "subclassingimpl.h" #include "parametersimpl.h" #include "tabwidget.h" #include "editor.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // ProjectManager::ProjectManager(MainImpl * parent, TreeProject *treeFiles, TreeClasses *treeClasses) : m_parent(parent), m_treeFiles(treeFiles), m_treeClasses(treeClasses) {} void ProjectManager::init(QString name) { m_treeFiles->clear(); m_treeClasses->clear(); // QTreeWidgetItem *newProjectItem = new QTreeWidgetItem(m_treeFiles); // // connect(m_treeFiles, SIGNAL(addNewItem(QTreeWidgetItem *, QString)), this, SLOT(slotAddNewItem(QTreeWidgetItem *, QString))); connect(m_treeFiles, SIGNAL(addNewClass(QTreeWidgetItem *)), this, SLOT(slotAddNewClass(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addExistingsFiles(QTreeWidgetItem *)), this, SLOT(slotAddExistingFiles(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addScope(QTreeWidgetItem *)), this, SLOT(slotAddScope(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(lupdate(QTreeWidgetItem *)), this, SLOT(slotlupdate(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(lrelease(QTreeWidgetItem *)), this, SLOT(slotlrelease(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addSubProject(QTreeWidgetItem *)), this, SLOT(slotAddSubProject(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(projectPropertie(QTreeWidgetItem *)), this, SLOT(slotProjectPropertie(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(open(QTreeWidgetItem *, int)), m_parent, SLOT(slotDoubleClickTreeFiles(QTreeWidgetItem *, int))); connect(m_treeFiles, SIGNAL(deleteItem(QTreeWidgetItem *)), this, SLOT(slotDeleteItem(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(renameItem(QTreeWidgetItem *)), this, SLOT(slotRenameItem(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(subclassing(QTreeWidgetItem *)), this, SLOT(slotSubclassing(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(previewForm(QTreeWidgetItem *)), this, SLOT(slotPreviewForm(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(sort()), this, SLOT(slotSort())); m_isModifiedProject = false; m_previewForm = 0; m_parameters.isEmpty = true; loadProject(name, newProjectItem); parseTreeClasses(); loadProjectSettings(); } // ProjectManager::~ProjectManager() { QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( m_treeFiles->topLevelItem ( 0 ) ) m_treeClasses->toDB( directory ); m_treeFiles->clear(); m_treeClasses->clear(); if ( m_previewForm ) delete m_previewForm; QSqlDatabase::database().close(); } // QStringList ProjectManager::parents(QTreeWidgetItem *it) { QStringList parentsList; if ( !it ) return QStringList(); QTreeWidgetItem *parent = it; if ( toKey( it->data(0, Qt::UserRole) ) == "PROJECT" || toKey( it->data(0, Qt::UserRole) ) == "SCOPE" ) parentsList.prepend( it->text( 0 ) ); // while ( (parent = parent->parent()) ) { if ( toKey( parent->data(0, Qt::UserRole) ) == "PROJECT" || toKey( parent->data(0, Qt::UserRole) ) == "SCOPE" ) parentsList.prepend( parent->text( 0 ) ); } return parentsList; } // void ProjectManager::parseTreeClasses(bool force) { if ( !m_parent->showTreeClasses() ) return; m_treeClasses->clear(); QString directory = projectDirectory( m_treeFiles->topLevelItem( 0 ) ); if ( QFile::exists( directory + "/" + SETTINGS_FILE_NAME ) && !force) { m_treeClasses->fromDB( directory ); } else { // QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); QStringList files; sources(projectsList.at(nbProjects), files ); headers(projectsList.at(nbProjects), files ); files.sort(); extern QSplashScreen *splash; QProgressBar *bar = 0; if ( !splash ) { bar = new QProgressBar( 0 ); bar->setStyle( new QPlastiqueStyle() ); QRect screenGeometry = QDesktopWidget().screenGeometry(); bar->setGeometry( (screenGeometry.width()-(screenGeometry.width()/8))/2, (screenGeometry.height()-30)/2, screenGeometry.width()/8, 30 ); bar->setWindowFlags( Qt::Tool | Qt::WindowStaysOnTopHint ); bar->setAlignment( Qt::AlignHCenter ); bar->setMaximum( files.count() ); bar->setFormat( tr("Project parsing")+" %p%" ); bar->show(); } int value = 0; foreach(QString s, files) { QStringList parentsList = parents(projectsList.at(nbProjects)); QString buffer; Editor *editor = 0; foreach(Editor *ed, m_parent->allEditors() ) { if ( ed->filename() == s) { editor = ed; } } if ( editor ) { buffer = editor->toPlainText(); } else { QFile file(s); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; buffer = file.readAll(); file.close(); } m_treeClasses->updateClasses(s, buffer, parentsList, "."+s.section(".", -1, -1)); if ( !splash ) bar->setValue( value++ ); else splash->showMessage(QObject::tr("Current project parsing")+" "+QString::number((100/files.count())*value++)+"%", Qt::AlignRight | Qt::AlignTop, Qt::white); } if ( !splash ) delete bar; } } } // Parameters ProjectManager::parameters() { if ( m_parameters.isEmpty ) { ParametersImpl *parametersimpl = new ParametersImpl(0); m_parameters = parametersimpl->parameters(); delete parametersimpl; } m_parameters.isEmpty = false; return m_parameters; } // void ProjectManager::setParameters(Parameters p) { m_parameters = p; m_parameters.isEmpty = false; } // QStringList ProjectManager::dependpath(QTreeWidgetItem *it) { if ( !it ) return QStringList(); while ( toKey( it->data(0, Qt::UserRole) ) != "PROJECT" ) it = it->parent(); QTreeWidgetItem *itDepend = 0; for (int i=0; ichildCount(); i++) { if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "DEPENDPATH" ) { itDepend = it->child(i); break; } } if ( !itDepend ) return QStringList(); QStringList path; for (int i=0; ichildCount(); i++) { path << itDepend->child( i )->text(0); } return path; } // bool ProjectManager::close() { QTreeWidgetItem *it = item(m_treeFiles->topLevelItem ( 0 ), "PROJECT", Key); if ( !it ) return true; QString projectName = it->text(0); if ( isModifiedProject() ) { // Save? int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return false; if ( rep == 0 ) { slotSaveProject(); } } return true; } // void ProjectManager::saveProjectSettings() { // Save opened files QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( !connectDB( directory + "/" + SETTINGS_FILE_NAME ) ) return; QSqlQuery query(QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME) ); QString queryString = "delete from editors where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from bookmarks where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from breakpoints where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from config where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from projectsDirectories where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } foreach(Editor *editor, m_parent->allEditors() ) { if ( editor ) { QString filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO editors (filename, scrollbar, numline) " "VALUES (:filename, :scrollbar, :numline)"); query.bindValue(":filename", filename); query.bindValue(":scrollbar", editor->verticalScrollBar()); query.bindValue(":numline", editor->currentLineNumber()); if ( !query.exec() ) qDebug() << query.lastError(); foreach(int line, editor->bookmarksList()) { filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO bookmarks (filename, numline) " "VALUES (:filename, :numline)"); query.bindValue(":filename", filename); query.bindValue(":numline", line); if ( !query.exec() ) qDebug() << query.lastError(); } foreach(QTextBlock block, editor->breakpointsList()) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO breakpoints (filename, numline, breakpointCondition, isTrue) " "VALUES (:filename, :numline, :breakpointCondition, :isTrue)"); query.bindValue(":filename", filename); query.bindValue(":numline", editor->currentLineNumber(block)); query.bindValue(":breakpointCondition", blockUserData->breakpointCondition); query.bindValue(":isTrue", blockUserData->isTrue); if ( !query.exec() ) qDebug() << query.lastError(); } } } // QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); QString srcDir = srcDirectory( itemProject(projectName) ); srcDir = QDir( projectDir ).relativeFilePath( srcDir ); QString uiDir = uiDirectory( itemProject(projectName) ); uiDir = QDir( projectDir ).relativeFilePath( uiDir ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO projectsDirectories (projectName, srcDirectory, uiDirectory) " "VALUES (:projectName, :srcDirectory, :uiDirectory)"); query.bindValue(":projectName", projectName); query.bindValue(":srcDirectory", srcDir); query.bindValue(":uiDirectory", uiDir); if ( !query.exec() ) qDebug()<<"projectsDirectories" << query.lastError(); } // query.prepare("INSERT INTO config (key, value) " "VALUES (:key, :value)"); query.bindValue(":key", "currentEditor"); if ( m_parent->tabEditors()->count() ) query.bindValue(":value", QString::number( m_parent->tabEditors()->currentIndex()) ); else query.bindValue(":value", "-1"); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); query.bindValue(":key", "showAsKrawek"); query.bindValue(":value", QString::number( m_treeFiles->showAsKrawek() ) ); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); query.bindValue(":key", "forceQmakeMode"); query.bindValue(":value", m_parent->qmakeForcedMode() ); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); } // void ProjectManager::loadProjectSettings() { // Save opened files QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( !connectDB( directory + "/" + SETTINGS_FILE_NAME ) ) return; QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("select * from editors where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int scrollbar = query.value(1).toInt(); int numline = query.value(2).toInt(); m_parent->openFile( QStringList( filename ) ); if ( m_parent->tabEditors()->count() && numline ) { m_parent->givenEditor( m_parent->tabEditors()->count()-1 )->setVerticalScrollBar( scrollbar ); m_parent->givenEditor( m_parent->tabEditors()->count()-1 )->gotoLine( numline,false ); } } // query.prepare("select * from bookmarks where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int line = query.value(1).toInt(); Editor *editor = m_parent->openFile( QStringList(filename) ); if ( editor ) editor->toggleBookmark( line ); } // query.prepare("select * from breakpoints where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int line = query.value(1).toInt(); QString breakpointCondition = query.value(2).toString(); bool isTrue = query.value(3).toBool(); Editor *editor = m_parent->openFile( QStringList(filename) ); if ( editor ) editor->toggleBreakpoint(line, breakpointCondition, isTrue); } // query.prepare("select * from config where 1"); query.exec(); while (query.next()) { int currentEditor = -1; QString key = query.value( 0 ).toString(); if( key == "currentEditor" ) { currentEditor = query.value( 1 ).toString().toInt(); if ( currentEditor != -1 ) m_parent->tabEditors()->setCurrentIndex( currentEditor ); } else if( key == "showAsKrawek" ) { bool showAsKrawek = query.value( 1 ).toString().toInt(); if( showAsKrawek ) m_treeFiles->slotShowAsKrawek(); } else if ( key == "forceQmakeMode" ) { m_parent->setQmakeForcedMode(query.value( 1 ).toString()); } } // query.prepare("select * from projectsDirectories where 1"); query.exec(); while (query.next()) { QString projectName = query.value( 0 ).toString(); QString projectDir = projectDirectory( projectName ); QString srcDir = query.value( 1 ).toString(); srcDir = QDir( projectDir ).absoluteFilePath( srcDir ); QString uiDir = query.value( 2 ).toString(); uiDir = QDir( projectDir ).absoluteFilePath( uiDir ); QTreeWidgetItem *itProject = itemProject( projectName ); setSrcDirectory(itProject, srcDir); setUiDirectory(itProject, uiDir); } } // void ProjectManager::slotAddExistingFiles(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString plateforme; QStringList filesList; AddExistantImpl *window = new AddExistantImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { //window->comboProjects->addItem( projectName, QVariant(reinterpret_cast(projectsList.at(nbProjects)))); window->comboProjects->addItem( projectName, addressToVariant( projectsList.at(nbProjects) ) ); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } //window->comboProjects->addItem( nomScope, QVariant(reinterpret_cast(listeScope.at(nbScope)))); window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->slotComboProjects( window->comboProjects->currentText() ); QVariant variant; if ( window->exec() == QDialog::Accepted ) { projectName = window->comboProjects->currentText(); QString line = window->filename->text(); filesList = line.split(","); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); projectDir = projectDirectory( item ); setQmake( projectFilename(item) ); foreach(QString filename, filesList) { filename = filename.remove("\"").simplified(); filename = QDir(projectDir).relativeFilePath(filename).replace("\\", "/"); insertFile(item, filename); } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotAddNewClass(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString absoluteFilename; QString plateforme; QStringList filesList; AddNewClassImpl *window = new AddNewClassImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->on_comboProjects_currentIndexChanged( window->comboProjects->currentIndex() ); if ( window->exec() == QDialog::Accepted ) m_isModifiedProject = true; delete window; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotAddNewItem(QTreeWidgetItem *it, QString kind) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString absoluteFilename; QString plateforme; QStringList filesList; AddNewImpl *window = new AddNewImpl(this); if ( !kind.isEmpty() ) { if ( kind == "SOURCES" ) window->source->setChecked(true); else if ( kind == "HEADERS" ) window->header->setChecked(true); else if ( kind == "FORMS" ) window->dialog->setChecked(true); else if ( kind == "RESOURCES" ) window->resource->setChecked(true); else if ( kind == "TRANSLATIONS" ) window->translation->setChecked(true); } QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it || projectsList.at(nbProjects) == it->parent() ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->slotComboProjects( window->comboProjects->currentText() ); QVariant variant; QString filename; QString repCreation; window->slotFileType(); if ( window->exec() == QDialog::Accepted ) { QString line = window->filename->text(); filesList = line.split(","); repCreation = window->location->text().replace("\\", "/"); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); projectDir = projectDirectory( item ); QDir projectDirObj(projectDir); setQmake( projectFilename( item ) ); foreach(QString filename, filesList) { absoluteFilename = projectDirObj.absoluteFilePath(repCreation)+"/"+filename.remove("\"").simplified(); absoluteFilename = QDir::cleanPath(absoluteFilename); projectDirObj.mkdir( repCreation ); filename = projectDirObj.relativeFilePath(absoluteFilename); QFile file ( absoluteFilename ); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file already exists in directory."), tr("Cancel") ); return; } QByteArray templateData; if ( absoluteFilename.section(".", -1, -1) == "ui" ) { // set a default content for UI files QStringList items; items << "QDialog" << "QMainWindow" << "QWidget"; bool ok; QString item = QInputDialog::getItem(0, "QDevelop", tr("Forms:"), items, 0, false, &ok); if (ok && !item.isEmpty()) { QString templateName; if ( item == "QDialog" ) templateName = ":/templates/templates/dialog.ui"; else if ( item == "QMainWindow" ) templateName = ":/templates/templates/mainwindow.ui"; else templateName = ":/templates/templates/widget.ui"; QFile templateFile(templateName); templateFile.open(QIODevice::ReadOnly); templateData = templateFile.readAll(); templateFile.close(); } else return; } else if ( filename.section(".", -1, -1) == "h" || filename.section(".", -1, -1) == "hpp" ) { // add a default content for *.h files QString defString = filename.toUpper().section("/", -1, -1); // filter out bad chars int j = defString.length(); for ( int i=0; i < j; i++ ) { if (!defString[i].isLetterOrNumber()) defString[i] = '_'; } // leading _ are because the file name can start with a digit, // while an identifier on C/C++ can not // trailing _ are for fun templateData.append( QString("#ifndef __%1__\n").arg( defString ) ); templateData.append( QString("#define __%1__\n").arg( defString ) ); templateData.append( QString("\n// place your code here\n\n") ); templateData.append( QString("#endif // __%1__\n").arg( defString ) ); } else if ((filename.section(".", -1, -1) == "c" ) || (filename.section(".", -1, -1) == "cpp" ) ) { // user added 2 files to the project, which means // source + header // lets assume users do not put "," in the file name if (filesList.count() != 1) { QString includeFile = filename.left( filename.lastIndexOf(".") ) + ".h"; includeFile = includeFile.section("/", -1, -1); templateData.append( QString("#include \"%1\"\n\n").arg( includeFile ) ); } templateData.append( QString("// place your code here\n") ); } // The (.ts) file must be created by lupdate only if ( filename.section(".", -1, -1) != "ts" ) { if ( !file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } if (!templateData.isEmpty ()) { file.write( templateData ); } file.close(); } insertFile(item, filename); // If it's a (.ts) file, save the project then call lupdate to create the file on disk. if ( filename.section(".", -1, -1) == "ts" ) { slotSaveProject(); slotlupdate(item); } } m_isModifiedProject = true; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // bool ProjectManager::listContains(QListlist, QString name, findMode type) { for (int i=0; i < list.count(); i++) { if ( (type==Data && list.at( i )->text(0)==name) ) return true; else if (type==Key && toKey( list.at( i )->data(0, Qt::UserRole) )==name) return true; } return false; } // void ProjectManager::insertFile(QTreeWidgetItem *it, QString filename, bool silentMode) { filename = filename.remove("\"").simplified(); if ( filename.isEmpty() ) return; QString kindFile = filename.toLower().section(".", -1, -1); QTreeWidgetItem *newItem; if ( ( newItem = item(it, filename, Data) ) ) { if ( !silentMode) QMessageBox::warning(0, "QDevelop", tr("The file already exists."), tr("Cancel") ); //return; } else { if ( !(QStringList() << "ui" << "cpp" << "h" << "hpp" << "qrc" << "ts").contains(kindFile) ) { if ( !silentMode) QMessageBox::warning(0, "QDevelop", tr("This file is not permitted."), tr("Ok") ); return; } QString parentKey; if ( kindFile == "ui" ) parentKey = "FORMS"; else if ( kindFile == "cpp" ) { parentKey = "SOURCES"; } else if ( kindFile == "h" || kindFile == "hpp" ) { parentKey = "HEADERS"; } else if ( kindFile == "qrc" ) parentKey = "RESOURCES"; else if ( kindFile == "ts" ) parentKey = "TRANSLATIONS"; // Le file de type "DATA" doit re contenu dans une clcorrespondant au type de file QTreeWidgetItem *parent = 0; for (int i=0; ichildCount(); i++) { if ( toKey( it->child( i )->data(0, Qt::UserRole) ) == parentKey ) { parent = it->child( i ); break; } } if ( !parent ) parent = insertItem(it, parentKey, parentKey, "+="); newItem = insertItem(parent, "DATA", filename); // do { m_treeFiles->setItemExpanded(parent, true ); } while ( (parent = parent->parent()) ); } // if ( kindFile == "cpp" || kindFile == "h" || kindFile == "hpp") { QString projectDir = projectDirectory(newItem); QString absoluteName = QDir(projectDir+"/"+filename).absolutePath(); QFile file(absoluteName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString buffer = file.readAll(); file.close(); QStringList parentsList = parents(newItem); m_treeClasses->updateClasses(absoluteName, buffer, parentsList, "."+kindFile); } } } void ProjectManager::slotAddSubProject(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); NewProjectImpl *window = new NewProjectImpl(m_parent, projectDirectory(it->text(0))); window->setWindowTitle( tr("Sub-project creation") ); window->parentProjectName->setText( it->text(0) ); if ( window->exec() == QDialog::Accepted ) { setQmake( projectFilename( it ) ); QString filename = window->filename(); bool continuer = true; QList listeTemplate; childsList(it, "TEMPLATE", listeTemplate); if ( listeTemplate.count() ) { for (int nbTemplate=0; nbTemplate < listeTemplate.first()->childCount(); nbTemplate++) { if ( listeTemplate.first()->child(nbTemplate)->text(0) == "subdirs" ) { continuer = false; } } } while ( continuer ) { continuer = false; for (int i=0; ichildCount(); i++) { if ( !QString("absoluteNameProjectFile:projectDirectory").contains( toKey( it->child( i )->data(0,Qt::UserRole) ) ) ) { delete it->child( i ); continuer = true; } } } if ( !item(it, "TEMPLATE", Key ) ) insertItem( insertItem(it, "TEMPLATE", "TEMPLATE", "="), "DATA", "subdirs" ); QTreeWidgetItem *itSubdir = item(it, "SUBDIRS", Key); if ( !itSubdir ) itSubdir = insertItem(it, "SUBDIRS", "SUBDIRS", "="); itSubdir->setText(0, tr("Sub-Projects")); QTreeWidgetItem *subProjectItem = insertItem(itSubdir, "PROJECT", filename); insertItem(subProjectItem, "qmake", "1"); insertItem(subProjectItem, "absoluteNameProjectFile", window->absoluteProjectName()); insertItem(subProjectItem, "projectDirectory", window->location->text() + "/" + QFileInfo(window->projectName->text()).baseName()); insertItem(subProjectItem, "subProjectName", filename.left(filename.lastIndexOf("."))); loadProject(window->absoluteProjectName(), subProjectItem); QTreeWidgetItem *itProject = itemProject( window->filename() ); setSrcDirectory(itProject, window->srcDirectory->text()); setUiDirectory(itProject, window->uiDirectory->text()); //m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); m_parent->configureCompletion( projectDirectory( window->location->text() + "/" + QFileInfo(window->projectName->text()).baseName() ) ); } delete window; } // void ProjectManager::slotProjectPropertie(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); while ( it && toKey( it->data(0,Qt::UserRole) ) != "PROJECT" ) it = it->parent(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName = projectFilename(it); ; ProjectPropertieImpl *window = new ProjectPropertieImpl(this, m_treeFiles, it); if ( window->exec() == QDialog::Accepted ) { m_isModifiedProject = true; setQmake(projectName); setSrcDirectory(itemProject(projectName), window->srcDirectory->text() ); setUiDirectory(itemProject(projectName), window->uiDirectory->text() ); } delete window; } // void ProjectManager::slotAddScope(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; AddScopeImpl *window = new AddScopeImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); //projectDir = data(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { //window->comboProjects->addItem( projectName, QVariant(reinterpret_cast(projectsList.at(nbProjects)))); window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } //window->comboProjects->addItem( nomScope, QVariant(reinterpret_cast(listeScope.at(nbScope)))); window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); QVariant variant; QString scopeName; if ( window->exec() == QDialog::Accepted ) { if ( window->win32->isChecked() ) scopeName = "win32"; else if ( window->Unix->isChecked() ) scopeName = "unix"; else if ( window->mac->isChecked() ) scopeName = "mac"; else if ( window->debug->isChecked() ) scopeName = "debug"; else if ( window->release->isChecked() ) scopeName = "release"; else scopeName = window->scopeName->text(); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); insertItem(item, "SCOPE", scopeName); setQmake( projectFilename(item) ); } // void ProjectManager::setQmake(QString projectName) { QTreeWidgetItem *itProjet = item(m_treeFiles->topLevelItem ( 0 ), projectName, Data); QTreeWidgetItem *itModifie = item(itProjet, "qmake", Key); itModifie->setText(0, "1"); m_isModifiedProject = true; } // bool ProjectManager::qmake(QString projectName) { bool retour = true; if ( !projectName.isEmpty() ) { retour = findData(projectName, "qmake") == "1"; QTreeWidgetItem *itProjet = item(m_treeFiles->topLevelItem ( 0 ), projectName, Data); //if( itProjet ) QTreeWidgetItem *itModifie = item(itProjet, "qmake", Key); if ( itModifie ) itModifie->setText(0, "0"); } else { QList list; childsList(m_treeFiles->topLevelItem ( 0 ), "PROJECT", list); for (int i=0; itext(0) == "1"; itModifie->setText(0, "0"); } } } return retour; } // void ProjectManager::slotlupdate(QTreeWidgetItem *it) { if ( m_parent->saveBeforeBuild() ) slotSaveProject(); if ( isModifiedProject() ) { // Proposer sauvegarde int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return; if ( rep == 0 ) { slotSaveProject(); } } QApplication::setOverrideCursor(Qt::WaitCursor); QString projectDir = projectDirectory( it ); QString name = projectName( projectDir ); QProcess process; process.setWorkingDirectory( projectDir ); process.start(m_parent->lupdateName(), QStringList() << "-noobsolete" << name); process.waitForFinished(); QApplication::restoreOverrideCursor(); } // void ProjectManager::slotlrelease(QTreeWidgetItem *it) { if ( m_parent->saveBeforeBuild() ) slotSaveProject(); if ( isModifiedProject() ) { // Proposer sauvegarde int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return; if ( rep == 0 ) { slotSaveProject(); } } QApplication::setOverrideCursor(Qt::WaitCursor); QString projectDir = projectDirectory( it ); QString name = projectName( projectDir ); QProcess process; process.setWorkingDirectory( projectDir ); process.start(m_parent->lreleaseName(), QStringList(name)); process.waitForFinished(); setQmake( projectFilename(it) ); QApplication::restoreOverrideCursor(); } // void ProjectManager::slotPreviewForm(QTreeWidgetItem *it) { if ( m_previewForm ) { delete m_previewForm; m_previewForm = 0; } QString projectDir = projectDirectory(it); QString filename = it->text(0); QString uiName = QDir(projectDir+"/"+filename).absolutePath(); QUiLoader builder; QFile file(uiName); file.open(QFile::ReadOnly); m_previewForm = builder.load(&file, 0); file.close(); // if ( m_previewForm ) { m_previewForm->setWhatsThis( filename ); // Set tooltip for all widgets in form QString name = m_previewForm->objectName(); QString className = m_previewForm->metaObject()->className(); m_previewForm->setToolTip( name+" ("+className+")" ); QRect rect = QDesktopWidget().screenGeometry(); m_previewForm->setGeometry((rect.width()-m_previewForm->width())/2, (rect.height()-m_previewForm->height())/2, m_previewForm->width(), m_previewForm->height()); QList widgets; widgets += m_previewForm->findChildren(); foreach(QWidget *w, widgets) { w->installEventFilter( this ); name = w->objectName(); className = w->metaObject()->className(); w->setToolTip( name+" ("+className+")" ); w->setWhatsThis( filename ); } // m_previewForm->installEventFilter( this ); QDialog *dlg = dynamic_cast(m_previewForm); QMainWindow *win = dynamic_cast(m_previewForm); if ( win ) { win->setAttribute(Qt::WA_QuitOnClose, false); win->show(); } else if ( dlg ) { dlg->show(); } else { m_previewForm->show(); } } else { QString error = tr("File not found: \"%1\"").arg(uiName); QMessageBox::warning(0, "QDevelop", error, tr("Cancel") ); } } // void ProjectManager::slotSubclassing(QTreeWidgetItem *it) { QString projectDir = projectDirectory(it); QString projectName = projectFilename( it ); QString srcDir = srcDirectory( itemProject(projectName) ); QString filename = it->text(0); QString uiName = QDir(projectDir+"/"+filename).absolutePath(); QStringList listeHeaders; headers( itemProject(projectName), listeHeaders); SubclassingImpl *dialog = new SubclassingImpl(0, m_parent, srcDir, uiName, listeHeaders); if (!dialog->isValid()) { QString error = tr("File not found: \"%1\"").arg(uiName); QMessageBox::warning(0, "QDevelop", error, tr("Cancel") ); delete dialog; return; } if ( dialog->exec() == QDialog::Accepted ) { while ( toKey( it->data(0, Qt::UserRole) ) != "PROJECT" ) it = it->parent(); projectDir = projectDirectory( itemProject(projectName) ); setQmake( projectFilename(it) ); QString filename = QDir(projectDir).relativeFilePath(dialog->newFile()+".h").replace("\\", "/"); insertFile(it, filename, true); filename = QDir(projectDir).relativeFilePath(dialog->newFile()+".cpp").replace("\\", "/"); insertFile(it, filename, true); } delete dialog; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotRenameItem(QTreeWidgetItem *it) { if ( !it ) return; QTreeWidgetItem *itProject = itemProject( projectFilename(it) ); QString projectDir = projectDirectory(it); QString oldAbsolutePath = QDir(projectDir+"/"+it->text(0)).absolutePath(); QString path = it->text(0).section("/", 0, -2); QString filename = it->text(0).section("/", -1, -1); bool ok; filename = QInputDialog::getText(0, "QDevelop", tr("New name:"), QLineEdit::Normal, filename, &ok); if ( !ok ) return; if ( oldAbsolutePath.section(".", -1, -1) != filename.section(".", -1, -1) ) { int rep = QMessageBox::question(0, "QDevelop", tr("The kind of the new and the old filename is different !"), tr("Rename"), tr("Cancel") ); if ( rep == 1 ) return; } if (!filename.isEmpty()) { QString newName; if ( !path.isEmpty() ) newName = path + "/" + filename; else newName = filename; QString newAbsolutePath = QDir(projectDir+"/"+newName).absolutePath(); QFile file( oldAbsolutePath ); if ( file.rename( newAbsolutePath ) ) { slotDeleteItem(it, true); insertFile(itProject, newName); m_parent->renameEditor(oldAbsolutePath, newAbsolutePath); m_isModifiedProject = true; foreach(Editor *editor, m_parent->allEditors() ) { editor->setNameOtherFile(oldAbsolutePath, newAbsolutePath); } } else { QMessageBox::warning(0,"QDevelop", tr("Unable to rename the file to \"%1\"").arg(newAbsolutePath), tr("Cancel")); return; } } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotDeleteItem(QTreeWidgetItem *it, bool silentMode) { if ( !it ) return; if ( it == m_treeFiles->topLevelItem ( 0 ) ) { QMessageBox::warning(0, "QDevelop", tr("Cannot remove the main project."), tr("Ok") ); return; } int rep = 0; if ( !silentMode ) { rep = QMessageBox::question(0, "QDevelop", tr("Do you want to remove \"%1\" from the project ?").arg(it->text(0)), tr("Yes"), tr("No") ); } if ( rep == 1 ) return; // /*QString filename = it->text(0); QString projectName = projectFilename( it ); QString projectDir = projectDirectory(it); QString absoluteName = QDir(projectDir+"/"+filename).absolutePath(); if( filename.section(".", -1, -1).toLower() == "h" || filename.section(".", -1, -1).toLower() == "cpp") m_treeClasses->clearFile( absoluteName );*/ setQmake( projectFilename( it ) ); QTreeWidgetItem *parent = it->parent(); delete it; while ( !parent->childCount() ) { it = parent->parent(); delete parent; parent = it; } // m_treeClasses->clear(); parseTreeClasses(); // // Le parent est de type PROJECT. S'il a un TEMPLATE subdirs mais qu'il n'a plus de sous-projets, // il doit devenir un projet normal de TEMPLATE app. if ( toKey( parent->data(0, Qt::UserRole) ) == "PROJECT" ) { bool subdirs = false; QTreeWidgetItem *itTemplate = item(parent, "TEMPLATE", Key); if ( itTemplate ) { QList list; childsList(itTemplate, "DATA", list); for (int i=0; itext(0) == "subdirs" ) subdirs = true; } } if ( subdirs ) { QTreeWidgetItem *itTemplate = item(parent, "TEMPLATE", Key); if ( itTemplate ) delete itTemplate; itTemplate = insertItem(parent, "TEMPLATE", "TEMPLATE", "="); insertItem(itTemplate, "DATA", "app" ); } } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::loadProject(QString s, QTreeWidgetItem *newProjectItem) { QTreeWidgetItem *itemProject = newProjectItem; QFile file(s); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QString projectName = s.section("/",-1,-1); newProjectItem->setText(0, projectName); newProjectItem->setData(0, Qt::UserRole, toItem("PROJECT")); m_treeFiles->setItemExpanded(newProjectItem, true ); // // insertItem(newProjectItem, "absoluteNameProjectFile", s); insertItem(newProjectItem, "srcDirectory", ""); insertItem(newProjectItem, "uiDirectory", ""); QTreeWidgetItem *it; QString projectDirectory = QDir().absoluteFilePath(s).left( QDir().absoluteFilePath(s).lastIndexOf("/") ); insertItem(newProjectItem, "projectDirectory", projectDirectory); insertItem(newProjectItem, "qmake", "1"); QString key; QString data; bool toFollow = false; bool scope = false; while (!file.atEnd()) { QString line = QString( file.readLine() ); if ( !line.simplified().length() ) continue; if ( scope && !toFollow) { scope = false; newProjectItem = newProjectItem->parent(); } while ( !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && !line.simplified().contains(QRegExp("^#")) && line.indexOf(":")!=-1 && ( line.indexOf(":")data(0, Qt::UserRole) ) == "SCOPE" ) newProjectItem = it; else newProjectItem = insertItem(newProjectItem, "SCOPE", line.section(":", 0, 0).simplified()); scope = true; line = line.section(":", 1); } if ( !line.simplified().contains(QRegExp("^#")) && !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && line.contains("{") ) { it = item(newProjectItem, line.section("{", 0, 0).simplified(), Data); if ( it && toKey( it->data(0, Qt::UserRole) ) == "SCOPE" ) newProjectItem = it; else newProjectItem = insertItem(newProjectItem, "SCOPE", line.section("{", 0, 0).simplified()); toFollow = true; continue; } if ( !line.simplified().contains(QRegExp("^#")) && !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && line.contains("}") ) { newProjectItem = newProjectItem->parent(); continue; } // if ( !line.simplified().contains(QRegExp("^#")) /*&& !line.contains(QRegExp("\""))*/ && line.contains("=") ) { QString operateur; if ( line.contains("+=") ) operateur = "+="; else if ( line.contains("-=") ) operateur = "-="; else if ( line.contains("*=") ) operateur = "*="; else if ( line.contains("~=") ) operateur = "~="; else operateur = "="; key = line.simplified().section(operateur, 0, 0).simplified(); data = line.simplified().section(operateur, 1).simplified(); toFollow = line.simplified().right(1) == "\\"; if ( data.simplified().right(1) == "\\" ) data = data.simplified().left( data.simplified().length()-1 ); QTreeWidgetItem *it = 0; for (int i=0; ichildCount(); i++) { if ( toKey( newProjectItem->child( i )->data(0, Qt::UserRole) ) == key ) { it = newProjectItem->child( i ); break; } } if ( !it ) it = insertItem(newProjectItem, key, key, operateur); if ( key == "SUBDIRS" ) it->setText(0, tr("Sub-projects")); if ( toFollow ) newProjectItem = it; QString name; bool guillemet = false; data = data.simplified(); for (int i=0; iparent(); } else if ( !line.simplified().contains(QRegExp("^#")) ) { QString function = line.simplified().section("\(", 0, 0).simplified(); data = line.simplified(); insertItem(newProjectItem, "DATA", data); } /*else //if ( line.contains(QRegExp("^#")) ) { insertItem(newProjectItem, "TEXTELIBRE", line); toFollow = false; }*/ // SUBDIRS loading for (int i=0; ichildCount(); i++) { if ( toKey( newProjectItem->child( i )->data(0, Qt::UserRole) ) == "SUBDIRS" ) { QTreeWidgetItem *sub = newProjectItem->child( i ); m_treeFiles->setItemExpanded(sub, true ); for (int n=0; nchildCount(); n++) { QString name = sub->child(n)->text(0); QString subDirName = QDir(projectDirectory+"/"+name).absolutePath(); QStringList filesList = QDir(subDirName).entryList(); foreach(QString newProjectName, filesList ) { if ( newProjectName.toLower().right(4) == ".pro" ) { loadProject(subDirName+"/"+newProjectName, sub->child( n )); insertItem(sub->child( n ), "subProjectName", name); } } } } } } // if ( findData(projectName, QString("TEMPLATE")).isEmpty() ) { QTreeWidgetItem *tmp = insertItem(itemProject, "TEMPLATE", "TEMPLATE", "="); insertItem(tmp, "DATA", "app"); } return; } // QTreeWidgetItem * ProjectManager::insertItem(QTreeWidgetItem *parent, QString key, QString data, QString op) { QString begin; if ( !op.isEmpty() && op != "=" && op != "+=" ) begin = op + " "; QTreeWidgetItem *it = new QTreeWidgetItem(parent); it->setText(0, data); it->setData(0, Qt::UserRole, toItem(key, op)); key = "|"+key+"|"; QString parentKey = "|"+toKey( it->parent()->data(0, Qt::UserRole) )+"|"; if ( !QString("|PROJECT|SUBDIRS|SOURCES|SCOPE|HEADERS|FORMS|TRANSLATIONS|RESOURCES|").contains(key) ) if (key!="|DATA|" || !QString("|PROJECT|SUBDIRS|SOURCES|SCOPE|HEADERS|FORMS|TRANSLATIONS|RESOURCES|").contains(parentKey) ) m_treeFiles->setItemHidden(it, true); if ( key == "|HEADERS|" ) { it->setText(0, begin + tr("Headers")); it->setIcon(0, QIcon(":/treeview/images/h.png")); } else if ( key == "|SOURCES|" ) { it->setText(0, begin + tr("Sources")); it->setIcon(0, QIcon(":/treeview/images/cpp.png")); } else if ( key == "|FORMS|" ) { it->setText(0, begin + tr("Dialogs")); it->setIcon(0, QIcon(":/treeview/images/designer.png")); } else if ( key == "|TRANSLATIONS|" ) { it->setText(0, begin + tr("Translations")); it->setIcon(0, QIcon(":/treeview/images/linguist.png")); } else if ( key == "|RESOURCES|" ) { it->setText(0, begin + tr("Resources")); it->setIcon(0, QIcon(":/treeview/images/qrc.png")); } else { it->setToolTip(0, data); } QTreeWidgetItem *itemParent = it->parent(); bool hide = true; for (int i = 0; i < itemParent->childCount(); i++ ) if ( !m_treeFiles->isItemHidden(itemParent->child(i) ) ) hide = false; if ( hide && toKey( itemParent->data(0, Qt::UserRole) ) != "SCOPE" && toKey( itemParent->data(0, Qt::UserRole) ) != "PROJECT") m_treeFiles->setItemHidden(itemParent, true); else { do { m_treeFiles->setItemHidden(itemParent, false); } while ( (itemParent = itemParent->parent()) ); } return it; } // bool ProjectManager::slotSaveProject() { if ( !isModifiedProject() ) return true; QTreeWidgetItem *itemProject = m_treeFiles->topLevelItem ( 0 ); bool ret = saveDataOfProject(itemProject, new QTextStream()); if ( ret ) { QTreeWidgetItem *it = item(m_treeFiles->topLevelItem ( 0 ), "PROJECT", Key); if ( !it ) return true; it = item(it, "absoluteNameProjectFile", Key); if ( !it ) return true; } m_isModifiedProject = false; return ret; } // bool ProjectManager::saveDataOfProject(QTreeWidgetItem *it, QTextStream *s, int nbSpace, QString endOfLine) { QTextStream *output = s; QString key = toKey( it->data(0, Qt::UserRole) ); QString op = toOp( it->data(0, Qt::UserRole) ); QString data = it->text(0); QString indent; for (int x=0; xtopLevelItem ( 0 ) ) ) { QString subProjectName = item(it, "subProjectName", Key)->text(0); *output << subProjectName + " "; *output << endOfLine; } if ( key == "PROJECT" ) { nbSpace = -1; QString absoluteName = item(it, "absoluteNameProjectFile", Key)->text(0); file.setFileName(absoluteName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; output = new QTextStream(&file); } else if ( key == "SCOPE" ) { *output << indent+data << " {\n"; if ( !it->childCount() ) { nbSpace--; for (int x=0; xchildCount() ) *output << "\n"; } for ( int i=0; ichildCount(); i++) { QString newEndLine = ""; if ( it->childCount() > 4 && i+1childCount() ) newEndLine = " \\\n"; else if ( i+1 == it->childCount() ) newEndLine = "\n"; saveDataOfProject(it->child(i), output, nbSpace+1, newEndLine); } if ( it->childCount() && key == "SCOPE" ) { *output << indent+"}\n"; } return true; } // QString ProjectManager::projectDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "projectDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // void ProjectManager::setUiDirectory(QTreeWidgetItem *it, QString s) { QTreeWidgetItem *itModifie = item(it, "uiDirectory", Key); itModifie->setText(0, s); } // QString ProjectManager::uiDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "uiDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // void ProjectManager::setSrcDirectory(QTreeWidgetItem *it, QString s) { QTreeWidgetItem *itModifie = item(it, "srcDirectory", Key); itModifie->setText(0, s); } // QString ProjectManager::srcDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "srcDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // QString ProjectManager::projectDirectory(QString projectName) { QString rep = findData(projectName, "projectDirectory"); return rep; } // QString ProjectManager::fileDirectory(QString absoluteFilename) { // Renvoie le repertoire du projet auquel appartient le file nommabsoluteFilename QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectDir = findData(projectsList.at(nbProjects)->text(0), "projectDirectory"); QList dirSourcesList; childsList(projectsList.at(nbProjects), "SOURCES", dirSourcesList); for (int nbSrc=0; nbSrc < dirSourcesList.count(); nbSrc++) { QList filesList; childsList(dirSourcesList.at(nbSrc), "DATA", filesList); for (int nbFic=0; nbFic < filesList.count(); nbFic++) { QString name = filesList.at(nbFic)->text(0); if ( QDir().absoluteFilePath(projectDir + "/" + name) == absoluteFilename ) return projectDir; } } } return QString(); } // QString ProjectManager::projectName(QString location) { // Renvoie le name du projet prent dans location QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString name = projectsList.at(nbProjects)->text(0); if ( findData(name, "projectDirectory") == location ) return name; } return QString(); } // QString ProjectManager::absoluteNameProjectFile(QTreeWidgetItem *it) { // Renvoie le name absolu du file projet auquel appartient le file sectionndans le treeview // Nom au format /home/jl/monprojet/monprojet.pro ou C:/jl/monprojet/monprojet.pro QTreeWidgetItem *tmp = item(it, "PROJECT", Key); if ( !tmp ) return ""; QString projectName = tmp->text(0); return findData(projectName, "projectDirectory")+"/"+projectName; } // QString ProjectManager::findData(QString projectName, QString key) { QTreeWidgetItem *it = item(0, projectName, Data); if ( !it ) return QString(); it = item(it, key, Key); if ( it ) return it->text(0); return QString(); } // QString ProjectManager::projectFilename(QTreeWidgetItem *it) { // Renvoie le name court du file projet auquel appartient le file sectionndans le treeview // Nom au format monprojet.pro QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { return tmp->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // QTreeWidgetItem *ProjectManager::item(QTreeWidgetItem *begin, QString name, findMode type) { // Renvoie le premier item correspondant la recherche if ( begin == 0 ) begin = m_treeFiles->topLevelItem( 0 ); if ( (type==Data && begin->text(0)==name) ) return begin; else if (type==Key && toKey( begin->data(0, Qt::UserRole) )==name) return begin; else { // Les enfants for (int i=0; ichildCount(); i++) { if ( (type==Data && begin->child( i )->text(0)==name) ) return begin->child( i ); else if (type==Key && toKey( begin->child( i )->data(0, Qt::UserRole) )==name) return begin->child( i ); } // Les petits-enfants for (int i=0; ichildCount(); i++) { QTreeWidgetItem *retour = item(begin->child( i ), name, type); if ( retour ) return retour; } } return 0; } // QTreeWidgetItem *ProjectManager::itemProject(QString projectName) { QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { if ( projectName == projectsList.at(nbProjects)->text(0) ) return projectsList.at(nbProjects); } return 0; } // void ProjectManager::childsList(QTreeWidgetItem *begin, QString key, QList &list) { // Renvoie la list enfants correspondants la cl if ( begin == 0 ) begin = m_treeFiles->topLevelItem( 0 ); if ( toKey( begin->data(0, Qt::UserRole) ) == key ) list.append(begin); for (int i=0; ichildCount(); i++) { childsList(begin->child(i), key, list); } return; } // QStringList ProjectManager::buildableProjectsDirectories() { QStringList list; QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { bool ajouter = false; QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); //QList listeTemplate; //childsList(projectsList.at(nbProjects), "TEMPLATE", listeTemplate); QTreeWidgetItem *itemTemplate = item(projectsList.at(nbProjects), "TEMPLATE", Key); ajouter = true; if ( itemTemplate ) { for (int nbTemplate=0; nbTemplate < itemTemplate->childCount(); nbTemplate++) { if ( itemTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; } } } if ( ajouter ) { list << projectDir; } } return list; } // QString ProjectManager::projectVersion(QTreeWidgetItem *it) { QTreeWidgetItem *itConfig = 0; QTreeWidgetItem *itTemplate = 0; for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString key = toKey( item->data(0, Qt::UserRole) ); if ( key == "CONFIG" ) { itConfig = item; } if ( key == "TEMPLATE" ) { itTemplate = item; } } if ( itTemplate ) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = itTemplate->child( i ); QString data = item->text(0); if ( data == "lib" || data == "subdirs" ) { return QString(); } } } if ( itConfig ) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = itConfig->child( i ); QString data = item->text(0); if ( data == "debug" || data == "release" || data == "debug_and_release" ) { return data; } } } return "debug"; } // QString ProjectManager::executableName(QString preferedVersion) { if ( !m_executablesList.count() ) { QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QTreeWidgetItem *it = projectsList.at(nbProjects); QString projectName = it->text(0); QString projectDir = projectDirectory( it ); QString realVersion = projectVersion( it ); if ( realVersion.toLower() == "debug_and_release" ) realVersion = preferedVersion; else if (!m_parent->qmakeForcedMode().isEmpty()) { realVersion = m_parent->qmakeForcedMode(); } if ( realVersion != preferedVersion && realVersion.length() ) { QMessageBox::warning(0, "QDevelop", tr("The only available version for \"%1\" is %2").arg(projectName, realVersion), tr("Run on %1").arg(realVersion) ); } if ( realVersion.toLower() == "release" ) m_releaseVersion = true; else m_releaseVersion = false; QString name = findExecutable(projectDir, realVersion); if ( !name.isNull() ) { m_projectDirectoryOfExecutableList << projectDir; m_executablesList << name; } } } if ( m_executablesList.count() == 1 ) { QString choice = m_executablesList.first(); m_executablesList.clear(); m_projectDirectoryOfExecutable = m_projectDirectoryOfExecutableList.first(); return choice; } else if ( m_executablesList.count() == 0 ) return QString(); else { QString choice; QDialog *window = new QDialog; Ui::ExeChoice ui; ui.setupUi(window); foreach(QString name, m_executablesList ) { if ( name.length() < 50 ) ui.list->addItem( name ); else ui.list->addItem( "... "+name.right(50) ); } ui.list->setCurrentRow( 0 ); if ( window->exec() == QDialog::Accepted ) { int line = ui.list->currentRow(); choice = m_executablesList.at(line); if ( ui.dontask->isChecked() ) { m_executablesList.clear(); m_executablesList << choice; m_projectDirectoryOfExecutable = m_projectDirectoryOfExecutableList.at(line); } } delete window; return choice; } return QString(); } // void ProjectManager::headers(QTreeWidgetItem *it, QStringList &headerFiles) { if ( !it ) it = m_treeFiles->topLevelItem(0); if ( !it ) return; QString projectDir = projectDirectory( it ); for (int i=0; ichildCount(); i++) { if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "HEADERS" ) { for (int j=0; jchild(i)->childCount(); j++) { headerFiles += projectDir+"/"+it->child(i)->child(j)->text(0); } } else if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SCOPE" ) { headers(it->child(i), headerFiles); } } return; } // void ProjectManager::sources(QTreeWidgetItem *it, QStringList &sourcesFiles) { if ( !it ) it = m_treeFiles->topLevelItem(0); if ( !it ) return; QString projectDir = projectDirectory( it ); for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itChild = it->child(i); if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SOURCES" ) { for (int j=0; jchildCount(); j++) { sourcesFiles += projectDir+"/"+itChild->child(j)->text(0); } } else if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SCOPE" ) { sources(it->child(i), sourcesFiles); } } return; } // void ProjectManager::setCurrentItem(const QString& _strFileName) { QString strSearch( QDir::cleanPath(_strFileName) ); qint32 ii; QTreeWidgetItem* pItemFound = NULL; QList projectsList; childsList(0, "PROJECT", projectsList); for (ii = 0; ii < projectsList.count() && NULL == pItemFound; ++ii) { QString strProjectDir = projectDirectory(projectsList.at(ii)); pItemFound = find_r(projectsList.at(ii), strSearch, strProjectDir); } } // QTreeWidgetItem* ProjectManager::find_r(const QTreeWidgetItem* _pItem, const QString& _strFileName, const QString& _strProjectDir) // BK - recursive call { QTreeWidgetItem* pItemFound = NULL; qint32 ii, jj; for (ii = 0; ii < _pItem->childCount() && NULL == pItemFound; ++ii) { QTreeWidgetItem* pItemChild = _pItem->child(ii); if ( toKey( _pItem->child(ii)->data(0, Qt::UserRole) ) == "SCOPE" ) { pItemFound = find_r(_pItem->child(ii), _strFileName, _strProjectDir); } else { for (jj = 0; jj < pItemChild->childCount(); ++jj) { QString str = _strProjectDir+"/"+pItemChild->child(jj)->text(0); if ( QDir::cleanPath(str) == _strFileName ) { pItemFound = pItemChild->child(jj); m_treeFiles->setCurrentItem(pItemFound); } } } } return pItemFound; } // QString ProjectManager::findExecutable( QString projectDirectory, QString preferedVersion ) { // Find on Makefile, Makefile.Debug or Makefile.Release the name of executable // then return it if the suffixe is not .so, .dll or .a QString fichierMakefile, cible, repertoireDest, nomCompletDest; QString exeName; QString line; QFile makefile(projectDirectory+"/"+"Makefile"); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QTextStream *makefileText = new QTextStream(&makefile); while (!makefileText->atEnd()) { line = QString( makefileText->readLine() ); // Here the file Makefile call under Windows (only) Makefile.Debug or Makefile.Release. if ( line.contains(" ") && line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="all" )) cible = preferedVersion+"-all"; else if ( line.contains(" ") && line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="debug" || line.section(" ", 1, 1).simplified()=="release")) cible = line.section(" ", 1, 1).simplified(); if ( line.contains("=") && line.section("=", 0, 0).simplified() == "MAKEFILE" ) fichierMakefile = line.section("=", 1, 1).simplified(); if ( !cible.isNull() && line.section(":", 0, 0) == cible ) { fichierMakefile = line.section(" ", 1, 1).simplified().replace("$(MAKEFILE)", fichierMakefile); makefile.close(); makefile.setFileName( projectDirectory+"/"+fichierMakefile ); delete makefileText; if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); cible = QString(); makefileText = new QTextStream(&makefile); continue; } // Part for Win and Linux // TARGET is the good variable to find exe on Linux if ( line.contains("=") && line.section("=", 0, 0).simplified() == "TARGET" ) { QString exe = line.section("=", 1, 1).simplified(); int pos = exe.indexOf("#"); if ( pos > -1 ) exe = exe.left(pos); exe = exe.replace("\\ ", " "); exe = QDir::cleanPath(projectDirectory + "/" + exe ).remove("\""); if ( !QString("so:dll:a").contains(exe.section(".", -1, -1).toLower() ) && QDir().exists(exe) ) exeName = exe; } // DESTDIR_TARGET is only present on MinGW Makefile if ( line.contains("=") && line.section("=", 0, 0).simplified() == "DESTDIR_TARGET" ) { QString exe = line.section("=", 1, 1).simplified(); int pos = exe.indexOf("#"); if ( pos > -1 ) exe = exe.left(pos); exe = exe.replace("\\ ", " "); exe = QDir::cleanPath(projectDirectory + "/" + exe ).remove("\""); if ( !QString("so:dll:a").contains(exe.section(".", -1, -1).toLower() ) && QDir().exists(exe) ) exeName = exe; } } makefile.close(); delete makefileText; return exeName; } // void ProjectManager::slotSort() { m_treeFiles->sortItems(0, Qt::AscendingOrder); m_isModifiedProject = true; return; } // bool ProjectManager::eventFilter( QObject *obj, QEvent *ev ) { if ( obj == m_previewForm ) { if ( ev->type() == QEvent::Close ) { if ( m_previewForm ) { m_previewForm->deleteLater(); m_previewForm = 0; } return true; } else { return false; } } else return QObject::eventFilter(obj,ev); } // QString ProjectManager::toOp(QVariant variant) { Item item = variant.value(); return item.op; } // QString ProjectManager::toKey(QVariant variant) { Item item = variant.value(); return item.key; } // QVariant ProjectManager::toItem(QString key, QString op) { // An item contains: // a key "HEADERS", "SOURCES", "DATA" etc. // a operator "=", "+="; "-=", "*=" or "~=". This operator is read and wrote in project file // Example : SOURCES += myfile.cpp Item item; item.key = key; item.op = op; QVariant v; v.setValue( item ); return v; } qdevelop-v0.28/src/designer.cpp0000644000175000017500000000412711362261066015526 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "designer.h" #include "mainimpl.h" #include #include #include #include #include #include #include // Designer::Designer() { if( QString(qVersion()).remove(".").toInt() >= 430 ) { process = new QProcess( this ); socket = new QTcpSocket( this ); } } // Designer::~Designer() { if( QString(qVersion()).remove(".").toInt() >= 430 ) { if ( process->state() == QProcess::Running ) { process->terminate(); } } } // void Designer::openUI(QString file) { if( QString(qVersion()).remove(".").toInt() >= 430 ) { QString lu; if ( process->state() == QProcess::NotRunning ) { process->start(m_designerName, QStringList() << "-server" ); process->waitForFinished(3000); lu = process->readAll(); if ( lu.isEmpty() ) { QMessageBox::information(0, "QDevelop", QObject::tr("Unable to start Designer !") ); return; } else { m_port = lu.toUShort(); socket->connectToHost( "localhost", m_port ); } } QTextStream os( socket ); os << file << "\n"; os.flush(); } else { QProcess::startDetached (m_designerName, QStringList(file)); } } qdevelop-v0.28/src/subclassingimpl.cpp0000644000175000017500000004101411362261066017121 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "subclassingimpl.h" #include "projectmanager.h" #include "editor.h" #include "tabwidget.h" #include "ui_newimplementation.h" #include #include #include #include #include #include #include #include #include SubclassingImpl::SubclassingImpl(ProjectManager * parent, MainImpl *mainImpl, QString srcDirectory, QString uiName, QStringList headers) : QDialog(0) { m_srcDirectory = srcDirectory; m_parent = parent; m_mainImpl = mainImpl; m_uiName = uiName; QApplication::setOverrideCursor(Qt::WaitCursor); setupUi(this); treeSlots = new QTreeWidget; treeSlots->hide(); treeSlots->setHeaderLabel( tr("") ); proxyModel = new QSortFilterProxyModel; proxyModel->setDynamicSortFilter(true); proxyModel->setSourceModel(treeSlots->model()); filterView->setModel(proxyModel); implementations(headers); if ( comboClassName->count() ) { comboClassName->setCurrentIndex( 0 ); slotParseForm(); } QApplication::restoreOverrideCursor(); } QString SubclassingImpl::newFile() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString(); return filename; } QStringList SubclassingImpl::signatures(QString header) { QStringList sign; bool slot = false; QString formattedParams, name; foreach(QString line, header.split("\n") ) { if ( line.simplified().right(1) == ":" ) { if ( line.simplified().contains("slots") ) slot = true; else slot = false; continue; } if ( slot ) { line = line.simplified(); line = line.section(" ", 1).simplified(); name = line.section("(", 0, 0).simplified(); QString params = line.section("(", 1).section(")", 0, 0).simplified(); formattedParams.clear(); foreach(QString param, params.split(",") ) { if ( param.contains("=") ) param = param.simplified().left( param.simplified().lastIndexOf("=") ); if ( param.contains("&") ) param = param.simplified().left( param.simplified().lastIndexOf("&")+1 ); else if ( param.contains("*") ) param = param.simplified().left( param.simplified().lastIndexOf("*")+1 ); else if ( param.simplified().contains(" ") ) param = param.simplified().left( param.simplified().lastIndexOf(" ")+1 ); formattedParams += param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.lastIndexOf(",") ); QString s = name + "(" + formattedParams + ")"; sign << QMetaObject::normalizedSignature( s.toLatin1() ); } } return sign; } void SubclassingImpl::implementations(QStringList headers) { QString name = objectName(); if (name.isEmpty()) { return; } foreach(QString header, headers) { QFile file(header); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream in(&file); QString className; while (!in.atEnd()) { QString line = in.readLine(); if ( line.simplified().indexOf("class ") == 0 && !line.contains(";") ) className = line.simplified().section("class ", 1, 1).section(":", 0, 0).simplified().section(" ", -1, -1).simplified(); if ( line.contains("Ui::"+name) ) { header = header.left( header.lastIndexOf(".") ); comboClassName->addItem(className, QVariant(header)); break; } } file.close(); } } QString SubclassingImpl::objectName() { QUiLoader loader; QFile file(m_uiName); file.open(QFile::ReadOnly); QWidget *dial = loader.load(&file, this); file.close(); if (!dial) { return QString(); } QString name = dial->objectName(); delete dial; return name; } QString SubclassingImpl::className() { QUiLoader loader; QFile file(m_uiName); file.open(QFile::ReadOnly); QWidget *dial = loader.load(&file, this); file.close(); if (!dial) { return QString(); } QString className = dial->metaObject()->className(); delete dial; return className; } QStringList SubclassingImpl::templateHeaderImpl() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString().section("/", -1).section(".", 0); QString classImpl = comboClassName->currentText(); QFile file(":/templates/templates/impl.h.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$IMPL_H", filename.toUpper()+"_H"); data.replace("$UIHEADERNAME", "\"ui_"+m_uiName.section("/", -1, -1).section(".", 0, 0)+".h\""); data.replace("$CLASSNAME", classImpl); data.replace("$PARENTNAME", className()); data.replace("$OBJECTNAME", objectName()); QStringList impl = data.split("\n"); return impl; } QStringList SubclassingImpl::templateSourceImpl() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString().section("/", -1); QString classImpl = comboClassName->currentText(); QFile file(":/templates/templates/impl.cpp.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$HEADERNAME", "\""+filename+".h\""); data.replace("$CLASSNAME", classImpl); data.replace("$PARENTNAME", className()); QStringList impl = data.split("\n"); return impl; } void SubclassingImpl::on_okButton_clicked() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString(); QFile file( filename + ".h" ); QStringList headerImpl; QStringList sourceImpl; // Find filename in opened editors Editor *editorHeader = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == filename+ ".h" ) { editorHeader = ed; } } // if ( editorHeader ) { // Get content of opened editor headerImpl = editorHeader->toPlainText().split("\n"); } else { // If file exists, get content from file if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { headerImpl = QString(file.readAll()).split("\n"); file.close(); } else // Otherwise creation of a new content from template headerImpl = templateHeaderImpl(); } // int headerInsertLineAfter = headerImpl.indexOf( "private slots:" ); if ( headerInsertLineAfter != -1 ) { if ( editorHeader ) { headerInsertLineAfter += 2; } else { headerInsertLineAfter += 1; } } if ( headerInsertLineAfter == -1 ) { int last = headerImpl.lastIndexOf("};"); if ( last == -1 ) last = headerImpl.lastIndexOf("}"); headerInsertLineAfter = last -1 ; if ( editorHeader ) { editorHeader->insertText("private slots:\n", headerInsertLineAfter++); } else { headerInsertLineAfter--; headerImpl.insert(headerInsertLineAfter++, "private slots:"); } } // Implementation // Find filename in opened editors Editor *editorImplementation = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == filename+ ".cpp" ) { editorImplementation = ed; } } if ( !editorImplementation ) { // Get content of opened editor file.setFileName( filename+".cpp" ); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { sourceImpl = QString(file.readAll()).split("\n"); file.close(); } else // Otherwise creation of a new content from template sourceImpl = templateSourceImpl(); } // Now insert code for all new items checked for (int i=0; itopLevelItemCount(); i++) { QTreeWidgetItem *topLevelItem = treeSlots->topLevelItem( i ); for (int j=0; j< topLevelItem->childCount(); j++) { QTreeWidgetItem *item = topLevelItem->child( j ); if ( item->checkState( 0 ) && item->textColor(0)!= Qt::blue ) { QString s = item->data(0, Qt::UserRole).toString(); if ( editorHeader ) editorHeader->insertText("\tvoid "+s+";\n", headerInsertLineAfter++); else headerImpl.insert(headerInsertLineAfter++, "\tvoid "+s+";"); if ( editorImplementation ) { editorImplementation->insertText("void "+ comboClassName->currentText() + "::" + s, -1); editorImplementation->insertText("{", -1); editorImplementation->insertText("\t// TODO", -1); editorImplementation->insertText("}\n", -1); } else { sourceImpl << "void "+ comboClassName->currentText() + "::" + s; sourceImpl << "{"; sourceImpl << "\t// TODO"; sourceImpl << "}\n"; } } } } if ( !editorHeader ) { file.setFileName( filename+".h" ); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { foreach(QString line, headerImpl) { file.write( line.toLatin1()+"\n" ); } } file.close(); } if ( !editorImplementation ) { file.setFileName( filename+".cpp" ); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { foreach(QString line, sourceImpl) { file.write( line.toLatin1()+"\n" ); } } file.close(); } } void SubclassingImpl::on_clearButton_clicked() { filterEdit->clear(); } void SubclassingImpl::on_newImplementation_clicked() { QDialog *dial = new QDialog; uiNewImplementation.setupUi(dial); connect(uiNewImplementation.locationButton, SIGNAL(clicked()), this, SLOT(slotLocation()) ); connect(uiNewImplementation.className, SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); connect(uiNewImplementation.location , SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); connect(uiNewImplementation.filename , SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); if ( !comboClassName->count() ) { uiNewImplementation.className->setText(objectName()+"Impl"); uiNewImplementation.location->setText(m_srcDirectory+"/"); uiNewImplementation.filename->setText(QString(objectName()+"Impl").toLower()); } if ( dial->exec() == QDialog::Accepted ) { if ( uiNewImplementation.filename->text().right(2).toLower() == ".h" || uiNewImplementation.filename->text().right(4).toLower() == ".cpp" ) uiNewImplementation.filename->setText( uiNewImplementation.filename->text().left( uiNewImplementation.filename->text().lastIndexOf(".") ) ); comboClassName->addItem(uiNewImplementation.className->text(), QVariant(uiNewImplementation.location->text()+"/"+uiNewImplementation.filename->text())); comboClassName->setCurrentIndex( comboClassName->count()-1 ); slotParseForm(); } delete dial; } void SubclassingImpl::on_comboClassName_activated(int i) { slotParseForm(); // supress gcc warnings i = 0; } void SubclassingImpl::on_filterEdit_textChanged( const QString &text ) { QRegExp regExp( text, Qt::CaseInsensitive, QRegExp::RegExp2 ); proxyModel->setFilterRegExp(regExp); } void SubclassingImpl::slotParseForm() { QString data = comboClassName->itemData( comboClassName->currentIndex() ).toString(); if ( QFile::exists( data + ".h" ) ) { okButton->setText( tr("&Update") ); } else { okButton->setText( tr("C&reate") ); } okButton->setEnabled( true ); filename->setText( data.section("/", -1).section(".", 0, 0) + " "+tr("(.h and .cpp)") ); location->setText( data.left( data.lastIndexOf("/")+1 ) ); QString headerContent; QFile fileHeader( comboClassName->itemData( comboClassName->currentIndex() ).toString() + ".h"); if (fileHeader.open(QIODevice::ReadOnly | QIODevice::Text)) { headerContent = fileHeader.readAll(); fileHeader.close(); } QStringList listeSignatures = signatures(headerContent); QFile file(m_uiName); QUiLoader loader; QTreeWidgetItem *item; QWidget *dial; file.open(QFile::ReadOnly); dial = loader.load(&file, this); file.close(); if (!dial) { return; } QList widgets = dial->findChildren(); QList actions = dial->findChildren(); QList objs; // merge the 2 lists into one big one! foreach(QObject *o, actions) objs.append( o ); foreach(QObject *o, widgets) objs.append( o ); treeSlots->clear(); foreach(QObject *w, objs) { QString name = w->objectName(); if ( name.isEmpty() ) continue; QString className = w->metaObject()->className(); item = new QTreeWidgetItem(QStringList(name+" ("+className+")")); treeSlots->addTopLevelItem ( item ); for (int i=0; imetaObject()->methodCount(); i++) { QMetaMethod meta = w->metaObject()->method( i ); if ( meta.methodType() == QMetaMethod::Signal ) { QTreeWidgetItem *item2 = new QTreeWidgetItem(item, QStringList()<<"on_"+name+"_"+meta.signature()); QString method = QString("on_"+name+"_"+meta.signature()).section("(", 0, 0) + "("; for (int param=0; paramsetData(0, Qt::UserRole, QVariant(method)); if ( listeSignatures.contains( "on_"+name+"_"+meta.signature() ) ) { item2->setFlags( Qt::ItemIsEnabled ); item2->setCheckState(0, Qt::Checked ); item2->setTextColor(0, Qt::blue); } else { item2->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); item2->setCheckState(0, Qt::Unchecked ); } } } treeSlots->expandItem( item ); } delete dial; } void SubclassingImpl::slotLocation() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), m_srcDirectory, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) return; uiNewImplementation.location->setText( s ); } void SubclassingImpl::slotEnableokButton(QString) { uiNewImplementation.okButton->setDisabled( uiNewImplementation.location->text().isEmpty() || uiNewImplementation.className->text().isEmpty() || uiNewImplementation.filename->text().isEmpty() ); } qdevelop-v0.28/src/textEdit.h0000644000175000017500000001525611362261066015172 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TEXTEDIT_H #define TEXTEDIT_H #include #include #include #include "mainimpl.h" #include "InitCompletion.h" #include "ui_findwidget.h" #include "ui_replacewidget.h" // typedef QMap classesMethodsList; // class LineNumbers; class SelectionBorder; class Editor; class FindImpl; class CppHighlighter; class TextEditInterface; class QPixmap; // class TextEdit : public QTextEdit { Q_OBJECT public: QString tempFilename(); void saveAsTemp(); TextEdit(Editor * parent, MainImpl *mainimpl, InitCompletion *completion); ~TextEdit(); bool open(bool silentMode, QString filename, QDateTime &lastModified); bool save(QString filename, QDateTime &lastModified); bool close(QString filename); QTextCursor getLineCursor( int line ) const; void setLineNumbers( LineNumbers* ); LineNumbers* lineNumbers(); void setSelectionBorder( SelectionBorder* ); SelectionBorder* selectionBorder(); void findText(); void setExecutedLine(int line); void selectLines(int debut, int fin); QString wordUnderCursor(const QPoint & pos=QPoint(), bool select=false); QString wordUnderCursor(const QString text); QString firstWordUnderCursor(); QString classNameUnderCursor(const QPoint & pos=QPoint(), bool addThis=true); void activateLineNumbers(bool activate); void setSelectionBorder(bool activate); void setSyntaxHighlight(bool activate ); void setAutoIndent( bool activate ) { m_autoindent = activate; }; void setAutoCompletion( bool activate ) { m_autoCompletion = activate; }; void setTabStopWidth(int taille); void setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g); void setEndLine(MainImpl::EndLine end) { m_endLine = end; }; void setTabSpaces(bool t) { m_tabSpaces = t; }; void setAutobrackets(bool b) { m_autobrackets = b; }; // Divius: comments autoclose void setAutocomments(bool b) { m_autocomments = b; }; // void setMatch(bool b) { m_match = b; }; void setHighlightCurrentLine(bool b) { m_highlightCurrentLine = b; } void setBackgroundColor( QColor c ); void setTextColor(QColor c); void setCurrentLineColor( QColor c ); void setMatchingColor( QColor c ) { m_matchingColor = c; }; void setShowWhiteSpaces( bool b ) { m_showWhiteSpaces = b; } void setRightMarginColumn( int c ) { m_rightMarginColumn = c; } void setWordWrap( bool w ) { if (w) setLineWrapMode(QTextEdit::WidgetWidth); else setLineWrapMode(QTextEdit::NoWrap); } int currentLineNumber(QTextCursor cursor=QTextCursor()); int currentLineNumber(QTextBlock block); int linesCount(); void dialogGotoLine(); void completeCode(); void setFocus(Qt::FocusReason reason); void gotoMatchingBracket(); void textPlugin(TextEditInterface *iTextEdit); void print(); void printWhiteSpacesAndMatching( QPainter &p ); enum ActionComment { Toggle, Comment, Uncomment }; void insertText(QString text, int insertAfterLine); void setMouseHidden( bool hidden ); public slots: void gotoLine( int line, bool moveTop ); void slotFind(Ui::FindWidget uiFind, Ui::ReplaceWidget uiReplace, QString ttf=0, QTextDocument::FindFlags options=0, bool fromButton=false); void slotIndent(bool indent=true); void slotUnindent(); void comment(ActionComment action); void slotGotoImplementation(); void slotGotoDeclaration(); private slots: void slotAdjustSize(); void slotWordCompletion(QListWidgetItem *item); void slotCursorPositionChanged(); void slotCompletionList(TagList tagList); void slotCompletionHelpList(TagList tagList); void slotToggleBreakpoint(); void slotToggleBookmark(); private: void completionHelp(); QString m_plainText; long m_matchingBegin; long m_matchingEnd; QPointer m_lineNumbers; QPointer m_selectionBorder; CppHighlighter *cpphighlighter; QString m_findExp; int m_findOptions; FindImpl *m_findImpl; int lineNumber(QTextCursor cursor); int lineNumber(QTextBlock b); int lineNumber(QPoint point); void key_home(bool shift); void key_end(bool shift); QPoint mousePosition; Editor *m_editor; MainImpl *m_mainImpl; bool m_autoindent; void autoIndent(); void autobrackets(); // Divius: comments autoclose void autocomments(bool start = true); // void autoUnindent(); void match(); void clearMatch(); MainImpl::EndLine m_endLine; bool m_tabSpaces; InitCompletion *m_completion; QListWidget *m_completionList; bool m_autoCompletion; bool m_autobrackets; // Divius: comments autoclose bool m_autocomments; // bool m_match; bool m_highlightCurrentLine; bool m_showWhiteSpaces; int m_rightMarginColumn; QColor m_backgroundColor; QColor m_currentLineColor; QColor m_matchingColor; QAction *actionToggleBreakpoint; int m_lineNumber; bool m_mouseHidden; QPixmap m_tabPixmap; QPixmap m_spacePixmap; protected: void resizeEvent( QResizeEvent* ); void keyPressEvent ( QKeyEvent * event ); void contextMenuEvent(QContextMenuEvent * e); void mouseDoubleClickEvent( QMouseEvent * event ); void dropEvent( QDropEvent * event ); void mousePressEvent ( QMouseEvent * event ); void paintEvent ( QPaintEvent * event ); void mouseMoveEvent( QMouseEvent * event ); signals: void editorModified(bool); void initParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString); }; #endif qdevelop-v0.28/src/build.cpp0000644000175000017500000001722111362261066015024 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "editor.h" #include "build.h" #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // Build::Build(QObject * parent, QString qmakeName, QString makeName, QString makeOptions, QString absoluteProjectName, bool qmake, bool n, bool g, QString compileFile, QString forceMode) : QThread(parent) { connect(parent, SIGNAL(stopBuild()), this, SLOT(slotStopBuild()) ); m_isStopped = false; m_qmakeName = qmakeName; m_qmake = qmake; m_makeName = makeName; m_makeOptions = makeOptions; m_projectDirectory = QFileInfo(absoluteProjectName).absolutePath(); m_projectName = QFileInfo(absoluteProjectName).fileName(); m_clean = n; m_build = g; m_compileFile = compileFile; m_errors = 0; m_warnings = 0; m_forceMode = forceMode; } // void Build::slotIncErrors() { m_errors++; } // void Build::slotIncWarnings() { m_warnings++; } // void Build::run() { QStringList list; m_buildProcess = new QProcess(); connect(m_buildProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(slotBuildMessages()) ); connect(m_buildProcess, SIGNAL(readyReadStandardError()), this, SLOT(slotBuildMessages()) ); m_buildProcess->setWorkingDirectory( m_projectDirectory ); if( m_qmake || !m_forceMode.isEmpty() ) { emit message( QString(tr("Update project"))+" (qmake "+m_projectName+")..." ); QStringList forceDebugList; if (!m_forceMode.isEmpty()) { forceDebugList << "-after" << "CONFIG+="+m_forceMode; } #ifdef Q_WS_MAC m_buildProcess->start(m_qmakeName, QStringList() <<"-spec"<< "macx-g++" << m_projectName << forceDebugList); #else m_buildProcess->start(m_qmakeName, QStringList() << m_projectName << forceDebugList); #endif if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } emit message( QString(m_buildProcess->readAll()) ); } if( m_clean ) { emit message( QString("\n"+tr("Clean Project")+" (make clean)...\n") ); m_buildProcess->start(m_makeName, QStringList("clean")); if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } emit message( QString(m_buildProcess->readAll()) ); } if( m_build ) { QString compilation = buildOnly(m_compileFile); if( !compilation.isEmpty() ) { m_buildProcess->start( compilation ); emit message( tr("\nCompilation of %1...\n").arg(m_compileFile) ); } else { emit message( QString("\n"+tr("Build")+" (make)...\n") ); m_buildProcess->start(m_makeName, QStringList() << m_makeOptions.split(" ", QString::SkipEmptyParts)); } if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } } emit message( QString(m_buildProcess->readAll()), m_projectDirectory); m_buildProcess->deleteLater(); } // void Build::slotBuildMessages() { #ifdef Q_OS_WIN32 // Divius: workaround for Windows: console use IBM 866 but system locale is CP1251 static QTextCodec *codec = QTextCodec::codecForName("IBM 866"); if (QLocale::system().language() == QLocale::Russian && codec) { emit message( codec->toUnicode(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( codec->toUnicode(m_buildProcess->readAllStandardError()), m_projectDirectory ); } else { emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardError()), m_projectDirectory ); } #else emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardError()), m_projectDirectory ); #endif } // void Build::slotStopBuild() { m_isStopped = true; emit message( QString("\n---------------------- "+tr("Build stopped")+" ----------------------\n") ); m_buildProcess->kill(); m_buildProcess->deleteLater(); } // QString Build::buildOnly( QString sourceFile ) { if( sourceFile.isEmpty() ) return QString(); bool automaticCompilation = false; if( sourceFile.endsWith("-qdeveloptmp.cpp") ) { sourceFile = sourceFile.section("-qdeveloptmp.cpp",0 ,0)+".cpp"; automaticCompilation = true; } QString objectFile = sourceFile.mid(0, sourceFile.lastIndexOf("."))+".o"; #ifndef WIN32 //QString name = QDir( m_projectDirectory ).relativeFilePath( sourceFile ); //return m_makeName+" "+ name.mid(0, name.lastIndexOf("."))+".o"; #endif QString shortObjectFile = objectFile; if( !objectFile.section("/", -1, -1).isEmpty() ) shortObjectFile = shortObjectFile.section("/", -1, -1).section(".", 0, 0)+".o"; QString directives; QFile makefile(m_projectDirectory+"/"+"Makefile"); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QString target, makefileFile, CXX, DEFINES, CXXFLAGS, INCPATH; while (!makefile.atEnd()) { QString line = QString( makefile.readLine() ); // This block is for Windows where the Makefile include Makefile.Debug or Makefile.Release. // Not used under Linux if( line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="debug" || line.section(" ", 1, 1).simplified()=="release")) target = line.section(" ", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "MAKEFILE" ) makefileFile = line.section("=", 1, 1).simplified(); if( !target.isEmpty() && line.section(":", 0, 0) == target ) { makefileFile = line.section(" ", 1, 1).simplified().replace("$(MAKEFILE)", makefileFile); makefile.close(); makefile.setFileName( m_projectDirectory+"/"+makefileFile ); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); target = QString(); continue; } // Common block for Windows and Linux if( line.section("=", 0, 0).simplified() == "CXX" ) CXX = line.section("=", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "DEFINES" ) DEFINES = line.section("=", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "CXXFLAGS" ) CXXFLAGS = line.section("=", 1, 1).simplified().replace("$(DEFINES)", DEFINES); if( line.section("=", 0, 0).simplified() == "INCPATH" ) INCPATH = line.section("=", 1, 1).simplified(); if( line.section("-o ", 1, 1).section(" ", 0, 0).replace("\\", "/").simplified().right(shortObjectFile.length()) == shortObjectFile ) { line = line.simplified(); line = line.replace("$(CXX)", CXX); line = line.replace("$(CXXFLAGS)", CXXFLAGS); line = line.replace("$(INCPATH)", INCPATH); directives = line; break; } } if( automaticCompilation ) { QString s = sourceFile.section(".cpp", 0, 0).section("/", -1); directives.replace(s+".o", s+"-qdeveloptmp.o"); directives.replace(s+".cpp", s+"-qdeveloptmp.cpp"); } return directives; } // qdevelop-v0.28/src/misc.cpp0000644000175000017500000002120011362261066014650 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "misc.h" #include #include #include #include #include #ifdef Q_OS_WIN32 #include #endif // QVariant addressToVariant(void *it ) { #if QT_POINTER_SIZE == 4 return QVariant( reinterpret_cast(it)); #else return QVariant( reinterpret_cast(it)); #endif } // QTreeWidgetItem* variantToItem( QVariant variant ) { #if QT_POINTER_SIZE == 4 return (QTreeWidgetItem*)variant.toUInt(); #else return (QTreeWidgetItem*)variant.toULongLong(); #endif } // QAction* variantToAction( QVariant variant ) { #if QT_POINTER_SIZE == 4 return (QAction*)variant.toUInt(); #else return (QAction*)variant.toULongLong(); #endif } // bool connectDB(QString const& dbName) { static bool errorAlreadyReported = false; QSqlDatabase database; if( QSqlDatabase::database(dbName).databaseName() != dbName ) { database = QSqlDatabase::addDatabase("QSQLITE", dbName); database.setDatabaseName(dbName); } else { database = QSqlDatabase::database(dbName); if ( database.isOpen() ) return true; } // if (!database.open()) { if (!errorAlreadyReported) QMessageBox::critical(0, "QDevelop", QObject::tr("Unable to establish a database connection.")+"\n"+ QObject::tr("QDevelop needs SQLite support. Please read " "the Qt SQL driver documentation for information how " "to build it."), QMessageBox::Cancel, QMessageBox::NoButton); errorAlreadyReported = true; return false; } else { QString queryString = "create table classesbrowser (" "text string," "tooltip string," "icon string," "key string," "parents string," "name string," "implementation string," "declaration string," "ex_cmd string," "language string," "classname string," "structname string," "enumname string," "access string," "signature string," "kind string" ")"; QSqlQuery query(database); query.exec(queryString); queryString = "create table editors (" "filename string," "scrollbar int," "numline int" ")"; query.exec(queryString); // queryString = "create table bookmarks (" "filename string," "numline int" ")"; query.exec(queryString); // queryString = "create table breakpoints (" "filename string," "numline int," "breakpointCondition string," "isTrue int" ")"; query.exec(queryString); // queryString = "create table projectsDirectories (" "projectName string," "srcDirectory string," "uiDirectory string" ")"; query.exec(queryString); // queryString = "create table config (" "key string," "value string" ")"; query.exec(queryString); // queryString = "create table checksums (" "filename string," "checksum int" ")"; query.exec(queryString); // } return true; } // //static function to determine the QDevelop directory (used for settings and global ctags database) // the directory is returnded WITH a trailing slash QString getQDevelopPath(void) { static QString path; if (!path.isEmpty()) return path; // if we havn't yet done so, determine the full db file name and make sure the directory exists // determine path for application data dirs #ifdef Q_OS_WIN32 wchar_t buf[MAX_PATH]; if (!SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, buf)) path = QString::fromUtf16((ushort *)buf)+"/"; else path = QDir::homePath()+"/Application Data/"; // this shouldn't happen #else path = QDir::homePath()+"/"; #endif // create subdir QDir dir(path); #ifdef Q_OS_WIN32 dir.mkdir("QDevelop"); path += "QDevelop/"; #else dir.mkdir(".qdevelop"); path += ".qdevelop/"; #endif return path; } // QString simplifiedText(const QString string) { QString m_fileString = string; enum CodeState { NORMAL, NORMAL_GOT_SLASH, COMMENT_SINGLE_LINE, COMMENT_MULTI_LINE, COMMENT_GOT_STAR, COMMENT_GOT_ESCAPE, STRING, STRING_GOT_ESCAPE, CHAR, CHAR_GOT_ESCAPE } state = NORMAL; QChar c; int i; bool isAfterSharp = false; for (i = 0; i < m_fileString.count(); i++) { c = m_fileString.at(i); switch (state) { case NORMAL: if (c == '/') { state = NORMAL_GOT_SLASH; break; } else if (c == '"' ) { state = STRING; } else if (c == '\'' ) { state = CHAR; } else if (c == '#' ) { isAfterSharp = true; } else if (c == QChar('\n') ) { isAfterSharp = false; } break; case NORMAL_GOT_SLASH: if (c == '/') { state = COMMENT_SINGLE_LINE; m_fileString[i-1] = m_fileString[i] = ' '; } else if (c == '*') { state = COMMENT_MULTI_LINE; m_fileString[i-1] = m_fileString[i] = ' '; } else { state = NORMAL; } isAfterSharp = false; break; case COMMENT_SINGLE_LINE: if (c == '\n') { state = NORMAL; } else if (c == '\\') { state = COMMENT_GOT_ESCAPE; m_fileString[i] = ' '; } else m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_MULTI_LINE: if (c == '*') { state = COMMENT_GOT_STAR; } m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_GOT_STAR: if (c == '*') state = COMMENT_GOT_STAR; else if (c == '/') state = NORMAL; else state = COMMENT_MULTI_LINE; m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_GOT_ESCAPE: state = COMMENT_SINGLE_LINE; m_fileString[i] = ' '; break; case STRING: if (c == '\\') { state = STRING_GOT_ESCAPE; m_fileString[i] = ' '; } else if (c == '"') { state = NORMAL; } else if( isAfterSharp ) m_fileString[i] = c; else m_fileString[i] = ' '; break; case CHAR: if (c == '\\') { state = CHAR_GOT_ESCAPE; m_fileString[i] = ' '; } else if (c == '\'') { state = NORMAL; } else m_fileString[i] = ' '; break; case STRING_GOT_ESCAPE: state = STRING; m_fileString[i] = ' '; break; case CHAR_GOT_ESCAPE: state = CHAR; m_fileString[i] = ' '; break; } } return m_fileString; } qdevelop-v0.28/src/debug.h0000644000175000017500000000471311362261066014462 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DEBOGAGE_H #define DEBOGAGE_H #include #include #include #include #include "projectmanager.h" // struct Variable; class BlockUserData; class RegistersImpl; // class Debug : public QThread { Q_OBJECT public: Debug(QObject * parent, RegistersImpl *registersImpl, QString gdbName, Parameters p, QString exe, bool exeOnly=false); void run(); enum Request { None, Registers, InfoSources, InfoScope, Local, OtherArgs, Whatis, Address, Length, Value}; private: // Methods void writeMessagesToDebugger(); void launchDebug(); void executeWithoutDebug(); void configureGdb(); void setEnvironment(QProcess *process); // Variables QString executableName; QString m_gdbName; QStringList messagesToDebugger; QProcess *processDebug; int m_pid; bool m_executeWithoutDebug; bool m_infoSources; Parameters m_parameters; Request m_request; QList listVariables, listVariablesToSend; QStringList m_otherVariables; QObject * m_parent; RegistersImpl *m_registersImpl; signals: void message(QString); void endDebug(); void onPause(); void debugVariables( QList ); public slots: void slotBreakpoint(QString filename, unsigned int line, BlockUserData *); protected slots: void slotMessagesDebug(); void slotMessagesError(); void slotDebugCommand(QString text); void slotStopDebug(); void slotPauseDebug(); void slotOtherVariables(QStringList list); }; // struct Variable { Debug::Request kind; QString name; QString type; int length; QString content; QString address; int pos; }; #endif qdevelop-v0.28/src/addexistantimpl.cpp0000644000175000017500000000743111362261066017121 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addexistantimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include // AddExistantImpl::AddExistantImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(fileButton, SIGNAL(clicked()), this, SLOT(slotFilesChoice()) ); connect(locationButton, SIGNAL(clicked()), this, SLOT(slotLocationChoice()) ); connect(comboProjects, SIGNAL(activated(QString)), this, SLOT(slotComboProjects(QString)) ); } // void AddExistantImpl::slotAccept() { if( filename->text().isEmpty() ) { QMessageBox::warning(0, "QDevelop", tr("Enter a filename."), tr("Cancel") ); return; } if( copy->isChecked() ) { if( location->text().isEmpty() ) { QMessageBox::warning(0, "QDevelop", tr("Enter a location destination."), tr("Cancel") ); return; } location->setText( location->text().replace("\\", "/") ); if( location->text().right(1) != "/" ) location->setText( location->text()+"/" ); QString newList; foreach(QString filenamestr, filename->text().split(",")) { filenamestr = filenamestr.remove("\"").simplified(); filenamestr.replace("\\", "/"); if( !QFile::exists( filenamestr ) ) { QMessageBox::warning(0, "QDevelop", tr("The file %1 doesn't exist.").arg(filenamestr), tr("Cancel") ); return; } QString f = filenamestr.section("/", -1, -1); if( !QFile::copy(filenamestr, location->text()+f) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to copy %1").arg(filenamestr), tr("Cancel") ); return; } newList += "\"" + location->text()+f + "\","; } filename->setText( newList ); } accept(); } // void AddExistantImpl::slotLocationChoice() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose a directory"), m_projectDirectory, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if( s.isEmpty() ) { // Cancel is clicked return; } location->setText( s ); } // void AddExistantImpl::slotFilesChoice() { QStringList s = QFileDialog::getOpenFileNames( this, tr("Choose the file to add"), m_projectDirectory, tr("Files (*.cpp *.h *.hpp *.ui *.qrc *.ts)") ); if( s.isEmpty() ) { // Cancel is clicked return; } QString line; foreach(QString file, s) line += "\"" + file + "\", "; if( line.length() ) line = line.mid(0, line.length() - 2); filename->setText( line ); } // void AddExistantImpl::slotComboProjects(QString /*projectName*/) { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); m_projectDirectory = m_projectManager->projectDirectory( item ); } // qdevelop-v0.28/src/addnewimpl.h0000644000175000017500000000256411362261066015522 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEW_H #define ADDNEW_H #include "ui_addnew.h" #include // class ProjectManager; // class AddNewImpl : public QDialog, public Ui::AddNew { Q_OBJECT public: AddNewImpl(ProjectManager * parent = 0); public slots: void slotComboProjects(QString projectName); void slotFileType(); private: ProjectManager *m_projectManager; QString m_projectDirectory; QString suffixe; private slots: void slotAccept(); void slotDirectoryChoice(); }; #endif qdevelop-v0.28/src/toolscontrolimpl.h0000644000175000017500000000441511362261066017016 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TOOLSCONTROLIMPL_H #define TOOLSCONTROLIMPL_H // #include "ui_toolsControl.h" // class ToolsControlImpl : public QDialog, public Ui::ToolsControl { Q_OBJECT public: ToolsControlImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); bool toolsControl(); QString qmakeName() { return qmake->text(); }; QString makeName() { return make->text(); }; QString gdbName() { return gdb->text(); }; QString ctagsName() { return ctags->text(); }; QString linguistName() { return linguist->text(); }; QString lupdateName() { return lupdate->text(); }; QString lreleaseName() { return lrelease->text(); }; QString designerName() { return designer->text(); }; QString assistantName() { return assistant->text(); }; bool ctagsIsPresent() { return m_ctagsIsPresent; }; bool checkEnvOnStartup() { return checkEnvironmentOnStartup->isChecked(); }; QString qVersion(); private slots: void on_assistantLocation_clicked(); void on_linguistLocation_clicked(); void on_lupdateLocation_clicked(); void on_lreleaseLocation_clicked(); void on_designerLocation_clicked(); void on_buttonBox_clicked(QAbstractButton * button ); void on_qmakeLocation_clicked(); void on_makeLocation_clicked(); void on_gdbLocation_clicked(); void on_ctagsLocation_clicked(); void on_test_clicked(); void chooseLocation(QLineEdit *dest); private: bool m_ctagsIsPresent; QString m_qVersion; }; #endif qdevelop-v0.28/src/projectpropertieimpl.h0000644000175000017500000000460411362261066017655 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PROJECTPROPERTIE_IMPL #define PROJECTPROPERTIE_IMPL #include "ui_projectpropertie.h" #include "ui_newvariable.h" #include #include // class ProjectManager; // class ProjectPropertieImpl : public QDialog, public Ui::ProjectPropertie { Q_OBJECT public: ProjectPropertieImpl(ProjectManager * parent, QTreeWidget *tree,QTreeWidgetItem *itProject); public slots: private: ProjectManager *m_projectManager; QTreeWidgetItem *m_itProject; QTreeWidgetItem *m_copyItProject; QTreeWidget *m_treeFiles; QTreeWidget *m_copyTreeFiles; QString m_projectName; // void parse(QTreeWidgetItem *it); void parseTemplate(QTreeWidgetItem *it); void parseConfig(QTreeWidgetItem *it); void parseQT(QTreeWidgetItem *it); void populateComboScope(); void connections(); void unconnections(); void clearFields(); QTreeWidgetItem *subItTemplate(QTreeWidgetItem *it); QTreeWidgetItem *subItQT(QTreeWidgetItem *it); QTreeWidgetItem *subItConfig(QTreeWidgetItem *it); void makeComboVariables( QComboBox *combo ); private slots: void slotSubdirs(bool); void slotCheck(bool); void slotAccept(); void slotComboScope(int index); void slotCurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); void slotAddVariable(); void slotDeleteVariable(); void slotAddValue(); void slotDeleteValue(); void slotModifyValue(); void copyTreeWidget(QTreeWidgetItem *source, QTreeWidgetItem *dest); void slotSrcDirectory(); void slotUiDirectory(); }; #endif qdevelop-v0.28/src/addnewclassvariableimpl.h0000644000175000017500000000402211362261066020245 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSVARIABLEIMPL_H #define ADDNEWCLASSVARIABLEIMPL_H // #include "ui_addnewclassvariable.h" // class MainImpl; class TreeClasses; class QTreeWidgetItem; class Editor; // class AddNewClassVariableImpl : public QDialog, public Ui::AddNewClassVariable { Q_OBJECT public: AddNewClassVariableImpl( MainImpl * parent, TreeClasses *treeClasses, QTreeWidgetItem *treeWidget, QString declaration, QString implementation, QString classname); bool addGet() { return get->isChecked(); } QString addGetName() { return getName->text(); } bool addGetInline() { return getInline->isChecked(); } bool addSet() { return set->isChecked(); } QString addSetName() { return setName->text(); } bool addSetInline() { return setInline->isChecked(); } private slots: void on_variableName_textChanged(QString ); void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QTreeWidgetItem *m_treeWidget; QString m_declaration; QString m_implementation; QString m_classname; void insertInDeclaration(QString scope, QString insertedText); void insertInImplementation(QString insertedText); }; #endif qdevelop-v0.28/src/parametersimpl.cpp0000644000175000017500000001071611362261066016754 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "parametersimpl.h" // #include #include #include #include // #include // ParametersImpl::ParametersImpl(QWidget * parent) : QDialog(parent) { setupUi(this); tableVariables->verticalHeader()->hide(); QHeaderView *header = tableVariables->horizontalHeader(); header->resizeSection(1, 230); on_defaults_clicked(); } // Parameters ParametersImpl::parameters() { Parameters p; p.workingDirectory = location->text(); p.arguments = arguments->text(); for(int row=0; rowrowCount(); row++) p.env << tableVariables->item(row, 0)->text()+"="+tableVariables->item(row, 1)->text(); return p; } // void ParametersImpl::setParameters(Parameters p) { arguments->setText( p.arguments ); newVariable->clear(); location->setText( p.workingDirectory ); for(int i=0; irowCount(); i++) tableVariables->removeRow(0); int row = 0; foreach(QString s, p.env) { tableVariables->setRowCount(row+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( s.section("=", 0, 0) ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(row, 0, itemCol0); tableVariables->setItem(row++, 1, new QTableWidgetItem( s.section("=", 1, 1))); } } // void ParametersImpl::on_defaults_clicked() { arguments->clear(); newVariable->clear(); location->clear(); for(int i=0; irowCount(); i++) tableVariables->removeRow(0); QStringList systemEnvironment = QProcess::systemEnvironment(); int row = 0; foreach(QString s, systemEnvironment) { tableVariables->setRowCount(row+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( s.section("=", 0, 0) ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(row, 0, itemCol0); tableVariables->setItem(row++, 1, new QTableWidgetItem( s.section("=", 1))); } } // void ParametersImpl::on_chooseDirectory_clicked() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } location->setText( s ); } // void ParametersImpl::on_add_clicked() { QString variable = newVariable->text().section("=", 0, 0).simplified(); QString value = newVariable->text().section("=", 1, 1).simplified(); if (variable.isEmpty() || value.isEmpty() ) return; if( tableVariables->findItems(variable, Qt::MatchExactly).count() ) { QMessageBox::warning(this, "QDevelop", tr("The variable \"%1\" already exists.").arg(variable), tr("Cancel") ); return; } tableVariables->setRowCount(tableVariables->rowCount()+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( variable ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(tableVariables->rowCount()-1, 0, itemCol0); tableVariables->setItem(tableVariables->rowCount()-1, 1, new QTableWidgetItem( value ) ); } // void ParametersImpl::on_del_clicked() { int row = tableVariables->currentRow(); if( row != 1 ) tableVariables->removeRow( row ); } // void ParametersImpl::on_sort_clicked() { tableVariables->sortItems(0); } // void ParametersImpl::on_edit_clicked() { int row = tableVariables->currentRow(); if( row != 1 ) { tableVariables->setCurrentItem( tableVariables->item(row, 1) ); tableVariables->editItem( tableVariables->item(row, 1) ); } } // void ParametersImpl::on_tableVariables_itemDoubleClicked(QTableWidgetItem* /*item*/) { on_edit_clicked(); } // qdevelop-v0.28/src/shortcutsimpl.cpp0000644000175000017500000000631011362261066016642 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include "shortcutsimpl.h" #include "ui_main.h" #include "mainimpl.h" #include "misc.h" // ShortcutsImpl::ShortcutsImpl(QWidget * parent) : QDialog(parent), m_mainImpl((MainImpl *)parent) { setupUi(this); initTable( m_mainImpl ); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(defaultButton, SIGNAL(clicked()), this, SLOT(slotDefault()) ); } // void ShortcutsImpl::initTable(MainImpl *main) { QList childrens = main->children(); QListIterator iterator(childrens); int row = 0; while( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if (action) { QString text = action->text().remove("&"); if ( !text.isEmpty() && !(action->data().toString().contains("Recent|")) ) { QString shortcut = action->shortcut(); QTableWidgetItem *newItem = new QTableWidgetItem(text); newItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); newItem->setData(Qt::UserRole, addressToVariant(object)); newItem->setIcon(action->icon()); table->setRowCount(row+1); table->setItem(row, 0, newItem); table->setItem(row++, 1, new QTableWidgetItem(shortcut)); } } table->sortItems( 0 ); } QHeaderView *header = table->horizontalHeader(); header->resizeSection( 0, 230 ); table->verticalHeader()->hide(); } // void ShortcutsImpl::slotAccept() { for(int row=0; rowrowCount(); row++ ) { QTableWidgetItem *item = table->item(row, 0); QAction *action = (QAction *)variantToAction( item->data(Qt::UserRole) ); QString shortcut = table->item(row, 1)->text(); action->setShortcut( shortcut ); } } // void ShortcutsImpl::slotDefault() { QMainWindow *dial = new QMainWindow; Ui::Main ui; ui.setupUi(dial); QList childrens = dial->children(); QListIterator iterator(childrens); while( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if (action) { QString text = action->text().remove("&"); QString shortcut = action->shortcut(); QList listFind = table->findItems(text , Qt::MatchExactly); if( listFind.count() ) table->item(table->row(listFind.first()), 1)->setText(shortcut); } } delete dial; } qdevelop-v0.28/src/addnewclassimpl.cpp0000644000175000017500000001577211362261066017110 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include #include // AddNewClassImpl::AddNewClassImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private"); scope->setCurrentIndex(0); } // void AddNewClassImpl::on_className_textChanged(QString ) { QString s = className->text().toLower(); header->setText( s + ".h" ); implementation->setText( s + ".cpp" ); control(); } void AddNewClassImpl::on_directoryButton_clicked() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel choosen return; } location->setText( s ); control(); } // void AddNewClassImpl::control() { bool enable = true; if ( className->text().isEmpty() ) enable = false; if ( implementation->text().isEmpty() ) enable = false; if ( header->text().isEmpty() ) enable = false; okButton->setEnabled( enable ); } // void AddNewClassImpl::on_okButton_clicked() { QByteArray templateData; QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QString projectDir = m_projectManager->projectDirectory( item ); // QString impl = implementation->text(); // filter out bad chars int j = impl.length(); for ( int i=0; i < j; i++ ) { if (!impl[i].isLetterOrNumber() && impl[i]!='.' ) impl[i] = '_'; } QString absoluteNameImpl = QDir( location->text() ).absoluteFilePath( impl ) ; QString relativeNameImpl = QDir( projectDir ).relativeFilePath( absoluteNameImpl ); // QString head = header->text(); // filter out bad chars j = head.length(); for ( int i=0; i < j; i++ ) { if (!head[i].isLetterOrNumber() && head[i]!='.' ) head[i] = '_'; } QString absoluteNameHeader = QDir( location->text() ).absoluteFilePath( head ) ; QString relativeNameHeader = QDir( projectDir ).relativeFilePath( absoluteNameHeader ); // QFile file ( absoluteNameHeader ); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists.").arg(absoluteNameHeader), tr("Cancel") ); return; } if ( !file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } file.write( templateHeaderImpl().toLatin1() ); file.close(); // QFile file2 ( absoluteNameImpl ); if ( file2.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists.").arg(absoluteNameImpl), tr("Cancel") ); return; } if ( !file2.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } file2.write( templateSourceImpl().toLatin1() ); file2.close(); m_projectManager->insertFile(item, relativeNameHeader); m_projectManager->insertFile(item, relativeNameImpl); m_projectManager->setQmake( m_projectManager->projectFilename( item ) ); accept(); } // QString AddNewClassImpl::templateHeaderImpl() { QString filename = header->text(); QString classImpl = className->text(); QFile file(":/templates/templates/newclassimpl.h.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$IMPL_H", filename.toUpper().section(".H", 0, 0) +"_H"); if ( checkboxInherits->isChecked() ) { data.replace("$ANCESTORFILENAME", "#include <"+ ancestorFilename->text() +">"); data.replace("$SCOPE", ": "+scope->currentText()); data.replace("$PARENTNAME", ancestor->text()); if ( !ancestor->text().length() || ancestor->text().left(1) != "Q" ) data.replace("Q_OBJECT", ""); } else { data.replace("$ANCESTORFILENAME", ""); data.replace("$SCOPE", ""); data.replace("$PARENTNAME", ""); data.replace("Q_OBJECT", ""); } if ( virtualDestructor->isChecked() ) data.replace("$VIRTUAL", "virtual ~"+className->text()+"();"); else data.replace("$VIRTUAL", ""); data.replace("$ARGUMENTS", arguments->text()); data.replace("$CLASSNAME", className->text()); return data; } // QString AddNewClassImpl::templateSourceImpl() { QString filename = implementation->text(); QString classImpl = className->text(); QFile file(":/templates/templates/newclassimpl.cpp.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); if ( checkboxInherits->isChecked() ) { data.replace("$ANCESTOR", "\n\t: " + ancestor->text() + "()" ); } else { data.replace("$ANCESTOR", ""); } if ( virtualDestructor->isChecked() ) data.replace("$VIRTUAL", className->text()+"::~"+className->text()+"()\n{\n}\n//"); else data.replace("$VIRTUAL", ""); data.replace("$HEADERNAME", "#include \""+header->text()+"\""); data.replace("$ARGUMENTS", arguments->text()); data.replace("$CLASSNAME", className->text()); return data; } void AddNewClassImpl::on_comboProjects_currentIndexChanged(int index) { QVariant variant = comboProjects->itemData( index ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); QString projectDirectory = m_projectManager->srcDirectory( item ); location->setText( projectDirectory ); } qdevelop-v0.28/src/projectmanager.h0000644000175000017500000001215511362261066016374 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PROJECTMANAGER_H #define PROJECTMANAGER_H #include #include #include #include #include #include #include #include // typedef struct { QString arguments; QString workingDirectory; QStringList env; bool isEmpty; } Parameters; // typedef struct { QString key; QString op; } Item; Q_DECLARE_METATYPE(Item) // class TreeProject; class TreeClasses; class QTreeWidget; class QTreeWidgetItem; class MainImpl; // // class ProjectManager : public QObject { Q_OBJECT public: ProjectManager(MainImpl * parent, TreeProject *treeFiles, TreeClasses *treeClasses); ~ProjectManager(); void init(QString name); QString absoluteNameProjectFile(QTreeWidgetItem *it); QString projectFilename(QTreeWidgetItem *it); QString projectDirectory(QTreeWidgetItem *it); QString projectDirectory(QString projectName); QString fileDirectory(QString absoluteFilename); QString projectName(QString directoryName); void setUiDirectory(QTreeWidgetItem *it, QString s); QString uiDirectory(QTreeWidgetItem *it); void setSrcDirectory(QTreeWidgetItem *it, QString s); QString srcDirectory(QTreeWidgetItem *it); QStringList buildableProjectsDirectories(); QStringList dependpath(QTreeWidgetItem *it); void headers(QTreeWidgetItem *it, QStringList &headerFiles); void sources(QTreeWidgetItem *it, QStringList &sourcesFiles); bool qmake(QString projectName=QString()); bool isModifiedProject() { return m_isModifiedProject; }; QString executableName(QString preferedVersion); bool isReleaseVersion() { return m_releaseVersion; }; void saveProjectSettings(); bool close(); void childsList(QTreeWidgetItem *begin, QString key, QList &list); Parameters parameters(); void setParameters(Parameters p); QString projectDirectoryOfExecutable() { return m_projectDirectoryOfExecutable;}; QString findData(QString projectName, QString key); QTreeWidgetItem *itemProject(QString projectName); QStringList parents(QTreeWidgetItem *it); void parseTreeClasses(bool force=false ); void setQmake(QString projectName); void insertFile(QTreeWidgetItem *it, QString filename, bool silentMode=false); void setCurrentItem(const QString& _strFileName); QString toKey(QVariant variant); QString toOp(QVariant variant); QVariant toItem(QString key, QString op=QString()); private: QTreeWidgetItem* find_r(const QTreeWidgetItem* _pItem, const QString& _strFileName, const QString& _strProjectDir); enum findMode { Key, Data }; // Methods void loadProject(QString s, QTreeWidgetItem *newProjectItem); QString findExecutable( QString projectDirectory, QString preferedVersion ); QString projectVersion(QTreeWidgetItem *it); QTreeWidgetItem *item(QTreeWidgetItem *begin, QString name, findMode type); bool saveDataOfProject(QTreeWidgetItem *item, QTextStream *s, int nbSpace=-1, QString endOfLine=""); QTreeWidgetItem * insertItem(QTreeWidgetItem *parent, QString key, QString data, QString op=QString()); bool listContains(QList, QString name, findMode type); void loadProjectSettings(); bool m_isModifiedProject; // Variables MainImpl *m_parent; TreeProject *m_treeFiles; TreeClasses *m_treeClasses; QString m_absoluteNameProjectFile; QString m_projectDirectoryOfExecutable; QStringList m_classes; QStringList m_executablesList; QStringList m_projectDirectoryOfExecutableList; QWidget *m_previewForm; Parameters m_parameters; bool m_releaseVersion; protected: bool eventFilter( QObject *obj, QEvent *ev ); signals: public slots: void slotResetExecutablesList() { m_executablesList.clear(); }; bool slotSaveProject(); void slotAddExistingFiles(QTreeWidgetItem *it=0); void slotAddNewItem(QTreeWidgetItem *it=0, QString kind=QString()); void slotAddNewClass(QTreeWidgetItem *it=0); void slotAddScope(QTreeWidgetItem *it=0); void slotAddSubProject(QTreeWidgetItem *it=0); void slotlupdate(QTreeWidgetItem *); void slotlrelease(QTreeWidgetItem *); void slotDeleteItem(QTreeWidgetItem *it=0, bool silentMode=false); void slotRenameItem(QTreeWidgetItem *it=0); void slotProjectPropertie(QTreeWidgetItem *it=0); void slotSubclassing(QTreeWidgetItem *it=0); void slotPreviewForm(QTreeWidgetItem *it=0); void slotSort(); }; #endif qdevelop-v0.28/src/build.h0000644000175000017500000000360211362261066014467 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef BUILD_H #define BUILD_H #include #include #include // class QProcess; class Build : public QThread { Q_OBJECT public: Build(QObject * parent, QString qmakeName, QString makename, QString makeOptions, QString absoluteProjectName, bool qmake, bool n, bool g, QString compileFile=0, QString forceMode = QString()); void run(); int nbErrors() { return m_errors; } int nbWarnings() { return m_warnings; } private: bool m_qmake; QString m_projectDirectory; QString m_projectName; bool m_clean; bool m_build; bool m_isStopped; QString m_compileFile; QProcess *m_buildProcess; QString buildOnly( QString sourceFile ); QString m_qmakeName; QString m_makeName; QString m_makeOptions; int m_errors; int m_warnings; QString m_forceMode; signals: void message(QString, QString=0); protected slots: void slotBuildMessages(); void slotStopBuild(); public slots: void slotIncErrors(); void slotIncWarnings(); }; #endif qdevelop-v0.28/src/subclassingimpl.h0000644000175000017500000000416611362261066016575 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SUBCLASSINGIMPL_H #define SUBCLASSINGIMPL_H #include "ui_subclassing.h" #include "ui_newimplementation.h" class ProjectManager; class QSortFilterProxyModel; class QTreeWidget; class MainImpl; class SubclassingImpl : public QDialog, public Ui::Subclassing { Q_OBJECT public: SubclassingImpl(ProjectManager * parent, MainImpl *mainImpl, QString srcDirectory, QString uiName, QStringList headers); QString newFile(); inline bool isValid() { return !objectName().isEmpty(); } private: void implementations(QStringList); static QStringList signatures(QString header); QString objectName(); QString className(); QStringList templateHeaderImpl(); QStringList templateSourceImpl(); private slots: void on_okButton_clicked(); void on_clearButton_clicked(); void on_newImplementation_clicked(); void on_comboClassName_activated(int i); void on_filterEdit_textChanged(const QString &text); void slotParseForm(); void slotLocation(); void slotEnableokButton(QString); private: ProjectManager *m_parent; MainImpl *m_mainImpl; QSortFilterProxyModel *proxyModel; QString m_uiName; QString m_srcDirectory; QTreeWidget *treeSlots; Ui::NewImplementation uiNewImplementation; }; #endif qdevelop-v0.28/src/newprojectimpl.cpp0000644000175000017500000002610711362261066016772 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "newprojectimpl.h" #include "projectmanager.h" #include "mainimpl.h" #include #include #include // NewProjectImpl::NewProjectImpl(QWidget * parent, QString s) : QDialog(0), m_projectLocation(s) { setupUi(this); m_mainImpl = (MainImpl *)parent; connect(locationButton, SIGNAL(clicked()), this, SLOT(slotChooseDirectory()) ); connect(projectName, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) ); connect(location, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) ); location->setText( s ); on_dialog_clicked(true); srcDirectory->setText("src"); buildDirectory->setText("build"); uiDirectory->setText("ui"); binDirectory->setText("bin"); } // void NewProjectImpl::slotChooseDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), m_projectLocation, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel clicked return; } location->setText( s ); } // void NewProjectImpl::slotLabel() { //label->setText( label->text().section(":", 0, 0) + ": " + location->text() + "/" + projectName->text().toLower().remove(".pro") ); if ( projectName->text().isEmpty() || location->text().isEmpty() ) { okButton->setEnabled( false ); label->setText( label->text().section(":", 0, 0) + ": " ); } else { okButton->setEnabled( true ); label->setText( label->text().section(":", 0, 0) + ": " + location->text() + "/" + QFileInfo(projectName->text()).baseName() ); } } void NewProjectImpl::on_dialog_clicked(bool checked) { if (!checked) return; uiFilename->setText( "dialog" ); subclassFilename->setText( "dialogimpl" ); uiObjectName->setText( "Dialog" ); subclassObjectName->setText( "DialogImpl" ); } void NewProjectImpl::on_mainwindow_clicked(bool checked) { if (!checked) return; uiFilename->setText( "mainwindow" ); subclassFilename->setText( "mainwindowimpl" ); uiObjectName->setText( "MainWindow" ); subclassObjectName->setText( "MainWindowImpl" ); } void NewProjectImpl::on_okButton_clicked() { bool isSubProject = false; if ( !parentProjectName->text().isEmpty() ) isSubProject = true; if ( !isSubProject && !m_mainImpl->slotCloseProject() ) { reject(); } m_filename = projectName->text(); if ( !m_filename.toLower().contains( ".pro" ) ) m_filename += ".pro"; QString projectDirectory = location->text(); projectDirectory += "/" + m_filename.left( m_filename.lastIndexOf(".") ); QString l_srcDirectory = projectDirectory+"/"+srcDirectory->text(); QString l_uiDirectory = projectDirectory+"/"+uiDirectory->text(); QString l_buildDirectory = buildDirectory->text(); QString l_binDirectory = binDirectory->text(); QString l_uiFilename = uiFilename->text(); QString l_uiObjectName = uiObjectName->text(); QString l_subclassFilename = subclassFilename->text(); QString l_subclassObjectName = subclassObjectName->text(); m_absoluteProjectName = projectDirectory + "/" + m_filename ; QDir dir; if (dir.exists(projectDirectory)) { if (QFile::exists(m_absoluteProjectName)) { QMessageBox::warning(this, "QDevelop", tr("Project file \"%1\" already exists").arg(m_absoluteProjectName), tr("Cancel") ); return; } else if ( QMessageBox::question(this, "QDevelop", tr("The directory \"%1\" already exists. Do you want to create project anyway?").arg(projectDirectory), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No ) { return; } } else if ( !dir.mkpath(projectDirectory) ) { QMessageBox::warning(this, "QDevelop", tr("The directory \"%1\" cannot be created").arg(projectDirectory), tr("Cancel") ); return; } QFile projectFile ( m_absoluteProjectName ); if ( !projectFile.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(this, "QDevelop", tr("The project cannot be created"), tr("Cancel") ); return; } else { QByteArray projectFileContent; if ( !empty->isChecked() ) { projectFileContent += "TEMPLATE = app\n"; projectFileContent += "QT = gui "; projectFileContent += "core\n"; projectFileContent += "CONFIG += qt "; QString version = "debug"; if ( release->isChecked() ) projectFileContent += "release "; else projectFileContent += "debug "; projectFileContent += "warn_on "; projectFileContent += "console\n"; } if ( dialog->isChecked() || mainwindow->isChecked() ) { if ( !l_srcDirectory.isEmpty() ) { QDir().mkdir( l_srcDirectory ); } if ( !l_uiDirectory.isEmpty() ) { QDir().mkdir( l_uiDirectory ); } if ( !l_binDirectory.isEmpty() ) { projectFileContent += "DESTDIR = "+l_binDirectory+"\n"; } if ( !l_buildDirectory.isEmpty() ) { projectFileContent += "OBJECTS_DIR = "+l_buildDirectory+"\n"; projectFileContent += "MOC_DIR = "+l_buildDirectory+"\n"; projectFileContent += "UI_DIR = "+l_buildDirectory+"\n"; } if ( dialog->isChecked() ) { QFile file(":/templates/templates/dialog.ui"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("Dialog", ""+l_uiObjectName.toAscii()+""); data.replace("name=\"Dialog\"", "name=\""+l_uiObjectName.toAscii()+"\""); QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui"); uiFile.open(QIODevice::WriteOnly); uiFile.write( data ); uiFile.close(); projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n"; } else if ( mainwindow->isChecked() ) { QFile file(":/templates/templates/mainwindow.ui"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("MainWindow", ""+l_uiObjectName.toAscii()+""); data.replace("name=\"MainWindow\"", "name=\""+l_uiObjectName.toAscii()+"\""); QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui"); uiFile.open(QIODevice::WriteOnly); uiFile.write( data ); uiFile.close(); projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n"; } // Create subclassing header QFile file(":/templates/templates/impl.h.template"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("$IMPL_H", QString( l_subclassFilename.section(".h", 0, 0).toUpper()+"_H" ).toAscii()); data.replace("$UIHEADERNAME", QString( "\"ui_"+l_uiFilename.section(".ui", 0, 0)+".h\"").toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); if ( dialog->isChecked() ) data.replace("$PARENTNAME", QString( "QDialog" ).toAscii()); else data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii()); data.replace("$OBJECTNAME", QString( l_uiObjectName ).toAscii()); QFile headerFile(l_srcDirectory + "/" + l_subclassFilename + ".h"); headerFile.open(QIODevice::WriteOnly); headerFile.write( data ); headerFile.close(); projectFileContent += "HEADERS = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".h") + "\n"; // Create subclassing sources QFile file2(":/templates/templates/impl.cpp.template"); file2.open(QIODevice::ReadOnly); data = file2.readAll(); file2.close(); QFile sourceFile(l_srcDirectory + "/" + l_subclassFilename + ".cpp"); data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); if ( dialog->isChecked() ) data.replace("$PARENTNAME", QString( "QDialog" ).toAscii()); else data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii()); sourceFile.open(QIODevice::WriteOnly); sourceFile.write( data ); sourceFile.close(); projectFileContent += "SOURCES = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".cpp")+" "; // Create main.cpp QFile file3(":/templates/templates/main.cpp.template"); file3.open(QIODevice::ReadOnly); data = file3.readAll(); file3.close(); QFile mainFile(l_srcDirectory + "/" + "main.cpp"); data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); mainFile.open(QIODevice::WriteOnly); mainFile.write( data ); mainFile.close(); projectFileContent += QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + "main.cpp") + "\n"; } // projectFile.write( projectFileContent ); projectFile.close(); accept(); } } qdevelop-v0.28/src/cpphighlighter.cpp0000644000175000017500000003261311362261066016730 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Trent Zhou * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include #include #include "cpphighlighter.h" // CppHighlighter::CppHighlighter(QTextDocument* document): QSyntaxHighlighter(document), m_reInclude("^\\s*#\\s*include\\s*(<.+>|\\\".+\\\")"), m_reMacro("^\\s*#.*$"), m_reMultilineMacro("^\\s*#\\s*(define|if|elif|pragma|warning|error)"), m_reSpecial("//|\\\"|'|/\\*") { setupRegexTable(); m_formatFunction.setForeground(Qt::black); m_formatSingleLineComment.setForeground(Qt::red); m_formatKeyword.setForeground(Qt::blue); m_formatUserKeyword.setForeground(Qt::darkBlue); m_formatOperator.setForeground(Qt::black); m_formatNumber.setForeground(Qt::darkMagenta); m_formatEscapeChar.setForeground(Qt::darkBlue); m_formatMacro.setForeground(Qt::darkGreen); m_formatMultiLineComment.setForeground(Qt::red); m_formatString.setForeground(Qt::darkCyan); } // CppHighlighter::~CppHighlighter() { } // QTextCharFormat const& CppHighlighter::formatFor(SyntaxType type) { switch (type) { case TEXT: default: break; case FUNCTION: return m_formatFunction; case SINGLE_LINE_COMMENT: return m_formatSingleLineComment; case KEYWORD: return m_formatKeyword; case USER_KEYWORD: return m_formatUserKeyword; case OPERATOR: return m_formatOperator; case NUMBER: return m_formatNumber; case ESCAPE_CHAR: return m_formatEscapeChar; case MACRO: return m_formatMacro; case MULTI_LINE_COMMENT: return m_formatMultiLineComment; case STRING: return m_formatString; } static QTextCharFormat format; return format; } // void CppHighlighter::doRegexMatch(QString const& str, int startPos) { foreach (RegexItem item, m_regexItems) { int index = 0; int start = startPos; for (;;) { index = str.indexOf(item.regex, start); if (index == -1) break; int length = item.regex.matchedLength(); start = index + length; QString cap = item.regex.cap(); if (item.type == TEXT) { if ((cap.at(0) == 'Q') || m_userKeywords.contains(cap)) setFormat(index, length, formatFor(USER_KEYWORD)); else if (m_keywords.contains(cap)) setFormat(index, length, formatFor(KEYWORD)); continue; } setFormat(index, length, formatFor(item.type)); } } } // void CppHighlighter::addUserKeyword(QString const& keyword) { m_userKeywords.insert(keyword); } // bool CppHighlighter::removeUserKeyword(QString const& keyword) { if (m_userKeywords.contains(keyword)) { m_userKeywords.remove(keyword); return true; } return false; } // void CppHighlighter::setupRegexTable() { RegexItem item; m_regexItems.clear(); // number item.regex = QRegExp("\\b([0-9]+|0[xX][0-9a-fA-F]+|0[0-7]+)(\\.[0-9]+)?([eE][0-9]+)?\\b"); item.type = NUMBER; m_regexItems.push_back(item); // keywords QStringList keywords; keywords << "asm" << "auto" << "bool" << "break" << "case" << "catch" << "char" << "class" << "const" << "const_cast" << "continue" << "default" << "delete" << "do" << "double" << "dynamic_cast" << "else" << "enum" << "explicit" << "export" << "extern" << "false" << "float" << "for" << "friend" << "goto" << "if" << "inline" << "int" << "long" << "mutable" << "namespace" << "new" << "operator" << "private" << "protected" << "public" << "register" << "reinterpret_cast" << "return" << "short" << "signed" << "sizeof" << "static" << "static_cast" << "struct" << "switch" << "template" << "this" << "throw" << "true" << "try" << "typedef" << "typeid" << "typename" << "union" << "unsigned" << "using" << "virtual" << "void" << "volatile" << "wchar_t" << "while" // BK - Added Qt keywords << "slots" << "signals" << "SIGNAL" << "SLOT" << "connect" << "disconnect" << "emit" << "qobject_cast" << "forever" << "foreach" // Divius: Qt types from QtGlobal << "qint8" << "qint16" << "qint32" << "qint64" << "qlonglong" << "qulonglong" << "qreal" << "quint8" << "quint16" << "quint32" << "quint64" << "qptrdiff" << "quintptr" << "uchar" << "uint" << "ulong" << "ushort"; //functions and methods item.regex = QRegExp("\\b[a-zA-Z_][a-zA-Z0-9_]+\\s*(?=\\()"); item.type = FUNCTION; m_regexItems.push_back(item); //normal text item.regex = QRegExp("\\b[a-zA-Z_][a-zA-Z0-9_]+\\b"); item.type = TEXT; m_regexItems.push_back(item); m_keywords = QSet::fromList(keywords); // user keywords QStringList userKeywords; m_userKeywords = QSet::fromList(userKeywords); } // state enum { IN_MACRO = 0x01, IN_MULTILINE_COMMENT = 0x02, IN_SINGLELINE_COMMENT = 0x04, IN_STRING = 0x08, IN_SINGLE_STRING = 0x10 }; // bool CppHighlighter::handleState(QString const& text, int& startPos, int& endPos) { int prevState = previousBlockState(); startPos = 0; endPos = text.length(); if (prevState == -1) prevState = 0; if ((prevState & IN_STRING) || (prevState & IN_SINGLE_STRING)) { // this line is in a string, find for end of the string endPos = searchStringEnd(text, startPos, (prevState & IN_SINGLE_STRING)? '\'':'"'); if (endPos == -1) { // this is still in string setFormat(0, text.length(), formatFor(STRING)); setCurrentBlockState(IN_STRING); return true; } else { endPos += 1; // strlen("\""); setFormat(0, endPos - startPos, formatFor(STRING)); startPos = endPos; } } else if (prevState & IN_MULTILINE_COMMENT) { // this line is in a multiline comment, find for the end endPos = searchMultilineCommentEnd(text, startPos); if (endPos == -1) { // this is still in comment setFormat(0, text.length(), formatFor(MULTI_LINE_COMMENT)); // maybe previous line is in a macro... setCurrentBlockState(previousBlockState()); return true; } else { endPos += 2; // strlen("*/"); setFormat(0, endPos - startPos, formatFor(MULTI_LINE_COMMENT)); startPos = endPos; } } else if (prevState & IN_SINGLELINE_COMMENT) { setFormat(0, text.length(), formatFor(SINGLE_LINE_COMMENT)); if (text.endsWith("\\")) { setCurrentBlockState(IN_SINGLELINE_COMMENT); } return true; } else if (prevState & IN_MACRO) { setFormat(0, text.length(), formatFor(MACRO)); if (text.endsWith("\\")) { setCurrentBlockState(IN_MACRO); } // we can't just return... // consider the following code: // #define a /* // multiline comment // */ something } return false; } // void CppHighlighter::highlightBlock(QString const& text) { int startPos; int endPos; setCurrentBlockState(0); // 1. handle state specific highlighting if (handleState(text, startPos, endPos)) return; endPos = startPos; // backup startPos // 2. Highlight macro if (handlePreprocessor(text)) { // 3. Highlight keywords doRegexMatch(text, startPos); } // 4. Highlight strings, comments... // a. search for first occurrences of ", //, /* startPos = endPos; while (true) { startPos = text.indexOf(m_reSpecial, startPos); if (startPos == -1) break; QString cap = m_reSpecial.cap(); if (cap == "//") { setFormat(startPos, text.length() - startPos, formatFor(SINGLE_LINE_COMMENT)); if (text.endsWith("\\")) setCurrentBlockState(IN_SINGLELINE_COMMENT); return; } else if ((cap == "\"") || (cap == "'")) { endPos = searchStringEnd(text, startPos + 1, cap.at(0)); // handle unicode string if ((startPos > 0) && text.at(startPos - 1) == QChar('L')) --startPos; if (endPos == -1) { // this is a multiline string setFormat(startPos, text.length() - startPos, formatFor(STRING)); handleEscapeChar(text, startPos, text.length() - startPos); setCurrentBlockState(cap.at(0) == QChar('"')? IN_STRING: IN_SINGLE_STRING); return; } else { endPos += 1; setFormat(startPos, endPos - startPos, formatFor(STRING)); handleEscapeChar(text, startPos, endPos - startPos); startPos = endPos; } } else if (cap == "/*") { endPos = searchMultilineCommentEnd(text, startPos + 2); if (endPos == -1) { // this comment covers multi line setFormat(startPos, text.length() - startPos, formatFor(MULTI_LINE_COMMENT)); setCurrentBlockState(IN_MULTILINE_COMMENT); return; } else { endPos += 2; setFormat(startPos, endPos - startPos, formatFor(MULTI_LINE_COMMENT)); startPos = endPos; } } } } // // Return true if we still need to highlight keywords bool CppHighlighter::handlePreprocessor(QString const& text) { if (text.indexOf(m_reMultilineMacro) != -1) { setFormat(0, text.length(), formatFor(MACRO)); // FIXME: This can't handle the following code: // #define some this is /* // blabla... */ a macro definition... // if (text.endsWith("\\")) setCurrentBlockState(IN_MACRO); } else if (text.indexOf(m_reInclude) != -1) { // TODO: we can highlight it in a different format setFormat(0, text.length(), formatFor(MACRO)); int pos = m_reInclude.pos(1); if (pos > 0) { QString cap = m_reInclude.cap(1); setFormat(pos, cap.length(), formatFor(STRING)); } } else if (text.indexOf(m_reMacro) != -1) { setFormat(0, text.length(), formatFor(MACRO)); return false; } return true; } // int CppHighlighter::searchStringEnd(QString const& text, int startPos, QChar strChar) { for (int pos = startPos; pos < text.length(); pos++) { if (text.at(pos) == QChar('\\')) ++pos; else if (text.at(pos) == strChar) return pos; } return -1; } // int CppHighlighter::searchMultilineCommentEnd(QString const& text, int startPos) { return text.indexOf("*/", startPos); } // void CppHighlighter::handleEscapeChar(QString const& text, int start, int len) { for (int pos = start; pos < start + len; pos++) { if (text.at(pos) == QChar('\\')) { int endPos = pos; for (int i = 1; i <= 3; i++) { if ((pos + i < text.length()) && (text.at(pos + i) >= QChar('0')) && (text.at(pos + i) <= QChar('7')) ) endPos = pos + i; else break; } if (endPos == pos) { endPos = pos + 1; if ((endPos < start + len) && (text.at(endPos).toLower() == QChar('x'))) { while (++endPos < start + len) { QChar c = text.at(endPos).toLower(); if (c.isNumber() || ((c >= QChar('a')) && (c <= QChar('f')))) continue; else break; } --endPos; } } setFormat(pos, endPos - pos + 1, formatFor(ESCAPE_CHAR)); pos = endPos; } } } qdevelop-v0.28/src/logbuild.cpp0000644000175000017500000001102411362261066015521 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "logbuild.h" #include "mainimpl.h" #include #include // LogBuild::LogBuild( QWidget * parent ) : QTextEdit(parent) {} // void LogBuild::mouseDoubleClickEvent( QMouseEvent * /*event*/ ) { // First highlight the line double-clicked QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); setTextCursor( cursor ); // BlockLogBuild *blockUserData = (BlockLogBuild*)cursor.block().userData(); // If blockUserData is null, the line doesn't contains "error" or "warning", we quit this function. if ( !blockUserData ) return; QString projectDirectory = blockUserData->directory(); QString text = cursor.block().text(); QString filename; uint numLine; if ( !containsError(text, filename, numLine) && !containsWarning(text, filename, numLine) ) return; if ( numLine == 0 ) return; QString absoluteName = QDir(projectDirectory).absoluteFilePath(filename); m_mainImpl->openFile( QStringList( absoluteName ), numLine); } // void LogBuild::slotMessagesBuild(QString list, QString directory) { foreach(QString message, list.split("\n")) { if ( !message.isEmpty() ) { message.remove( "\r" ); setTextColor( Qt::black ); QString fileName; uint line; if ( containsError(message,fileName,line) ) { setTextColor( Qt::red ); m_mainImpl->resetProjectsDirectoriesList(); m_mainImpl->resetDebugAfterBuild(); emit incErrors(); } else if ( containsWarning(message,fileName,line) ) { setTextColor( Qt::blue ); emit incWarnings(); } append( message ); if ( !directory.isEmpty() ) { QTextCursor cursor = textCursor(); BlockLogBuild *blockUserData = new BlockLogBuild(directory); cursor.block().setUserData( blockUserData ); setTextCursor( cursor ); } } } // Move the cursor to the bottom. Ensure it is visible. QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); setTextCursor( cursor ); } // #define ERR_EXP "^(.+):\\s*(\\d+)\\s*:\\s*(error|%1|undefined reference to|%2)" #define WARN_EXP "^(.+):\\s*(\\d+)\\s*:\\s*(warning|%1)" /* If your language is not translated in QDevelop and if g++ display the errors and warnings in your language, modify the two strings below "error" and "warning" to adapt in your language. Also have a look at editor.cpp*/ bool LogBuild::containsError(QString message, QString & file, uint & line) { QRegExp exp( QString(ERR_EXP).arg(tr("error", "Compiler message").toLower()).arg(tr("undefined reference to", "Linker message").toLower()) ); bool result = !message.startsWith("make") && !message.contains("------") && exp.indexIn(message) > -1; if (result) { Q_ASSERT(exp.capturedTexts().size() > 3); file = exp.cap(1); line = exp.cap(2).toUInt(); } return result; } bool LogBuild::containsWarning(QString message, QString & file, uint & line) { QRegExp exp( QString(WARN_EXP).arg(tr("warning", "Compiler message").toLower()) ); bool result = !message.startsWith("make") && !message.contains("------") && exp.indexIn(message) > -1; if (result) { Q_ASSERT(exp.capturedTexts().size() > 3); file = exp.cap(1); line = exp.cap(2).toUInt(); } return result; } // qdevelop-v0.28/src/misc.h0000644000175000017500000000252611362261066014327 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DIVERS_H #define DIVERS_H #include #include #include QVariant addressToVariant(void *it ); QTreeWidgetItem *variantToItem( QVariant variant ); QAction *variantToAction( QVariant variant ); bool connectDB(QString const& dbName); QString getQDevelopPath(void); #ifdef Q_OS_UNIX #define SETTINGS_FILE_NAME ".qdevelop" #else #define SETTINGS_FILE_NAME "qdevelop-settings.db" #endif #endif qdevelop-v0.28/.svn/dir-prop-base0000444000175000017500000000013111362261070015666 0ustar jlbrdjlbrdK 10 svn:ignore V 63 Makefile bin build object_script.QDevelop qdevelop-settings.db END qdevelop-v0.28/.svn/all-wcprops0000444000175000017500000000176511362261070015503 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 28 /svn/!svn/ver/467/tags/v0.28 END QDevelop.rc K 25 svn:wc:ra_dav:version-url V 40 /svn/!svn/ver/465/tags/v0.28/QDevelop.rc END ChangeLog.txt K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/ChangeLog.txt END qdevelop.desktop K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/qdevelop.desktop END qdevelop.spec K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/qdevelop.spec END copying K 25 svn:wc:ra_dav:version-url V 36 /svn/!svn/ver/465/tags/v0.28/copying END README.txt K 25 svn:wc:ra_dav:version-url V 39 /svn/!svn/ver/465/tags/v0.28/README.txt END README.cmake K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/465/tags/v0.28/README.cmake END Setup.iss K 25 svn:wc:ra_dav:version-url V 38 /svn/!svn/ver/467/tags/v0.28/Setup.iss END CMakeLists.txt K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/CMakeLists.txt END QDevelop.pro K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/465/tags/v0.28/QDevelop.pro END qdevelop-v0.28/.svn/entries0000444000175000017500000000340411362261070014701 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28 http://qdevelop.googlecode.com/svn 2010-04-14T10:43:21.472790Z 467 jlbiord has-props 31becf8c-a71e-0410-8e62-47ffcaada4dd plugins dir QDevelop.rc file 2010-04-17T07:24:40.658878Z 5434cdc90224947eb17d0c27019be3bb 2006-10-07T15:56:50.310896Z 5 jlbiord 77 ChangeLog.txt file 2010-04-17T07:24:40.658878Z fc7ee8e17b3d6aca2f6dcdfa053c71c5 2010-03-20T08:50:41.072009Z 462 jlbiord 19864 src dir qdevelop.desktop file 2010-04-17T07:24:40.658878Z 71fd0d0193bbf9eb52979e681ddf0779 2009-03-01T17:24:41.271259Z 426 ralfjung-e@gmx.de 411 qdevelop.spec file 2010-04-17T07:24:40.658878Z da836873b2a0eac5058aa24f55aafb5c 2007-12-08T17:40:50.876890Z 286 diegoiast@gmail.com 1662 copying file 2010-04-17T07:24:40.662880Z 94d55d512a9ba36caa9b7df079bae19f 2006-10-07T15:56:50.310896Z 5 jlbiord 17992 resources dir README.txt file 2010-04-17T07:24:40.662880Z 24faba098515b0a27eab647665bea354 2010-03-20T08:34:55.152743Z 461 jlbiord 2786 README.cmake file 2010-04-17T07:24:40.662880Z 3edb7d17cf57969acfc611d3e3ab7201 2007-12-08T17:40:50.876890Z 286 diegoiast@gmail.com has-props 1334 ui dir Setup.iss file 2010-04-17T07:24:40.662880Z b7d4b12250cf44b2de7d2dd39afc10ac 2010-04-14T10:43:21.472790Z 467 jlbiord 2377 CMakeLists.txt file 2010-04-17T07:24:40.666878Z 2b15c2b6362ef13662a0b10cdca51d39 2009-03-28T15:48:38.168066Z 442 Lord.Divius 7415 QDevelop.pro file 2010-04-17T07:24:40.666878Z db2cd0dc256408c3595a12398ee86f81 2009-03-07T08:30:27.038220Z 436 jlbiord 3806 qdevelop-v0.28/ui/.svn/entries0000444000175000017500000001035411362261070015320 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/ui http://qdevelop.googlecode.com/svn 2010-03-20T09:00:41.240118Z 463 jlbiord 31becf8c-a71e-0410-8e62-47ffcaada4dd findfiles.ui file 2010-04-17T07:24:40.634881Z cc1bc52ffb7dd40fb3007e851cecf32d 2009-02-06T22:04:43.972883Z 377 Lord.Divius 7769 parameters.ui file 2010-04-17T07:24:40.630878Z d05e1415357ef8e0db47cb3c74fb83c1 2006-10-07T15:56:50.310896Z 5 jlbiord 7607 addsetget.ui file 2010-04-17T07:24:40.634881Z 4c7bef4d4aae734761525df0e943d7a2 2006-12-20T19:17:32.129910Z 97 jlbiord 5531 breakpointcondition.ui file 2010-04-17T07:24:40.634881Z a0038e1a7bf97ffd7c7fa00927b3adfa 2007-09-24T19:38:22.994334Z 230 jlbiord 2922 warning.ui file 2010-04-17T07:24:40.634881Z 1da83d91888f78d2abc4c6dcd70c1b53 2006-10-07T15:56:50.310896Z 5 jlbiord 5348 registers.ui file 2010-04-17T07:24:40.634881Z 5fea1de2b425babcd184ac76985180c8 2007-10-06T15:18:52.329759Z 250 jlbiord 1740 addexistant.ui file 2010-04-17T07:24:40.634881Z 426878a261c616de0f5db25997130884 2006-10-10T18:55:32.787667Z 8 jlbiord 6327 about.ui file 2010-04-17T07:24:40.638878Z 70d7b0bcab071648ad0308dd9e3cd5df 2010-03-20T09:00:41.240118Z 463 jlbiord 11890 subclassing.ui file 2010-04-17T07:24:40.638878Z 2a71e7e924ea7c8a74901cead1accc91 2006-12-04T14:04:10.194761Z 84 cucomania 6064 replacewidget.ui file 2010-04-17T07:24:40.638878Z d3f1ea68a3d56ebdff8fcde0bfb564aa 2009-02-02T12:40:18.116032Z 373 Lord.Divius 7020 gotoline.ui file 2010-04-17T07:24:40.638878Z e69274c402702856181a88109e9ef479 2006-10-07T15:56:50.310896Z 5 jlbiord 5181 newproject.ui file 2010-04-17T07:24:40.638878Z 05f2c599a22faa778b4b4dbeba1cf82c 2009-02-10T14:37:46.775571Z 387 Lord.Divius 19433 addscope.ui file 2010-04-17T07:24:40.642881Z ab33ac87cbf4a9bce360dae6d58303cc 2006-10-07T15:56:50.310896Z 5 jlbiord 7952 findwidget.ui file 2010-04-17T07:24:40.642881Z e65669e3829fc6528dceb39c53372c86 2006-10-07T15:56:50.310896Z 5 jlbiord 5146 main.ui file 2010-04-17T07:24:40.642881Z ff8e6924dd2d7c68e9b0b16291d0f413 2009-02-14T18:50:42.867530Z 394 Lord.Divius 51054 addnewclass.ui file 2010-04-17T07:24:40.642881Z dd4d029bb8a299021dd6ec03e8e1ae81 2009-02-08T11:20:06.154091Z 383 Lord.Divius 10821 addnewclassmethod.ui file 2010-04-17T07:24:40.642881Z 660973ac0ad1314592cfe981177ae61e 2007-12-27T16:31:12.766325Z 303 jlbiord 10015 options.ui file 2010-04-17T07:24:40.646880Z 3aea03ba91b1729123953db69dcad1b9 2009-02-11T18:22:47.745359Z 390 Lord.Divius 36215 exechoice.ui file 2010-04-17T07:24:40.646880Z d71ea8b18662d7929edf0bee55d74bbe 2006-10-07T15:56:50.310896Z 5 jlbiord 3483 shortcuts.ui file 2010-04-17T07:24:40.646880Z ef135a5bc018772f474e59be49a75dc2 2006-10-24T16:09:14.561798Z 40 jlbiord 2907 addnewclassvariable.ui file 2010-04-17T07:24:40.646880Z ab7e1c958f2aa11e983be201a34139b8 2007-12-27T16:31:12.766325Z 303 jlbiord 10951 newimplementation.ui file 2010-04-17T07:24:40.646880Z 6f19cd8ac140e991137a971df22a568a 2006-10-07T15:56:50.310896Z 5 jlbiord 5326 newvariable.ui file 2010-04-17T07:24:40.650879Z 978c4c06de673b0bb4da63665429a0c5 2007-08-08T16:21:39.565807Z 186 jlbiord 5821 projectpropertie.ui file 2010-04-17T07:24:40.650879Z 7457ab6619890eafd1122d3b2fc3745e 2009-01-30T15:22:22.932177Z 362 Lord.Divius 38484 toolsControl.ui file 2010-04-17T07:24:40.650879Z e3838b3868f6a7be9390d7c779277080 2007-07-20T12:18:32.699367Z 177 jlbiord 12177 openfile.ui file 2010-04-17T07:24:40.650879Z d98c538ab39fe5711ed87fc8fc65b782 2007-09-08T20:47:23.303645Z 215 jlbiord 2288 addnew.ui file 2010-04-17T07:24:40.650879Z 541cd7fe368eda483d5b2dd071619b56 2006-11-04T22:20:46.779477Z 55 cucomania 8560 qdevelop-v0.28/ui/.svn/all-wcprops0000444000175000017500000000536211362261070016115 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 31 /svn/!svn/ver/465/tags/v0.28/ui END findfiles.ui K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/ui/findfiles.ui END parameters.ui K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/ui/parameters.ui END addsetget.ui K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/ui/addsetget.ui END breakpointcondition.ui K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/ui/breakpointcondition.ui END warning.ui K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/ui/warning.ui END registers.ui K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/ui/registers.ui END addexistant.ui K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/ui/addexistant.ui END about.ui K 25 svn:wc:ra_dav:version-url V 40 /svn/!svn/ver/465/tags/v0.28/ui/about.ui END subclassing.ui K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/ui/subclassing.ui END replacewidget.ui K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/ui/replacewidget.ui END gotoline.ui K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/ui/gotoline.ui END newproject.ui K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/ui/newproject.ui END addscope.ui K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/ui/addscope.ui END findwidget.ui K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/ui/findwidget.ui END main.ui K 25 svn:wc:ra_dav:version-url V 39 /svn/!svn/ver/465/tags/v0.28/ui/main.ui END addnewclass.ui K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/ui/addnewclass.ui END addnewclassmethod.ui K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/ui/addnewclassmethod.ui END options.ui K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/ui/options.ui END exechoice.ui K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/ui/exechoice.ui END shortcuts.ui K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/ui/shortcuts.ui END addnewclassvariable.ui K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/ui/addnewclassvariable.ui END newimplementation.ui K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/ui/newimplementation.ui END newvariable.ui K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/ui/newvariable.ui END projectpropertie.ui K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/ui/projectpropertie.ui END toolsControl.ui K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/465/tags/v0.28/ui/toolsControl.ui END openfile.ui K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/ui/openfile.ui END addnew.ui K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/465/tags/v0.28/ui/addnew.ui END qdevelop-v0.28/resources/templates/impl.cpp.template0000644000175000017500000000020211362261070021703 0ustar jlbrdjlbrd#include $HEADERNAME // $CLASSNAME::$CLASSNAME( QWidget * parent, Qt::WFlags f) : $PARENTNAME(parent, f) { setupUi(this); } // qdevelop-v0.28/resources/templates/newclassimpl.cpp.template0000644000175000017500000000012611362261070023450 0ustar jlbrdjlbrd$HEADERNAME // $CLASSNAME::$CLASSNAME( $ARGUMENTS ) $ANCESTOR { // TODO } // $VIRTUALqdevelop-v0.28/resources/templates/dialog.ui0000644000175000017500000000176011362261070020234 0ustar jlbrdjlbrd Dialog 0 0 400 300 Dialog 9 9 382 244 Remove this widget and insert your own widgets 9 259 382 32 QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok qdevelop-v0.28/resources/templates/mainwindow.ui0000644000175000017500000000137511362261070021153 0ustar jlbrdjlbrd MainWindow 0 0 598 388 MainWindow 0 0 598 28 qdevelop-v0.28/resources/templates/impl.h.template0000644000175000017500000000037111362261070021357 0ustar jlbrdjlbrd#ifndef $IMPL_H #define $IMPL_H // #include <$PARENTNAME> #include $UIHEADERNAME // class $CLASSNAME : public $PARENTNAME, public Ui::$OBJECTNAME { Q_OBJECT public: $CLASSNAME( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: }; #endif qdevelop-v0.28/resources/templates/newclassimpl.h.template0000644000175000017500000000023411362261070023115 0ustar jlbrdjlbrd#ifndef $IMPL_H #define $IMPL_H // $ANCESTORFILENAME // class $CLASSNAME $SCOPE $PARENTNAME { Q_OBJECT public: $CLASSNAME($ARGUMENTS); $VIRTUAL }; #endif qdevelop-v0.28/resources/templates/widget.ui0000644000175000017500000000067211362261070020261 0ustar jlbrdjlbrd Form 0 0 400 300 Form qdevelop-v0.28/resources/templates/main.cpp.template0000644000175000017500000000036311362261070021676 0ustar jlbrdjlbrd#include #include $HEADERNAME // int main(int argc, char ** argv) { QApplication app( argc, argv ); $CLASSNAME win; win.show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec(); } qdevelop-v0.28/resources/images/CVprotected_var.png0000644000175000017500000000050111362261070021475 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը_IDATxc`0>R`^ (f?^f0& fdL!X5o)KY3Y0L30LtS*o>LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKMI64KM3I44K1103LNJ607674H25IENDB`qdevelop-v0.28/resources/images/filenew.png0000644000175000017500000000147111362261070020043 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  tIME79HwIDAT8˵[Hau77-܊Xx&\)HlE=ehJ *5P9άjudP'Ȍ {TJZ[ycdRB3&1z 4%4"޳~V%+T7O'fRf[hu[^34.%Kl¸%\SK+xgE{S!=p~/IENDB`qdevelop-v0.28/resources/images/cross.png0000644000175000017500000000156311362261070017545 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@1҅A3/3(\c@7 " 5?ay T Ph_?0m823" P N_W@4PYA qySQOC  3\_?~}gra T|Ca8  `b4###(LAd(p_?>l@ aπз1?Ёf. SA.QNj(@PX A   ;Wfk(`0@a r&` þ4f0@a5* ǰ_[KWB^290W:FȆ2|o3@1Ja 66EEpR<Ǝ=ď_30|33(?Ɗi8@1.Ca>ȥ C1/"`B"  \*h7נd1܆AleFP)EL⇆~e&#nhb8(S@?G_c /AYqo|Dv,ޟ]lef08%] d?-@fJS`K)  ԥ3 0&Py DWM@`.EyH 4IENDB`qdevelop-v0.28/resources/images/filesaveall.png0000644000175000017500000000174711362261070020707 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME 5/3SpLε7U#b4.-qm""YDPw ӵ^8w ΝK2y֞xXq sIk6$8^XX_gxG Djem"fa1"bT>0xN1" *j,j=UPJ'"Y)jz}6(RJ.a15(r"r#˝6V3RHbo)%5.;3xt00x^PcL1cl*AD#=jMIԦ$Y-~g")eT bEfe!\9h3fjeT3Ex)Q5O%ьɤb0(Q:ͺYU!_0NOWt)jT󺿛&e;,XWs"ج1tgJ坟VLcb4&^%?3){ŝnV!pf<39CL L"IEIENDB`qdevelop-v0.28/resources/images/supprimer.png0000644000175000017500000000035511362261070020440 0ustar jlbrdjlbrdPNG  IHDRagAMAܲIDATx+@ g<W8Cot6Agpd^`e1F,G 2RrܯMuzhڕe%)DU\&p2H_:M}?$i_ CX0TfV?tO|1:B/rIENDB`qdevelop-v0.28/resources/images/nogood.png0000644000175000017500000000156311362261070017701 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@1҅A3/3(\c@7 " 5?ay T Ph_?0m823" P N_W@4PYA qySQOC  3\_?~}gra T|Ca8  `b4###(LAd(p_?>l@ aπз1?Ёf. SA.QNj(@PX A   ;Wfk(`0@a r&` þ4f0@a5* ǰ_[KWB^290W:FȆ2|o3@1Ja 66EEpR<Ǝ=ď_30|33(?Ɗi8@1.Ca>ȥ C1/"`B"  \*h7נd1܆AleFP)EL⇆~e&#nhb8(S@?G_c /AYqo|Dv,ޟ]lef08%] d?-@fJS`K)  ԥ3 0&Py DWM@`.EyH 4IENDB`qdevelop-v0.28/resources/images/cpp.png0000644000175000017500000000163511362261070017176 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 c($~a`a`X9C~o@ Ti?ÖaY @p>}``= [h+@`V; @!t_"fX?  >Pc`X r!΀̀p X qˑ0?oLpD ad߿Q /] cb`10q _z UTT);Ã|0ݻwQŅ'B >defde _fKJJ2Ɂ}n@  `"2ٳg|򕁍 Çp6;;; @( >H~[,""Hzo@D  r$“ 222p˃ ?*%%6=r0())]; p$a"ZA4,9"d3H#ȥ r,@|o]>, @a!`#2ܹsf(+>}`$> =H h Lb"G6(`>V f@ X1Ò(^fϞ 2T(ϊĂ~H'˗ Ur# J궭[ 2_`P 69xb<IENDB`qdevelop-v0.28/resources/images/dbgstepout.png0000644000175000017500000000031411362261070020565 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxA W+h{ Bq#eA X8Fd9x.;:;:-,wĘH:*N $ܨey(Lqp` TWc ) 3٣Qn՟ר"-8IENDB`qdevelop-v0.28/resources/images/CVprotected_signal.png0000644000175000017500000000054011362261070022165 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը~IDATxc`0>R`^ 1kV͠pgwbY3>0 3c8nњ t"?H+t. yx:@]8LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex354OI42554I5H4N1I4N4O233L12034 ;4IENDB`qdevelop-v0.28/resources/images/CVpublic_var.png0000644000175000017500000000044511362261070020771 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըCIDATxc`Cb4r1kV=%=0g0FL L$" r4S-oH!LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex34JN430ILH24N51L5726JK3J3400s`RmIENDB`qdevelop-v0.28/resources/images/CVprivate_var.png0000644000175000017500000000047211362261070021165 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըXIDATxc`0>U5byɐa(5[195#cb xLYȚ2a)6@Df*ՖQX LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex344I2I443453H2JL27N24OI06J4>jIENDB`qdevelop-v0.28/resources/images/wrap.png0000644000175000017500000000076411362261070017367 0ustar jlbrdjlbrdPNG  IHDR r| pHYs  tIME  + bKGDIDAT(ύ=KQǥXڐYC(.QZOo؋YӋ:Q)jE3yy8G4<;=w5)8Ϛoh@EyUхRe(ƽ;\xPN W]͡jK*Y̠Œ ctpq|Rb&n1{c]X0u\x@n niaZF0< g1>!b&6MyHr~4 wLaj)6RdK #~ ;GkɆ0Ӫ$ w7m[pIo{gM뗴N!kko5(8z|GhEIENDB`qdevelop-v0.28/resources/images/ajouter.png0000644000175000017500000000076611362261070020071 0ustar jlbrdjlbrdPNG  IHDRa pHYs  gAMA|Q cHRMz%u0`:o_FlIDATxڤj[A={,2 2`Ti JGH6&&Rƕ* 64jct9P DQ|?fUEDT;ի{m=QUJhfȗϟF1W p˕յu\}qW (tW z2pkJsz;7j*hW0?ݍo%,>V.xq;:0up_Ϫ줡UU.^ "EQ|AlPO/+sbaf0$x=Ξ}Dߏuxba2,7nD+)ft^4b8H@[Yl/4.^@KOC߇qO4i{mƿ>D\Q`4Yj"DAy.Ksˏdd/B.\vۃG V֬]K(-O>F?o0x*×n2v~l9X{~Y&iR:N߰K/"m'kЏy·:1M1o.Jrj;vp8J<0%Lb@~ !4u6m LgVr4Tj@R*%3x9Lf8 KD)H)vŤFQV!N8x5܀kQA6nwS&QIENDB`qdevelop-v0.28/resources/images/buildstop.png0000644000175000017500000000247011362261070020417 0ustar jlbrdjlbrdPNG  IHDR\tIME (Q;t pHYsN N }gAMA aIDATxڥUklUfvvvݥJ+hQ 0B4"D FDilP& (iQ`QBKnϝM 5_͝s{߹4|oБ~\<+ïWB1v C\m#C"{:/>zeqzmG6c|Eu1<"uv&H!˜CYi,xA^+m ىHy0f0B컫JqoX zض HK'+/J Jč=PNP i" v|9ߘ57._щ}*ங@a㣍CS@6O!a(ຂ$Ic5QwC g]0⵵ vs!#SG>]@X##UUweGWOB#.9cvӊziR8\gKeȚgrdqL!SBZ#N3BMe0Kor#[[ f#ގ %<@a-Ktlm54j?>|ebH?#1JdσGVT Ȝ֓s!.#a\![Z-Z6X:#vO x5 \\0;cGvlǗɗ1}( BVTy?~Kpl|^|{{7RUuZǂ]RFh? =Gv^o7«#Ef[ԒRa.v}ϕ;6ǟ>E4CVW*!j >H-޺m,IxpKn=&:L+TT擐˸f@HyynnebARIENDB`qdevelop-v0.28/resources/images/bookmarkprevious.png0000644000175000017500000000207311362261070022013 0ustar jlbrdjlbrdPNG  IHDR\tIME ;&ꝣ5 pHYsN N }gAMA aIDATxڍUmL[e>M+j6Fb3*fź-J9Y$? 15ı,Q.٪&dSÀ1Yl*~JaI[V.] $y{%Vz-lQ$1^A2*)(:3O!ϸe+R)jB/Xx/YgxWx491 d(`*Y%Ѓw)P~ 7̃+ɝStu#U|^nN\vmsx&I|-mvRO12z aٜ☶?e/#J+k"OL >$=\'e2A(vxJ6y{כ/iwZ.fsHOY բ3 @@R fӲԐ' ;e}Q=!{@Ypym( L=)u@٭-t:4F? x \Z-!C ˶monn"L~*(y7ڪOT^ :p'N(u'gZIeYdY15\,}'k+ፕ_[['D͘jB "?|@ /]7]$&TS]LLOqG$1!1B(+__̯},_#uY f€.ޘ0+5 pjd gdž޽o^#;C^LJ ݻ777g|O2myrrݯQL$ք9٭ ðZ 쥘Vy\-ew"ĀU6!`0DP[ C ΠGwx^9>EFV` }amՇ"R-6?jF44k˝nZ8_.98ƀϲ,J*|^x*B@Qc?|S*0'ۗi7%f*#YKfjn.^o+KϷnR̉sN; CIO6D{E.a#@g={m&5M* .@뺞z65]98?{Jsqyyٵ=J{c0,aX? gwA\)Cadd$B~d'[* ZA*z &1#9~W`?KKKd1YKA%?Pvu9D 37!?9l1ye(6,IΏZW?CjPIENDB`qdevelop-v0.28/resources/images/filesave.png0000644000175000017500000000146511362261070020213 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME/IDATxՔ=Eٝ5w>2?1"uEbH@ A!sB2ddɾw3U3;k;vK O[6?Q]OT3zBvĤd)f,jnq9wb7>_ẞʵKPq>~ &p]>}޺_ᔔ. հryzm/#&a{U _•O1)8w*,1z·x_dҳu/,,?,͔b4:Jq;x͌t!bfۈ{+;e2}Ƚ1bH4˖:p|!Ka}޽{=sbY*o"b@ɤMӚ.kpϽuE/r2 LÀ4@ x}icOm7oZ3q9 1b9?OwGҘ)h8@XݧfZWDVtDdF6]B)3N?ށLbCDd8X8V鴵 #FbqY$ J+mם ߵ=i߽.F#";tЉS/=rKE* u9k\63ǍHkK6%"`AZ N~יIy5<,l7 2nTy3~LDRO!A.!ǜ}3'6ڇeq DR `σXVے8E+{GԇN~ٴ‡ĥgF.χ\k9&^O;u0%4 QYme^y@D:k,?]kcڼ/itnt?c˖/](Tf""3OrIX>T`D~\s¨i}\f:+Y (VCJ>n orSWo^LIv`m0$ Ǩ#Iyqye Yc˚~R~@/Br-x6`UED- w_p'nPJ0!H99D >7uN%RP*+-) 1W/E9%xϕ7w>!DU9@D..qM3&Q1!* )m(N~J*#u":jxLB֪pk zܟJQ_is >zB|_d'[̉[ nʗ &{ 6nNj{&&&`ZEu333p:pf,m CsDKK FZXqt 9ݸ} UQBHH(_ף bl͑n(1iF\L g^^^q9d\ ˤjF 58UhT.LMMB.7 $&& -[f1RBixt\O7&rvt钐F ѣP]))HHHD~~>Y ?r콽mM|@"ya~(mmk޽G](S.\8̕+Wno'G=<&l٢vСڵ*;w(ǎ]Sl9@~xȞ,v iEƟC+ŷLm;v码j>7%Ł{~·&}2IENDB`qdevelop-v0.28/resources/images/CVpackage_var.png0000644000175000017500000000044711362261070021110 0ustar jlbrdjlbrdPNG  IHDRagAMA abKGD pHYs  d_tIME #tIDATxՒ!@EpXDq=J$HD- GhȊ dv-o6{όT8i@T9/4d+T(F͒nz<W k©tK L=PtF_bF5hX+ v2 #IENDB`qdevelop-v0.28/resources/images/CVtypedef.png0000644000175000017500000000043711362261070020304 0ustar jlbrdjlbrdPNG  IHDR7bKGD̿ pHYs  tIME  3^0IDATxڅѽ @ PVAL@OA dT4iQDACV8HG(uH  %05ڨIENDB`qdevelop-v0.28/resources/images/view_tree.png0000644000175000017500000000056511362261070020406 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGDC pHYs  d_tIME  IDATxAK@1!OzqߐoBe&z F-;{فf;vPK`i]5N'EQFUqaY,in ?E`tk] 03 MDmH ) =N?W\^WIENDB`qdevelop-v0.28/resources/images/dbgstep.png0000644000175000017500000000026611362261070020043 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըkIDATxc`jR4 YJJˉr1@q!H r}C1C7$ J<ɍT@3 RՑV:FSQޥ(0;2) (IENDB`qdevelop-v0.28/resources/images/good.png0000644000175000017500000000140111362261070017333 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@11  FFFƷA! 2s!CMϠ4h ffGbd,!Dg ddJ./ | 3Lf0 I@0``萠"4oC %2x#33~< ez_X3#ԃʍ+ n^:t#C&Rb`b``]e@{64[3gg/xD zy:!$I41gev`RgbsM?0?0dF9 #P ?~_Pǐ`b?6_u -`af@>s B@DB ..z>C+ bv$+@Q \/~;-á*o 0&N g eg``\h((O!.phx#Aa: P `RF/8r@^g`x 4i0 ?`H30|@AI7Ln.eK tc4J# #&Y @43 䭛pEIENDB`qdevelop-v0.28/resources/images/qdevelop.icns0000644000175000017500000017405011362261070020405 0ustar jlbrdjlbrdicns(ics#H????is32҂dg cX |UcϿ̺q.ϾéPmr/˾Z̼ǁǯЮ͈k汮tBnê1Xá~,ʑ" ZÌE Et"Uw{g1dq XX |dlaH=?UcJم<fs.Dl \WmUi闼+,m/IoleMfMk? 9~M I^oShq|4: O6L}Bk+GՔ?::_g%1+0ng ,w?UPNHRY-x" ZQJE E~{"Uq:dq XX |godMBCUcNڈ@is.Ho^WmYl隿/ 0m/MrphR cPnC=QMb!"tWkq}8>T;P}Bk/LחC?:_h#,'2oc,y4A?=8@C({" ZNHE E{"Uq:s8mkSuuS--TRururSQ-,QrrQICN#????????????il32 )mm k}po­{w{λc|˭Ľ}W|⴫IJpL{ݬ]Eoެݭ{LHೳ殹鿡bCuĬֺ¿ΧrN?ҮȷȵgC­ծOv˵űҶb1ȯ¥گ~KĮȳ̿٘Qɽó̴ިZzƱᷝ_pǽԢ_eųڟfQk祪|DZ}唫jNg~Β[QUsđљmULmҲZHVɭǵ̼ľa:Il¯»ƺƬ߸kUUзúĮܴlPZǴФiPZ}ʼɵ_U6nýgT: UguqaTBD[\__VWGm}~~}m kzpo~Ƚêyw{ߥa4%##'6\§}cy00pk][SA1zWyPs^g`_Y$ CmL{/$mվcYM" '[Eo/.wK&$|JHO$qeY0{bCuבiuUGONvL?2Azrhz5ఄ !{f@ʗktngfG+jLv[,unke_şԈNV/ I`14EskhfQ 'r[|F7 ,|K"Tnhd`'WѼ'NXkccB ZɴaGvsZxUfa[  \T _m!Lc_D;&k& Zkɢ\e/6b\($H E .؎]QiKC>R7u? XxDWh&)X. hLfw' p4rS *֖YGRvXp6  kUJk8 .=3EC' O85Rŋ CِXHU'ppl0zGP=C^PHON &Ů`:Ij'XBTf@ijXcp[s`h%hUO|̸D2\A!a@jPW.  :ǥgPZ{ȎQ+(I\LHlñfT: Uero_QBD[\_ZVWGm}~~}m kzpo~ɾêyw{ߦe8)((+:_§}cy44sn`^WE$6zWyTvajcb](FmL{4)pֿf]Q&+[Eo43yN+(|JHR)tg\4{bCuהlxXKRQuL?7E}uk}9ⳇ&|f@ʙnwqjiL0lLv^0xqnhbǢ֋R[3M`18IunkiU+t_J;1|K'Wrkhc+Z,$!N$[nggF^͹eK{wZx#Yjd^%`X «_m&PfbH;+o*_n" ɢ\e3:e_,)L I3؎]QiNGB#W*Ʈ`:Ij,B6CM5PQELTGWJ_O*hUO|̺G*F6! IEjPWӃ28ȥgPZ{ɐT/,L\LHlòfT: Uero_QBD[\_ZVWGl8mk?[hh[?ll~<;\Z\Z<;}lj?=[Xhfhe[X?<kj~| ;9ZYZY;9}| jj=XffX=ich#H????????????ih32[ }zyyz}|̙|ſ~~ ׀ ¸~vǾ¹txòžsi!{俫þtZ#|έoÜ%}ィŹdL춨öUN쵩ضqHZ氠~_Dɨ㢮ʊ|oNH٭ʽкtaBo޺ȺɸӠxqPFά±Һ#}dCջڧ)zJLΰջDz)`GĬ⩶ȳ*yJ˼ã߬Ĕ*OKɷɻӗä+Ҩ_gǴ­ݹjJzòǴƾwOwȾ*ƶװɀUwƲ(ɃZkǾƀYk}Ŵ՛wZp֏r|q_ŷէf_X}%ۘؖcSg#ЉÁ_dSt|"hbLgrЏ\OWowΜÏrYKhx!ϩ֑̏]wKWzȽΧԡkWImдӽϩѽ̭W'ZQٮ̦ʿĪ[]%PbƵøŸҵеʺÓbY$PrѽƻҶgUV{ʱİ ̫߷gS Z{Į ͫaUbrƵ ϶{XV ikŻ ƶfUXmhpújVUhkvu_UUwfcgiqsz|zukg\ZWX ivXYZWYUoO }zyyw}{~z̙|~{{}ȿ}v~ěsVE??DSnpx~ْJ  Dƻpi!y/ )FwjeigaYM6 *vqZ#{> Lcmdhcca`_O 4mQ%y 7tYgq^^[Y[;haK~r RW[YT0RSKr dypRN8! LoGUi{ޥvS|\C}cz[RT clLE> P|rSdcH٤J#rs_Ao 2yvtsV`6FznND0dytro`n# pɒ *u}a@։ 6ytqoj{ܨ`+_S *TxILH \wqolhن{\ /{R+-^Eɳ prolkhbbqϾִĺt*wIˏ 9uomkifd],Ml6u'* wMKk Lsmkhfcd=42sR*, XҤ]g}Q YokifcbQ`Ĺd @׵gJzA^migda_(+ οbme"-uOw<_kfdaaF*q˸Q !D(~Uq;]hca^\$)\G .(ǀWh>Yea_^G  ~V,}YgzK Pc_][+9xv  jj ?tZn_ >b\[N c< ]ovq]y!Z]\3] LU d_Vz(F?% UwA@s*ؒaQe6$AD1z2~[_Rq\$ o]  {e]Jeqx#WTЌ[MUlzS'l<  poYIfw* P֍ &ˌZwNUws)PO@/mJV &G%{4v jWHj`,K H'.+!,,zA&*8 n}V'ZOU Z|mrra{seuuQzva  U辉YX%P`Xh]:e:0j_/ejkuATpaS VÐaV$Nom2tgEA.:%<&,22 meUUyؙ*E` z%޵eS Zxp   $kϨ_Q_ov4   -i϶xWVihϩ{S:(##&5LnȶeRXmfnŻhUSoehss]TUwfadenpwywrieZYUX ivXYWWVUoO }zyyw}{~z̙|~{{}ȿ}v~ƝvZICCHWqpx~ڔN#  "Hƻpi!y3-Jzmilje]R:/yqZ#{BOfpfkfgecbR"8mQ%y;w\jtaa^]_?kaK~uUZ^]X4USKt#g|sUR<%OoGU#l}ߦw#V|\C}f|^UW dlLECTuVggLڦN'rs_Ao6|ywuYd;IznND5g|wurdq't̕*!v}a@֌:|wtrm~ݪb.bW*WxILL_ztrpkۉ~`3W+1^Eɳ$%surpnkedtضȿ"y*wIˑ=xrpnliga0Qn9xĴ+*yMKoPupnkiggA96vU.,\Ҥ]g}U]rnliffUcȾhD׵gJzEapljgec-+ügqi&1uOw@cnigedJ*uνT$%H,~Uq@akgeb_))`J 3,ǀWhC\idbbKY1}YgzOTgb`_/>|zomDtZnbBf_^R g@ `ovq]{&]``8aPZd_Vz!-KC%Y{FDx.ؒaQe:$EH4~6~[_Rq_$ sa}e]Jeqx'"[X Ќ[MUlzU-oBsoYIfw.Uّ$*ˌZwNUwt&??5*R,('*9PqȶeRXmfnŻhUSoehss]TUwfadenpwywrieZYUX ivXYWWVUoOh8mk -ESZZSE,5xݳw4dc fe53gfge53 fcda52xv,*EASPZWZWSPEA,)wu31caec31fded31dbb`2vݱu1)BPWWPB)it32?U3*$8fuu uuf߶*3 ?Ԁ4*Hf4{vssrsw{64uf?ffPtux{}}{yvv&8?U!?UfUu]䫁uy~}yuu3??#?fuwx}$|xwUU? zxȄ}vyuڿ!???u}сӀ(¾zuQfڿU?!3vv؂#¿|vuǪ*.f]xւ!|u??Uʕv рҀр{rU?:?UWw}ЀxoÚ?'UuɁz&|ptHU#mfu¼"rg{U @xȸ ¿vhq#U8uwz~wiaO$8u޽yhZU?fwwŃ̀ˀʁziY_?f#y̯ˀʁɀƼ{hWkd???fɏ{ⶭȀˀʁɀȀĵxeT_?fɋ|ͫЀ ȁʁɀȀǀĵvbQYf#|̀ ʁɀȀǀŀðr^NWd翎8n{ᯬʁɀȀǀŀûnZK^Hᅩ?8z֪ǀȀǀŀĀhUGl*U??$uwͧǀŀĂÎxbQCffmwuɨѡāĂr\L@(3鿈?f<{ƨр屼ŀā~jWHA?8ǨсĀubQDJ=$uz˧с'ܦ~o[K?zf3UUvҦс%ۜ»wfUF;hWۨсЀ!zn_OBB係?$|歮рπ!۶}uhWI=}f?fxﶃр%ۛz~xobQC:H濁]ƫр&ӏz|ysiZJ>M3yتр&󑗥Ŀ}'}{wunbSE:C?_糯р'Ó¿򿚠'~{wuri\M?E0szŭрЀɀŶ¨%zvusndTE:??U٭рЁɀ²欥#|wutqk]L?Cf׿3z廰рЁɀǼ՚#yvvtpeUE:TѮрЁôƀŴ荜!xwvtl^L?Jf3ffxั΀Ёߡㄖ |zzxrgUD9buϱЁ΀ƿǽʀ~|xm^K>g?߱|ܹЁ΂藃}ufRC:[3ހ |ϲЁ΂̀&ϧȰ{p\I3f~˽΂́ˀ2|}߫ʽϦͨȶpVB8$U*ɹπ΁́ˀ2ƽz}ʹВǷ·|^Gdûˀ΁́ˀʀ/Ļ|}ϸfMJfmz΂̀ˀʁ.ܠzշƸ ȿnSBzf{ǿ΂̀ˀʁDz&{Ե ȽxYEU8|ƽ΂̀ˀʁɀ#Ǧɲ ÷_If6žł̀ˀʁɀ"ʅӿڷ }ɼgMĿˁ̀ˀʁɀư!ͺ }lSùˀʁɀǸ ƵrWb_uý̀ˀʁɀ‰˹wZZuû̀ˀʁɀDzν}^U8zº̀ˀʁɀǾ4aRfsºˀʁɀƯ5ǬɩèdPfnºˀʁɀȀ5{ŪfOflºˀʁɀȀĮ6}}ڦūiQfjˀʁɀȀŹ6Ų|ᴌƬjRfhˀʁɀȀĮ­|㹋ŬjUfg~ʁɀȀŻձō}峆ëjXfui{ʁɀȀİzӲ~©i]8ukxʁɀȀǀƷ~ϱzhb8rrɀȀǀijҨԲzνgk|lɀȀǀҲǠy̻ezgɀȀǀķĬМ||ɷ|cmf `zȀǁî ̹͔{dzwamZsȀǁĻ ֵॄîs_Tkƀŀ ©͛пn\fOc|ƀŀ ƼΠ̻j[3uY]uƀŀô ⨚ȶ}ekƿuUmŀþɣ 񼘜İvaU?fJOcyÀХоp\amUH\p˸hZ 3HMThz6ĻųzcalM`q6~| Ҿr^ 8GWiw}5 ʸjZԀ BPapx}|.zð{cX*[JZisxz{+}ϼq]tUCSbosuvx*˔{}zƴhXrUCL[iprsu~+|zҽvaZfsETcmqqrv*z ǶkZc?M]ioqqs~*Ҽ}!ԾxbTUuQGVcmpqtw(ӹz{"ƵmZk?`@N^joqtwy$ѼzbTUǾUKGVenrtx|Ω}~$ŴmZ`f&@O^krv|~Դ|ȋ&κxaTD$UUcKFWfpw|Ƕy«NJiX`3M?N^mxľļ{Ыڜȵt_RpUUZUEUft޾ά޺ܴЬƩ~~λ}fVk׿ѿ?߸@L]n|؁ԀЀﲆЬ{׾n[R*U?U*DRexЁԈЬóu`TȿUHIZo郬άЂ&鬬°°ЬǷ}gWZ3fk@Pdy郬ڬЂ'¬ᄌﴬЬͺϥʉ̸lZPmU~EWl郬֬Ђ(иΰ̬ʬиάЬ䬬ëܬ󲇬Ϻq^S?صFKK^v񮂬ƬЁԲҀ 讲ҀЬ܀ ЬܬлvbT_1?ʫDQd~Ƃ쮬Ёﴲ̂Ь̂Ь άܬ ҽzeVU%ɿ3*EVmĶﺀLЀ)ƼƼЬ󴬾ެڅн}hYP?m?ش*H\tȺڶҲ ҮހҮڸྫྷЮμjYP??ίH8oMaz̰Ї˺k[Q}3ֿH_QfɱԺЅǸl[Pl3U_\XSjѹܴЄ¶l[Rc?ٺ?_ZVm׀ƮĶփϽ}k[Q_\??ػ]Xnӹƀǹ{iZQcd?۾?dgYn̲ϿwgYPi俖ۿ?}YlǯŻrcWOzzU㿘ۿ?HFXi~ůȼo^TNU㿚ۻ?fC\fyɳʿxi[SQ<̪㿜׺fUgctҽȿqcXP[$῞ ׽`]m~̻ſwi]SM'Կ?Ŵfeguـķ"½{naWPU??ηUaly؀Ľ Ŀ}pdZRN$?fxcnzЀӀ׀.¾~qf\TNcU߽ʸ3$D~ndnyЅр'{pe\TNZb? ?´RncktɅ(wmd[TNZ8?ٶ?Ѽ? u`gow'yqg_XSN`tU?ɺA3faahnv}wohaZUPQqԿU?G?ɹ̑{{^`diou{}vpjd_ZURQib_۶?CɽUf͇c\^bfimruxz}~}{yvrnjeb^ZWTQXvƒԙU U?U$ ^hXZ\]_abceddba_][YWURR`{SUf?ȼ%U?fwi`[VUSSRVX^fs ȣ_?ʿUm8f 88f?ԁ ?8fuuuufq??3f$f2ztqqprtz2+ufUUmfCrsvy{}~{yvts8*G?3*uW}rw|zvs~u̿U?"?ffuvv{$~yuu?"fwv}Ā'ztwu?%??sz΀(~xrEf??!su}ӀՀ*ysqǍ?U!Uff]u~܀Ԁπ!zs??*Ɠt}ЁЀЀ"¿xpm3?+?fWt{Ǹ{w,xzumqU?'U*uxƿ{W6'%Dnylq$#Hfs~sC#+^~pd{ !auf`J?UUs޼k)!/=KW]cfkjf_^YMA7(FvfXUUfnu翥h#(AYnponmmlkkjihgfedcba_O6?¾wfW~_?f#w̪s( 1Uosrklkjihgfedcba`_^^\CJ¾xeUgd???UfɎxᵌ8"(Lnutsrgijjihgfedcba`_^^]\[X.hucR\??UfɊyˢ^ 3`wvutsrq_dhihgfedcba`_^^]\[ZYX.-s_PWUf#y츎23izs rqk^eggfedcba`__^]\[ZYXXV!cp]KV\翎Ufnyn*'ayoqqppYbffedcba`__^]\[ZYXXWU?:kXI[??wաU,NxxlotvU_eedcba`__^]\[ZYXXWUTP"|fREi*?uu̘?-nx zS^ceu]^^]\[ZYXXWUTsu`NAf3UmrsǕ0FxxwR\gZ\\[ZZXXWUTFaoZJ=%迈?UUf8yĒ(_yxwwTXZYXWVTGW{hUF???|ƒ&&oyxw)vRXYYXWVTTH+Ss`OAF=?uyʕ(-syxw'vsLTXXWVP9  V|mZJ>xfUsј04wyxw&vusoGPUU@(^tdSD9e_P۟?9yyxw$vuttqvE?+mxl]L@AmU係?UzU5xyyw$vutsr~NJ[k)}{rfUG<}ff?ffun,wyyxww`JMPQ%{ul_OB9$U濁]~Ŏ,#syyxwwvJMRVY[\YU<zvpgXI=Lvס2,jyyxwwvONT[_`aa_\W 'Y{yurlaQC9C??_ ^,YyyxwwvuLS\accba`_]h%'t{xurphZJ=C0qxč/=yyxwwvutpNX`ccba``_]>h%5~wurplbRD8?tר81"uyxwwvutt\Q[adba``_S%1#\yurqoh[J=Bֿws2ayxwwvuttsodS\bcaa`_@#!{wtsqmcRC8QUТ' Nf Wyδ=9Ewvuttsqpponmlkkjݧ tWx~mWE:Rʢ$ξbNfln=kkjihgfedcba`_^^]<¾' joeNfjm?kjihgfedcba`_^^]X¹ 7ڣfOfhm>jihgfedcba`_^^]\:cƳ35hPffl;ihgfedcba`_^^]\Z/îa@gRfe|l9hgfedcba`_^^]\[@'β? 5ͿhWfufxq4gfedcba`_^^]\[Z nԳ̽gZ8uiuy,fedcba`__^]\[ZFx DвB&ʻg`8pp$edcba`__^]\[ZY& ;ϩ_,Գ:9ʺeizkdcba`__^]\[ZYOoʳY&ȘA XǷ}cwe} \ba`__^]\[ZYX3 WŬi/ь ijy`Hf _x! Ja`__^]\[ZZXV OͺJr ïu^HWp: 5`__^]\[ZZYX? 7նw"Ͽp]˪ߣSj] __^]\[ZZYXW" zê\#΍$̻lZmMbyx H^]\[ZZYXWIxϛB2ǷgY̪uW[s \\[ZZYXWV)s\iiijzbh?tSj~$2[ZZYXWVFHʤ cqҿs_ߪfGM`wK.VYXWVPʦ N?4̺m[_HGZnr/=B<4}¤z^R\rA9ƴfWHKRew4z̽yz,ֿxa^fkL]o{:* λp\߀ 8FVgt{~i*IO 9ŵhWʪ AN`mvzy|*O־x`VfZHXgquwx}G*z¨9 ̸m\qSBQ`lqrtvv*{4jV c~eUoUڽAJZgmpqr|4*M/ \N ιs^V3pCRaknoptk OıiXUc>L[flnoq|/ҽ "йv`S*UuNETakmoqukӺy "S±kXi]?L\gmoqt~7:"Ϲw`S*Ǿ׀ IDTblpruzvΦ ?$ojX_?f!?L\ipsy{LԵO ZU'˵u_SB̀ cHETcmuz}%Xȸy%T[)VռhW_J>K\ku{s&ZaN ::GaaG Y{|Oy~ۛ&[ñr]Qm*UKQCRdq|PN:{ނ [AG{ݰ-׉.Ǫ,)˶zdUhѿ?޸>J[ly3ʣ:&&׉-f{oT*  ӺlYQ?ʁ BQcuu&:G׉ۿt_Rǿ?UDGXm׃GTZ &::3::3TZ ׉L]6*C?`3_ó{dUY3h>Navo׃-':TA[aM:T-׉&сFҘpᕶuCȵjXOHU{CUia׃ (È:: {uÈ::׉Taװ&3˶o\Q??״FJI\t[Ag &a :&a:׉װ װa:,͸t`S]1U?ʪ?COa{[ah{-&{:&{׉׽ װa-,͸xcTR!ԪɿU'CTkc@@G)aTThG-ThGމ-M-׷3͹zfWNYdwρ-XźvfZQO7U㿜׺3Uc`qؠS1~ĺ~naVNZ࿞ ׽U3`[j|ΐN 0puf[RL'#?IJmfcesҠu>#)Wľzl`VOTfU??Ͷ_iwԀy[<(*!0Ii}ÿ{ncXPM?mfualxЀсӀ*Ŀ{odZSMbf߽$ɷUD{lblv΁̀znd[SMY_Ԁ!?UyPl`iq|Ăŀ'~tkaYSNY8Uٵ?л_ s]dku~wne^WQM_qfA?ȹf^^eksz|unf_XTOPq?G?ɸUmvz[^bgmsyztmhb]XTPOh`?۶?ɼfʄaY\`dhlosuxz|}~!}|zxvsplhda\XURPVtqf* \eWXZ[]^abccba`^]\YVUSQP]zN_*3U?ǻfuf_XUQPUV]dpģq_fU?ɾmm8f 88߿ڪf?ԁ ?8fuuuufq??3f$f2ztqqprtz2+ufUUmfCrsvy{}~{yvts8*G?3*uW}rw|zvs~u̿U?"?ffuvv{$~yuu?"fwv}Ā'ztwu?%??sz΀(~xrEf??!su}ӀՀ*ysqǍ?U!Uff]u~܀Ԁπ!zs??*Ɠt}7¿xpm3?[?fWt{ʺ~{z{{}umqU?'U*ux~[:!'*Hrylq$#Hfs~üwG!#/a~pd{ kXI[??w֣X,R{znrwwXbhhgffedcba`_^]]\\[YXS&|fREi*?uu͙C2q{}Vafhxa `_^]]\\[YXWWuu`NAf3UmrsȖ5J{{z#T_i]__^]]\\[YXWWJdoZJ=%迈?UUf8yŔ,!b|{zyVZ]\\[ZXWWK Z{hUF???|ǔ++r|{zyU[\[ZXWK0Vs`OAF=?uy˖,1w|{zy&vOV[\[ZT=% Y|mZJ>xfUsҙ48z|{zy%xvrISYYD,`tdSD9e_PۡC<{|{zy xwwtxHB0oxl]L@AmU係?UzX9{||zy#xwvuNj\l+}{rfUG<}ff?ffuq1z||{yybLORS){ul_OB9$U濁]~Ɛ"(v||{y$LOTY\^^\X?zvpgXI=Lvآ7m||{y$QPV^bcddc`['[{yurlaQC9C??_ a]||{zyyxNU_dfedc`k)'t{xurphZJ=C0qxŏA||{zyyxwrP[cfeddc`Bl%8~wurplbRD8?t٩<2'x|{zyyxww^T^dgfeddcV*5#^yurqoh[J=Bֿwv2e|{zyyxwwvrfU_efeedcD#&{wtsqmcRC8QUѤ,@|{zyyxwwvtsmdsT_ed]0!R|vutqj[K=Hf3fv޹k t{zyyxwwvtsrpjd^YR]cedS j! {zxwupdRC7bڪu}Χ'O{zyyxwwvtssrpnlhdYadH%ۮQ|{yuk[I;fzٺo"wzyyxwwvtssrqponmyx\:"L!~~zrdPA9[yά-6Qzyyxwwvtssrqpoonw(e{iSP6\ymZG:EUuԿ7 vyyxwwvtssrqpoonrѶ#*wdO>Nf WyϵB9Iyyxwwvtssrqpoonmߩv[y~mWE:uwwvussrqpoonnlkjjgb0ٔF QϪ?JeL=Ūf{ǽtE8wwvussrqpoonnmkjjifcܹn:^+Ʈ8 nTA6ŹFDTwvutsrqpoonnmkjjigge`dL(P޳/˾ z\Ecm Covutsrqpoonnmkjjiggfec^HlL)ѽŠ1@ťwɽdKIfHx&vutsrqpponnmkjjiggffed['&R^.׼ʽDûlQ@z_xÿy;utsrqpponnmkjjiggffedc,#B7H׺"úuVC*8zXNtsrqpponnmkjjiggffedc?"(Q͸ P~]Gf6|7^srqpponnmkjjiggffedcR kޫ'#ˋ]Soؼ ŸdLm nrqpponnmljjiggffedc`$ ɽjQsm¯ rqpponnmlkjihgffedcb;^ Hk°oT__u*qpponnmlkjihgffedcbT @HǵuXWqu2pponnmlkjihgffedcba+%2'078,1ʹz\R8v|9ponnmlkjihgffedcbaI35¼5#̻}_Pfou>onnmlkjihgffedcba^!4$Ĉ]D6BV̧(ξbNflqAnnmlkjihgffedcba`@+mteNfjpCnmlkjihgffedcba`\4Ž;ݧfOfhpBmlkjihgffedcba`_>fʸ79hPffo?lkjihgffedcba`_] 2dzeEgRfe|p=kjihgffedcba`_^D,зB9ͿhWfufxt8jihgffedcba`_^]$­sַ ̽gZ8uiu}1ihgffedcba`_^]I{IӶF+ʻg`8pp)hgffedcba`_^]]+ @Ѯb0ַ>=ʺeizkgffedcba`_^]]S#rͷ\*˜E[Ƿ}cwe} `fedcba`_^]]\7[ɲl4Ӑ#ijy`Hf _x& Nedcba`_^]]\Z SѾOvïu^HWp> :dcba`_^]]\\C ;׻|&Ͽp]˪ߣSj` !cba`_^]]\\[' }ǯ`(ё(̻lZmMbyz La`_^]]\\[M "}ҠG6ǷgY̪uW[s %__^]]\\[Z.wīamlijzbh?tSj~)7^]]\\[ZKLͪ #gvҿs_ߪfGM`wN3Y\\[ZT"̬ RD8̺m[_HGZnt4AF@!5Ʃ~cWavE=ƴfWHKRew5~}~è0ֿxa^fkL]o{>"+ λp\߀ 8FVgt{~k+MT =ŵhWʪ AN`mvzy|!,S־x`VfZHXgquwx}J*~ŭ= ̸m\qSBQ`lqrtvw*π!8o[f~eUoUڽAJZgmpqr|7*Q4#aSιs^V3pCRaknoptl) RıiXUc>L[flnoq|3"ѹv`S*UuNETakmoqum վ}#"W±kXi]?L\gmoqt~:Ŋ>&Ϲw`S*Ǿ׀ IDTblpruzw#Ѫ$D$rjX_?f!?L\ipsy{O  ׹S _Z,˵u_SB̀ cHETcmuz})\˻}#BF.ZռhW_J>K\ku{u$FK> 11:KK: "]SZdܡ*_ñr]Qm*UKQCRdq|Su>1\` F5:\~)d3ʯ0.˶zdUhѿ?޸>J[ly7u1md$$d1kuY- ӺlYQ?ʁ BQcu$W$h1d:mdۿt_Rǿ?UDGXm:`dBF $11-11-BF d=H.%74J-có{dUY3h>Navr)yd'1Bd5uFK>1Bd)d$_9nTlWGȵjXOHU{CUid qd(d11` \`Wd11`dqBK~$8˶o\Q??״FJI\t^5Od m$hK 1u$hK1d~ d~K11͸t`S]1U?ʪ?COa{]KOdd\)$\1hd$\d `~K)1θxcTR!ԪɿU'CTkfy55:d)KBBO:)BO:d`)>)y7͹zfWNdF˸|hXO?ί?$8nJ^wɎ"-h\ daǷiYO|ֿ€H]Nc}ͪ1)~m5 dõ~kYOi_\WQgЀUK~)d-־}iZPbU?ٹ _XTkт#BK-q]̺|hZO^\U??ػ_]VlսOKddO+ĶygYPb\U?۾dfWkח/o̻vdWOhU㿖۾zWj}%SqbUMwz*㿘۾FUg|w%LŹ}l]SL㿚ۻf>Ydwσ1\źvfZQO7U㿜׺3Uc`qآW6ź~naVNZ࿞ ׽U3`[j|ΒQ! 4suf[RL'#?IJmfcesҡwB!#.Zľzl`VOTfU??Ͷ_iwԀ{^@,!*%4Llÿ{ncXPM?mfualxЀсӀ*{odZSMbf߽$ɷUD{lblv΁̀znd[SMY_Ԁ!?UyPl`iq|Ăŀ'~tkaYSNY8Uٵ?л_ s]dku~wne^WQM_qfA?ȹf^^eksz|unf_XTOPq?G?ɸUmvz[^bgmsyztmhb]XTPOh`?۶?ɼfʄaY\`dhlosuxz|}~!}|zxvsplhda\XURPVtqf* \eWXZ[]^abccba`^]\YVUSQP]zN_*3U?ǻfuf_XUQPUV]dpģq_fU?ɾmm8f 88߿ڪft8mk@   Aaϼa@  =oխn<  &`_%  !fe  FE  a_  lj  b`  DB  #!  ZX   ;9  ig    $! &$ &$ $!    if  ;8   ZX #   D@ b_ li a^  FC ! fc  &" `]  =: ol  A= a^               a^@=   nk<9  _\%!  eb  EA  _\ jh `]  B? ! XV 96 ge !$!$!! fe 86 XV  @?_] ih^\ CA  cb "]\!  :lԫk9 =^κ^=  qdevelop-v0.28/resources/images/h.png0000644000175000017500000000156111362261070016641 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 Iӣ _^^c;aßo~ /&F7á_`1TA @ g]gzPT0 "x a&*c[df <+) bG|W`NpD n  _1f82w!X@ Ȏ2"h!}aL!,d`a BO߿3pqq1022 /×/_888}Lp}Dw2ܸql8`Xɓ'`Ad2 &Rhh XCAadA#&BK߼y f`יP=@DSpY X SkXA(J)Cv)b0(YXX ~ Jn`>dc bAw~7Va(ܱ P)|=߿# 9`  @a,,, :HHH0zٳgÇc<} 4Xb0H ۷oAb@3AfzA:2[Ɵ={6Cff"P>H ()@d1PL P=2b̙ CMsrĂ-CSnڵkAj`wH0}M iwMIENDB`qdevelop-v0.28/resources/images/dbgstepinst.png0000644000175000017500000000031211362261070020731 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxRA 0 /=A!"v4+516p#,*k:VDUl cA, F~PSb}nY tlLFqex SrN;)-LK@U!mQjbEEK>Ƹ%+$@R(`لvZzgs{z%-6Orr·=yyaAl[usfGuBL cLð[;boXyoup`JzvoD1c@ (cb\p=˻;EtT=ci}a6{ [fաʼn0=.!$0m11/;P*gw4hקx`D~Ջ0:BbRycLU d:f;:  H!l/o" wՆ{q^|6[>ƩQ5;e^PsB1SH@k0Kt#0DU]-ibI:m wy/C%o/^8Sr?9`Dhc0B`0QĈTAAܒ,JailJiIbem{~4 Xu;v$k}H a$JPTb1*Q^@drqݮ.:]"26D2L@"P!(qۢ7.OwO?-Ơ'{[ZlXRX2?g(~kbu׸wM:jP<ҺMW_j뺯+O !n  $3 "?T o;CR^J=d%6pKx-GY=曫b2&td> jOBKڸZǙWW(WB\c:"VIuˇ+3ĝ|O[ 0$;[~e{査I+@)$^T Ba"J_ |IlE+s{'馊8ubJ2>tUk.ŠBM- 6p٦;6d,"}2̣Ef|>p4GF#p {df6 >f8ٝWm,;RGd4FGH!{FPw\!(s~ɚ6qq>IRˎR+$tWk6o}rbxbw f|"!BVb5)d2{5 b;^c˵6_?7Tuޒ(.xnF'N\_(] \ ԖB쎈MA4U]1IT u(XR!wms\#ddY&fLd>v3KΦ&iK M>ϯ#۳u8՜!M9~JjsSu7l-*MR }2 "᾽EOx CWxgyKNg$N6083-+zb$s㌜xn \W3dt.cJexK#@yoDiM-K&v+)[ynqB%PNSb^fV+}E,n0\O Fˆb'սe^A:LT[F^"`xJV4?ZyZ D{q+9w}̫F8ۣM2tIǭռcL%G{:f+hZCȏisxϟrj(6[wyY%,f jM"BLc؁\ v^l|9O(0ԑG#A (\s͆ l^۷Jź2[$P -iI,x= !Fyh0wd-Lh7[1` V8@ЬWiM!Sckym Dz`­3㇂G֘ @H5sb &`D}fDv?7ˋ| K}« $X%Y 3''#Ï@g푒d64q>a%O@13 ?304/s32VQA@ F&" l2 `fwkO0  X8%.zb@ I -  KxdLT}3o f'0N2Wn N&p2130+h70 i wݻOo/>'?+P0n^po2A `0p1@07߿9~z`387@B?Ѕ@\&>b6o@.߾}G70"  P׳,~ȁb%>< ~ŵ`70~a`  Yݫvb!>ׯ? VɌ/så3e>S@Lճ3|~I/@|hho,u>>n|38!)qᙋb g`2bdۊ gaUc`e{!܈Ka  tpHR|b"B LT@F9U@|o x߿p9炨y 0}m8"fDJ}߬LI MW/^?rv7 .(Ϡlɠ#-a8@#DŽYruDŠb_Z7_$6 ;W7>1,hcd [K$͏-d÷Nΰbz3f@5!'}б&0I3p1h2gbM ~‹<FAu!?r/g3b C b"'B.H99X 3RRIENDB`qdevelop-v0.28/resources/images/QDevelop.png0000644000175000017500000001123511362261070020130 0ustar jlbrdjlbrdPNG  IHDRGH pHYsodOIDATx]koI\ĉss&W'!b0dff 9pda KQPX!! )"C9zرĞ=HLzByuȃY7 f]@]u:s[$`h_yΐo'L.?l7](XhƏC?W$E%\}ڙ3$npQxz>3o"$<-lQ2w!4X Ew[*azez"_;~o$^X ̯qJ bvG= ]WE8 VE9sr'4RGU랜Æ;[n]};KR{̑"be?3%Ln[6s}݃' ֤.[gx#sf+C%Caugnc&0 ]o rnye&M( xqq,qf4y BLcjDQh_DC(\wċ\}ډݣ()WcĄ1`N_-ԓY?k6G^΍|X-Mx*xI"ޘ8n,r%xj'Q@JVzq~[Z2~.dQWWtu3#Iin}GP#} mnGfՍK%6-Ii 1Bl;K*L4u$3=Jn-(_\?Ue=NcOa_Ͱ"OHLi_G۰>"rLkS򰥸MxمBiDVY֦ڤ[e)Y4]Akf-gUڔxixW37^vqτC%~:nˊqn/5Xt%ڲ@e?VhhdgXl9fcK06L'r/6pI/5]ɩ&>Nq#VXee[%֢h(`zO((j<1YߕZY>94K<􍞉AH1\Ob𕿵sXQ%lfnuGtdEۚp1 aCqwny{Uǒ84m@[7/O,F'>NJYCu?xم%=gMtԃpU7uC֤EwGB`BҰMNjrbS_Z4⢁( (`ӝzMį(j5t:ZWv?J~p((@vlϭWiwvpn+^ք9 e. eN]kfrW ZLBUM$UR-`v »ˠ{GDVF'b$8PhxMI +a-\ԍIi F&;SךFVALg雈߀I14ǏLJX)*QnmXm3 += kc]AK#2!Zjᄆ7z1țdIt ܞS 5A0f/W ~8xtK3ZU!s2hcC`.>rG&Dڅb)\b\$EIw'jwD64MΔ&bWvfIMa}33/oc&愆XwK &gQ aTi.w[qUwgbӽr!ad5@3Gh7];W_"&T7p݅eIog)ЩU7[qa{Nlwˀ%SWs,3B^HeW?Wsxwl9h'o0tկbx&0V(@Ѝ-ț. "/i9cSFJc&RAwB,/5rCV! ոǕc:돕оrY%,fAw(C0T)ea,";9JvȳA~d"1G8eyllUPYăwcЬ*%rYIG|"xP5 Pm"?6Ka)Tx<Џ%'ԧFS9A0Bob *w'j02ӵh[= D"hhX.7^:3H}USnvI;S)"$`ω0dI@0iWg+opEFAQg'HlSz:?Y.#c4IdVim[߻kpW/3hKkQx}BlD'o8OGb>zcFbo9e lBV3if; (]¸x FmٺHeʆtd= e}R/%blKT쳏ܾYɍR}h_2OEig7KH9[]cъ7 *Y <~1']IY˧%ZQ7v:Tf*4$`9sq6&:@hٜdͷ$omFѩ̔4w$f %\GAqn\iyEd/'>J$1eqÓSMxa%WNB1<; ;e\fW֎%+K$?u f_ЫdtsRm^.?lw$a&!='V3Φ-]ꋖ^PQF\_jȦF'?џU&'$W#$sh/"_Zb+rDž BDIꥵ(N\i˳qEɐ**5\XX cz8:ZBW9k]*5|\=4keķ- /v!"5=Wr 1l *?4}NN5aJbu\7FZRu:cv ֫nu3Ytl\7?3Jqyx5t㋽8r3As5ʫ5HhDA:Lχ?\Bយk,J3]ر5:_Op;(p DJÞUӱ ݹ>ݽu $Եf1qqy>dS6LnD}ݓv-Eqrc&亻yIMd`c`񃙅 @Xdd$?}bi#m꯴ 'Qƿ_? +@EO?W0}g4|@@+7P~+Ȯٙ0H L10X$}u>f   |f68QIENDB`qdevelop-v0.28/resources/images/previous.png0000644000175000017500000000250411362261070020264 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs ,tIME 4ٸIDATxڍۋ\U{Oթ[Wv3t0J 3 C-,B<"/ DP$q=L NtWwUr.{IO4`}ǷYk)~JG $")@]6]wa'A(L;#M`^Ò{R? .y9NMx|szͲjFSFoT*;A:OdٷCx$opTN吓!__'M{ÓwΏ|z>sqt}JhDeNõLVj*˾o깲3 >6yw[1榓|tζ-Q$[ ٔQa fsp{rەK* |O=R$i݈\DU8{KԈ9=H!-=mU,@Y =WuA9)t"2!͞el?hvő= K}(@'|eɺwa%*~ieԝ 5;|rv_~1x_\+PI4r ll|.!lo8p}X\ 1 $i[ƶk<59R]xΆs߃7#cmQd6FILҍԭr^nvnUߏK 򗱴g,2\Zxl[XeK2`,B^Hڄծ8Yw-?$*']r!i?I&i/$mh&U!7o?٧>~9jU~Uz(;;*P$0 bk#v|MF' #$\Arym֙‰\BϔL.3ݏf)֬]PoGxsƁV-Wg&sNj`Rěj*ʩF]fεNjtt#]\ Db=Nl2_8qZT*/ȑ#G4>_GkUCۚr2^t44zA+3*qj%Hr^ns@T*{/{hRhIENDB`qdevelop-v0.28/resources/images/editdelete.png0000644000175000017500000000166711362261070020531 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IIDATxb?ùK3112`~a7߿>~ 0Ǯ  j!h鏟Ə`eؼB!,ff(egce05O@5h 3 3@ "àp"b`D4;3")IA.  }GSy1(a@ J9`IW[f >b"dfwp?3v#g ~ dзo?9'6`x3p16@A@g23gh8(s Gq~?.^?f`=3~}t/ƣ2|~ l4ʊ`4Б> wkq בM ;fV.e36@LY0?p?|ײpC?0pefpabn0@~ 7%W0 B&L` B1 2=9_ؗ-``T9@X||'یfχo ̧2y20}NɈ=( H,`6u5F.o@˗=?~ěm+*dWSۚ !h8۱x  WLb'"𫴓O\>çÿLĂx  4\W@&̉=`6VDҁʲ#&0X-` HPZ@M`0O IENDB`qdevelop-v0.28/resources/images/fileclose.png0000644000175000017500000000163111362261070020355 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGD pHYs  d_tIME 5(MIDATxnF?"v RnƀWjjS[/ҍ'V4D`A6E$N ilRAp9?_f́'LiQJQ5Bl6^ys.UUQy)Ƙ/RJ8~{ vL&1EQtp5,PJ}~|| (-. }~~N@UUxBmJʲ$"3|' A14 at](<u Ð`.{캮OQpO<<<<pqq+cg6h1[q`\$ irwwڽ^(>rs///'''}0,K嫠+$IBUUeI$$Ix 2} ivQosuxG/B꺦*h[8/<ےZNW)%+->li֩U߆/`Z^4MR 7if`2Bz&NkSۙeY̶ RJ,,KB  (dyo BqNeWTV;AiwA{ P7/x̺IENDB`qdevelop-v0.28/resources/images/CVpublic_signal.png0000644000175000017500000000050711362261070021455 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըeIDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~%34E~LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex35K140J4M004NI242003O426430MɏlIENDB`qdevelop-v0.28/resources/images/bookmarknext.png0000644000175000017500000000211011362261070021105 0ustar jlbrdjlbrdPNG  IHDR\tIME 0 ; pHYsN N }gAMA aIDATxڭU}L[U?T1Y\#a,.LLPC99Y$̍4q, i6Ԅl0`%,*֕b?`PȤ-`+!dxr914O\FEȓ w{PqFF%ıaL466]>{VwJ\Ԃ 8tjd}BۿbM?lj5|>#9.:ti!A} Mf~ҊdɄ0 1|#.h# S7PA NdYMQFb]ܨ6'< T'ld…?&1 F#^"P,FCR!@8V<Þؒ d6IP0™܇n jog{X p ǹgG:|iO~1ܧWTr?M ˯轣E!lR1O;΅^R%P.j]iëTZ;J r/<\}e()YN/fQ(D^ð狕NsOu@$d2`||\ @`ZZZ(##!ev(>53dqLQ IT)M.9#.f*((7&wq efXGU Ci1 ,+M/2"gG/:f2 ҳ;e*`&Ze1ޣ_{TU#ס7 !|Boi9g)ӃQTUb$0&9S4^""o/8k]IENDB`qdevelop-v0.28/resources/images/CVprivate_signal.png0000644000175000017500000000054211362261070021650 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW \ -+>I!)LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK1H2L6212102LL51L3331J5044414quIENDB`qdevelop-v0.28/resources/images/logo.png0000644000175000017500000005612311362261070017356 0ustar jlbrdjlbrdPNG  IHDR>a IDATxԽwt\u.sn^ 7U.YJ\8#[{y.X{9Ŷ$+nd5" I؉B>{I"eZf3[}vCh͚5Xv-9eY((ЊE]׉0 48v:Yd u]3({ϼrB}}c2A$\e(e #BUU0Ԅkb͗>Nu3z؈F MPQ(P'a4 bL$mtEIӤVVU=p@=== ǎc4y@DyDspnrB ;Ꚛ TVV\|?x :x BE.Ie$qE*0"b8dYFSS#~a]`Y< 4Mm tE$@|WݽFӲqc2c 1PJ(c RPB@(pB9<_xlBN x/\YY{e͕UUwA pI,ːe+D! 1kmgrQo&a0 h Caz iqE_[[}}}n TAQUD"iiK^+1 "jba\VQQM6ݵwO,CVbTUW=% /vPiv@>'G%m8LMӠ:t]K ye=z7T[W?|#"gPbp8X,T*ʪ*l۶KK>`dx\0eYIJ,/X:;;c׭{CJ>ppaxEQJ"$c">W1/O  ]30 |8mcÀi7iЋEdpȢŋwwJWs%Y"G?刦i4Me˄3MV=?{( U& }]J [P|IB}o0A0i˲a6,{Džrx,A׮K"K|UBdI(I$QJʮlnj1ۻAwWq]"iBuؖyoGkk+.fMYMMMpȌ A+iԶ` ?~s(D#DQb1DQO܇B(uX`9tÀVWnP_x?!,n؎3'(%p,4 bt@Ẏ/\:ē0h۰}I1}4 #W*"|F$ٷoR\1( DH&9k4/]pQ chhC( D4bYa\Ngy,˳"b(b"BEA$(eU4+02A.a Nk'a״ 0J!$PfDhbH,Z:cׅ]LEpׅ3B`?gB|Pr4]o]~e_mۻסr&,\UU+*PW[iWzQ삷/ Cqr*V/bpXEH$E"޷A,B% m#a`hC0 {{a=B,qZW] ꫠ^uz;jH2wҲ,4d%塚ۢ$= _|R2\Ay2BMu5fϙsQ삷^__FQ(v:Λ7Oܲye'Q\FǑL$O$W}#A(DDnp]{ .>"#z]\]m$t\e,EdY {j3⪫޵v)c*D"3gbYo .АaP˲+T:-GJ8Jb1 $Ib1#(Q! "tMCwwN>ȁCp6nygÈƢ56"zfτp/|9/xY!lB6APZdwvwW㻊< J͘3g%& FI.a4fZV俟~ }DT"T*x2x,z^!˲g&% i -N!p66•(Xb,1J"$yQm1Le`pE,̡!pǙEˑO -_v27%Qus9 bppÞ4+++>v1$X,S40-H)38GFH!i4W*s]x,T2T:]j(Q IBpu?#G` d687LJ 5PTVzѿш_k^!sdZwt RELb S20LH&ug헾h4:fH$S4faSb+ /`F+~OpS"G*B:F"G$Do% ĒI0A@!ǑGqT ;_xNOR[ peNڽz_ }` 3{;vN8ɻLfX%BA4M$A L}x+[WVy:ƌ30~\I3@ 3 >(SN="I+$>xpKzD"p]N k7[$-[9A>Acphuͯ'zY[mp8SfΜY M &AVOOQ\1?!E"LqD#Rd,!]QA:6fl~yv= eˠLq1> y S 4QQ" wLsAυc;^3s8 $<@״ַ>O$:~_؁aDxee%͟9sФB6mŒ3000As9b:bl5b'!E*L%7OE(d2tU(bhp_ߎ]!ZٳPsm"*;:ZvIHj{guCRU4oG R 1> >4)n.m6?`ԋ."⇖dx ŗ^Z+o>u(=܃~r^شi֬Y! ]שetҥB_eY.L["0$?^_N#QQB)Nۡ&rEjn?g"} D6 p!zvc՞q Bsfqݲ W6f0|~nSAޛ=\֑t *J0_dYV/즛oC!ׇT-_;LpNf.[b`f޿ ݝL&QYYt1_WVU!JGŞ׷7=XָQDUzu'{$n!d :vk^_1#[I55"+1M9s3%OOrral, yuv1(I3Lsu>2##0j Jlݺɣs2@kk+LD_Q,iՉ=ſJxHB4m;ؿo?oOྱccӧw!4}: ȟy78#a\nARW[ңطNE/ZӫW qrdar%IpJQhk?'$Àc'H, 2k&_KYyڹiK+|q7n*A` gΙ38+zxh ˗/9}d2I+iObÐEjec8s''~~b+*H cVB@s0IB岥&UU-k{fѽw/‚XիbzJmGAG2xuucy c\Cνuz㠯#Gt_ݻvqpK@$w}VU0!?HYkV675]kW<}V~T ea׎h۵w܆2!Crٲq Pr`L9n",_] PEӲ@ٳкy`R/x9?GP3mO sGT&."Rr:u]MuݻwsRvXbYU  ̫Ĵ,tRo3$-ݣ3@nYN7M R"!@qrԌhmC-x?Zv aȟlA~9j4 y"TA7xcml6Y2(ӟ`:A^A̙j~;_'ޞJ&L"mɲh<*pαo>ڵ '_^w(\w]V/J{b6xv hݲ"%(ŨA&ndGv>p>6ak/K)R/8w L˪ڲeK߾u֭R e t, c&hd}زg~ޮεD+*ND*$QD8AeU paٱ?P;n D60P+*q s2}p'6mHp'=r s.&іVkR%r|%A>cر;wzN}<o6muY74֖-xɲnIe---h޽q?5B9'[Sgg`$*B!"Q6iA={8.6<߲ao#I/hBP]FWL#lܸbAbd2@__6m4K D.#ٳg:wD)9D_zm$8`rsհQ_>@<Á_>>Y")qH'[PXEg0uЯd+ڴtɒSNq3JH$lٲ[XR4 9_I׳A^r(VbX)/W+ˈmAQnEHj_}?aė-RSetDGh,8 bgް嫰WBaTèTTn؈WmD#aBƁ/2:w?Ȝ#B)„B& bCHAa x~y,EQE0htvt+.bd>F骨_H6@Ettv xal"j L_uz_}&,6>A@\VCH*Ⲍ$!"JI2!(T'N9B BBh }'z(b~ `J)DQ7&Ip=Lukf~a>]i/ i;xgBh,"hfs8~8 NlvS#x@ǨTWY1}yPADPT% ’_"Kx | n/ ^Uv\dJo9eTQ~(زylێΘ1jF4MC&Awwwi6 8/IbIlݺuEqQ8B$,Ͳ>|5rjiyƝpl"DfςwTusϧ})EX edcȵPZs۲18K|pvgPHJJyg5 Lۼ {:ZYQ 2.zG?︃AM$Q#?0h0LD":;GRUhSGe`=ոb1G媕>dO,5sN'00 P3% apju v-##.Z_z7{lLG1AT+RZK]ЀwOc%ɳm۶84iX,bxhhllmllzo&`kjjKpѲmFit@{{;؎]qM[s@ϙsQ<݁_wv&{PBJ Ȋ/[&9(0i%c l;Њ`bXQ.,b|u;3f P .p?ɻn/.i$ϣ`Wu] h1t444Pl޽PC! ) $YC}q'[j%#_,|9p"Ph͢cW8뼀uza oV=cH-\^eи pQ{ر!Br{UU8?^}wP]׉i$j IDATˡԟhA @<'ئRea~OCCpֿ2RW^ *˓)5p!Q>^foUWcڲe0K9 xu8>|h >)dIrIѽo?lSh y[:6``O*g~c sR۲H0qppTmCRmii0 `((0- } m۴B!}<]""Uٸ'v\E.ǍBg, 57chRD\M8 EEHƑH{8vG`8#aȮ0sH(zA`H/U(.4Mb]B04M`B6IAP|8\#qJ]~c %k{@0OK2Ø0gY q8cR)PIB]w`?7Bf$3|F)0Nmތ 8wu!s„@"h͇a_ 6cp]1f*'~qwdƍnX$| C1w\ ۻp(=/%۲0ɀlyF%,SDÅpAO|´*oŞ#k&LƼ~?=R*p\sCR%x埿"s$#QDR.W0^ ܍k۰@TB4~g+kl$c$ӬH*w_rɍ(aX,4D cMḡi;L+Pjj`;y8ι >v B(BBD}è~ &|x-w S 01BdF,Z(^xNP(pj&-VTTkEA+~u %Ǵl ȑ3΂ p@COu=Pty^94 oDEC=B pï97И zz0):r KIG"(<[]]]͝;8Ct]'Tu$InݺRP@~8vϜ&u>omO|^?kgkv:<0\E !Np;'B]bgQE|4#7E`~/>WK%(Crp( EClp?ΥM@MOٶ+eIlD`"0-c~=-< @EX0-~]2,*շ +~ v86E>_wC@-;B7,h6K/6&c'C-՗A$״A۲,T)u?s1iQJl1ujADẺ)_Y)&8䏡_2FA$Ӄ_!U~x3Ƃps܈\>0abR}}C#dB)v51;v\`xxGX3 X ^//eY.IˡmۺuICCTV+ ?sP{иj(sNāGXEEG~o߁52K!ܑ#xˡ C1e}IW8 8u't>V tU,laxb,j֮S_^5r!djFl،u}~e}}=mPݷoߍAQ`3,-I wqՍ|>+gx X~O>lbSeH chO_B?z=/EidcOP? .,~!0 ϣXD? @+j?Gs&p5qD|cPEOB%;@4555MR .$eY ̟´lPǁqظc?SO|xEdk $CR$)CD ÞBӋ0޲oE $iU}c;!ӄ(INg. "2_^ B\>0fףTP@d;ib*d8Q!?;H4~rq!>'7gvpml]GQF$ǁs HRx>X8kI/Lb Ao>w"! x 5DED!ÎnX䓨7QX --my|B)`08{ ;vy]ZTtNÆ  70J`:gyF"/R*+ >?y/}L FK__R>%>hS Pх 1N<&кZ<8P0 A5="&?0&; Kw9{U1|bНv\ΡZxcrWW\ K˲fJ!q`(r0ԅre%?ẃ/_(WH&$ #ajj@R)\㊟7_݂+UĦOGR E0Ĉ'Y*oDXj8mJs);<[.EwUU\ǙsmA@z{{?C ܷȃ$jb"q7=68}?v ݋xC=pz6lַ! =LEWW\(W\Wa`S ϨC߇ʾ jx  \sq7Ţ_rTCmm-cGΑ"8csqHu 01Q_S9@1\/Ӫ1<1|xRI@KҥȜ;|@W6 :08. +* 7p\[/ ijS m&)1z[`[=_GxuP<ߑr FƸӶ*q9|d_(CåVOEѹmZ 3@@1ꫡɂs>!k|(3 JUhM# ajE(aoJi fKD/Mp'@ co|p|[;Ӈϣ琼V_s@*zWDB ³;,̆ h%L?A}!SJ#.|(9p{P  xBb)WR csʽ%9mO|h\w,{Jd8WټӧOؔW~mm m'`vu!B)1)E2Alg8Ňa,_0MzUȋS8/^2lbQ? QB!aB&o J!;_2dFQȲX*̚BS]0kd6AqM ,ʭ߉$w>wݷ6alOg*׿Ŗ?"D"~^cb[>`(S{"!U"!}O`g!0(La{sjOr8Fsn$(@p'@>8 Ţ F";$aՋի^6H0RoK $Ƌ/Ɍ1zSJ. Rh RioSJM]);X8=fd'. Z9GuNPDB=h!Fg'wKSsLF$ˆk_# vދfmS JQ \qr㤃 T9/fEw W7>ƃa \AѐZQa5лm+8=Y9Ͱ{J 4z/#k'ToL>lLV / BrriY㌆WXt܁]??|<֋F@x"DNN> ~B@ ۶'~P6t?GY!5S89R)E8s!dd-<FiE‰N8م0Bo*Da{RZ;`Ysp/aR1Mp=/=}8w~ vD!PAR76'KY3h6p= @L4M؊R"UW625-8M|pb$!v r3B+V`X{'4]?gl߶,(DIY2sPC%lgY*Z=`h/{S{Wn2[J^]0Xڲ,w ˖-k9x /cG\Uhf2myPGSdi*:gQTT IX}V_^)j:SuPm_`{v.!)Ew% > v:mۆ?\.;֞4u$L˂mY%aw0={FK@}+hp) O|(H^v$ elB!~:B+VVB.tDm𺴂%\9YNqə 4"`izGMJ5ԏ;=z3'r ã/%nCޠ I麮 w  ЫF,=/2.]i=VYY:a 뺰,kLavano;i:t]%}a6/Z4载c!+3m`/h,[ a?7qa;ߏdeDI<+^`Z\uM}0lr'TW 1x;>e4 OQUUusW^=I0`b3gƒfӟ7s&(+dx1B1m;@0s.0Dw1mZy{=gL|筈? >M`D^y v҆Ֆm<{nƌvvtp(IGt] *1Aj"d<wP;C9F2ЧP!B/!ף_F, s'x}?̙5ş|ʼL"]w܂Ƈ>9RyS7< {]alOnkmsNA7޸4a@7F4`;6ȂyֆCwMÇpF .Cts_`gUK/~|sfA)W@PlGW&JQyF6 d[UW7s "w~iPcpE AX0@ B, *pM68ŋWqVL vO4=f 2Fr9)r9H 'a}#0B@U%EPj{ţg)Ak4 p'G6 <{ۆ=4K`uÀkۘ^S{-.,sB)t^ktUe (vԋE D,K9QH9w/l?cd2ІQB 3n Yko+3J!H^Å(>!# ~,P{۴KqMP {uO_bšrF)TU۷V2$Yef] W/@2 9sA̶801sy8U* {,#v Sᓧҝ2#tlq4TLMOv@ѷ ۆn(}aW˩S&!*Ep4Muh@:˖]t. 2!^T-Cuy!E)Ҕ2۷C\y1'Ƚ JC_|o‹/-m{ea+1gL/&{ Sx{\ǰP,X(􎹽aJeEn{{s-|70 "%u:r-Ch)o#3*Wnۗt巶Ɓ?Gu(5rJXq5/E # X԰n&t9"B='YPs±2Yht]GP@>"UWtKS(6B8:Ie>}ڽ׽K#a$ ӄlYNy⮋B>P[.mtRj8T췷w`AFF){yp#\q%BBC 6B%U!B NFSkV, BBPR vmxgmEvPouӟ@$y0?5t?P?t]G(Bf (-m僧!` ;.w1 „ N5,C&m!SU.*]5+.FQ}XD6ޛ&dEyJeYF< BB\UUه?iY^^(b̙0j.q̷_&>}8 {wy >˴``CӼauGc ɢ<P'kE@+@+՟#y[Yeqџ#H&AeYF2 vJțo~9+6֋~s2+'_y>p+_'ys'29}EQ@!RJ"!P(%tB)bt ۓ.f?͢7mm?Dq̘1 dhu[nQO"910u:h g ߉ chh;w jEG`$Smt$IB,PQ1>"oXI%K-QGgs9r9 +WGSS$qUUJgPȓtxpk,˛~ "xE57 #so[`Y,=hy #Ȝ<|>N??NA1 %rdhG8d( drн=/(rIx$Amm-6o #@+*D(|Ǜo: s毽o{s$If@# L@. ~USj穟x;Z[}9SQj{Z+ZGIw h}c=LHo=~&,yIDAT̬]Zd9QEH[F JMy~CD!ѻPDBU)pgI 储VW^heDt{pPX DC4hz=v;\.6mtul-/FQ6(Au u;1NgwР!^BlWLHwQhBO$y) 2;:O$EG!РeN<+^RGo>Y!]9S.}~\HRyF"'8H'W(1 #3:l4{L- 7o rR$iokåӦ `0v=M)<^Pi]T O_tr-ɰVuZF +BN+L.geK@JdD`d ڊ~}9z~oAa7_܌x͟C!8bc455e;vѢE0(.*nM&z=#7?.d2 5H$P A3ګ[\ r̀t.)XmƻTZHPh/2p. X ` ,Lr2 SŷNr6 kK) P:|:ᬊ# (˫Q6 J)Gy%(>cKgٵ?$I ;8WC`(h8D<A;l{eiI&N'OE 7vUT(߿_bɤWG^2PҞNǀ6 [zNYk+h"p * }W l`08P*od>In\ xFF7lu@~8~;>~l/Җ͸|j.Vƒ1r1 տ~ "ch|,! ! )ni}{zit:l4eݎ 'q`ӦM`t:p&IfYVڷwnZ_b\sL#Ji2Bz= U@8K$L}&;d;uZ\T!0U'F=S?g=r9Ch{os,  G:qWqx}9gJAĬu B`Jɳ0ngK#N 3fOuwuIV+<M6˕sBqw@dW%QD(xCC1RBM0Jz4E0}H0 G!S ȯd7@ŝk7:ǁMCj06>{810#EBS =猽}1lRb^x> ĢΫa(Du8~ϟ{Bئ¹x*+k9҉SsRT?4h C^z Wn|>iyݻcQ 䢢"̘1^8m۶+K.A"G2" #n-_;C B(^C5"( 0ͪFQHg4Ȅ> {tqXi?Oa'aPzrߖu!S6t|zxQȬ==B((f~ |E6?v"4-zl0 ^W_}y?&dYŧ~ K8#TP(_<ほEEEw8`2cl\V'F|9p?<}WTc#08sH9ppλ~r!PX˞yKGyUzw~YXwR(ר{˰MA;;zǐH$ *?"AÏnhgzjSLUι.455aY! (zO媪*~| U-iJ4 I/^toҽ}#-CO 7|פxE5RDcc/(@ՖGp"4zzۋ`(D"x2   ْ,lٲu,+]>ۍiӧn;k7|tCCՅA3jDңt(,DØWb} "!7$ pj U,-T;`F#lyySN筭uΔ l۶ /ƴiHExd*U5jP(3d,& |@ @<G2@,&xrT2)-[oEѨ0dP7xϗR>p94P$DQݿEӧ'Nvwu `PD&d8L?г͚nG6bY,^ ;n@0EP'IыEGQH%p\0, o8)De(n9Jv NEE"Cl6X 3f}8H&h|͛okkkk씴^myy(RS[ ~  `hhmm8i"U\\L_lO8tcVf!//v; a˖`J@QHi vHw@+( :T5晗A_RIVRfr8QDF}>lqTDx^ 9gΜ{W^s֭",fYX,*\ z璯oظq#L>x^pG$2"IuͲe4K$kj!O yyyJZK+ UKTG'}̐$!ҤJLNa@ s-/t--qdDz,iAPpqU qc1UsbÃ>e޽ޮ.(aeYltr!㩧ʔ|@mɤӔ(r,[Fܱc۷?jf3, V+l6lVkv htZ3ZGLB@k G +YR_#ˌh]5rOmW$ BF(;{65ы<8Wwfڵkﯮnٺu0RB,V+PYYv\y_ 6@ @i(I&$NQ3fPn_rÇeYvddR٬@բA-М\+0"hgH9k-e|l9Ymؓ$ϝkHJ(򉚚ǯXTwWDSSlϏ *k֖j!`IZ (kSɤ7K0S *f&&LF#z=X"8BrҖrg$Y"*>)^̍ʑH +Y>SOg4ܾߓ6 0qD'JMoذ> x$ɐL&CR3gΤR޺A2[àà*h4d2h0`0d+tK;*M,MiY5%MIu'3*5,-ϯwzzzb 3 #zl2,,Dii)***Y+f ׫XLd2dfu5]3{6sǎwqk*F0vmN#eYPfYv@An>!"ȲДX̼( U=4uMIHǯCzf_î]bggR0N Fl4aZt:1ydbƍ_ϕoCf͂UvB! "LdiJjSRBqWr,Isu:9 A:.- ;nԉ2#Kk{EQ}oҥR!3:tYnGAAƌ'xS&ˆ qFqeYΆT2IID2{zܹTCCCW[oaEH)EYMԩm}WfNBJԜN&@$C7pI'RfLђ8^MOt:Q^^"K 1P8],% ƤZ@rk٩'7/'^Nk!^y F7p۾LDL &@#Jx @`Ahn0qI'.=IENDB`qdevelop-v0.28/resources/images/CVclass.png0000644000175000017500000000055711362261070017754 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxڝ E3H?;tGp (F8?=n ?,>%,N!s*B;*BpE MT&#HfAkCs ϴaM0UȂu@ o+d“+pD*2ͧ$M?ALzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKJHK2I632J4K0HHIL1HML45KM jIENDB`qdevelop-v0.28/resources/images/editclear.png0000644000175000017500000000042511362261070020344 0ustar jlbrdjlbrdPNG  IHDR1_gAMA abKGD oFFsmT* pHYs  tIME "}IDATx= `g;ys ZXX8,[̻ʌڠR&oM{\ѼAhv A4 C>zWl\gxOKfd$3.ºc!ݐ LS~IENDB`qdevelop-v0.28/resources/images/hide2.png0000644000175000017500000000024711362261070017405 0ustar jlbrdjlbrdPNG  IHDR 1ctIME(cj pHYs  gAMA a6IDATxc| ktbb3 ݍ2cn)IENDB`qdevelop-v0.28/resources/images/hide1.png0000644000175000017500000000024711362261070017404 0ustar jlbrdjlbrdPNG  IHDR xD tIMEʓ ʽF wsON L9O^ˉ2 S`y]\9|4?{R(ro'O.ډaFr'sہ'<O,7sؘy%rsͮ3h8 L bRA]r)/k0L`0Cm(ROR0ٍ}TRXEbGj]%3(8kmc,&ϯ]erwkNn}L!/#$rztUHESN{]"}jmlͭyf.r"n)_[lzf6,]:qLE#;Zi͍țfwu4dW89 Ӄʒ_SLTtRdOJN@ROMnԮcX 3A8kHfObo)/^Ivr"a+ 6{F8O&fY/qBDs=("vܓu!rB3;슰ݹAz9G[F"?ņ{%X뼲"nMMA-U&^L[,V,v]xk@l!S383VҜĮ L;uCVTIZ{^Aۧvn$ф60,Fua?#;nf]/gMp"{Vb x FM:ys'j]U!wլ.fv :)9$caq8lho>Zwp0FrDÕ_8b#W9OZFzr^zVLy?wFؼ(8<J8 9`@uaUjTLjĆ^rg  >=k۷ N&jOI .re fPGbPz5ka_B$d&w{+wc9F Y)(]v.LIX^Ho'D_RrHcK]ƖM剸W2HO-]qiY 5qI+kIG&9*n8`q 7&}n>)D 2#wJa('qqE{ 7`7h_nnm/DʞNX0!=Fr'[+[+lc)<7H1z7:Wxޭnr9ژnj4&Vn4ՄOܽվJf dDF`ZY1^\Z1! (34L%wTΥRghnJ'g&BULf)xލnŎڌߙ F <1dTT<ͪ>VZjӾm:[;Wz7mʬ=3Ӏrn:bxf{7+i0WڤW dRf/ȝ ud,u_TY}| `D5-#Rvv]8f'AT=l+gx;XANz̀ͭ ɏ(C `e@/WreGHO'4h_jbff++ 6jn n{;[.Ud h{e޹vM9 kt{ ZF2@`nRU8`Il&-ڍY9BWtY~/" ݾhW{׾&C4/ dK;/<XPfw]Y+[Ŷ.'Onǘ9lgI}aQ7NM6_}q U2ioQ!7C ޭ*sxu2:xEYd:20W:9wd@(:Uceš""\=J5M#a/'2ްgc7*b NEP] FV}5_f\sg'<1'C޵rrL[=916=KEfi8RjA=c/v/j_lܻk_8Fb+`97LZc{ssݵ3CvN틫Իc/w̪nuԾ پY?P$Ujp6j0vV}zѫ#adcmbr;smoܲv_5s/B$4zFlz7΂Eg>ڌʫ~c2fVlw׹ԶcWVa ݻm_jwoW:{}|ݯ; ^n{USfwb3sb^}nzutsIh1y_fr!R.2S;T=WGRcߍvovҞTPpB^ND!Z}8Q QĒ"h i`0pN*wA01[7L 0f:{C 5 C h2/[._nj2G@qܯBbL1x~AEC` J۴pE"Q$KS8N8?b;t DQ4cwxоFP.gk0G"VKBbO; 3ALt-^-B'5~YIS)LWYx`\^s8NHs`ުiyh6OvATH۟\EB;xzGhAN=Jٌ(AN`I)yPEY7d C 0!r0{Nx {##$JynT[1)PGA- b1ʜbrZL@6:c"{mTMi",ry^|ٍ(N$$2"(F~B#9KRkhE1w!iqlhoˈycNq F.w\rb1ߍE.zHD2&%@N}v{"|J(.1!{Ic5&PiZV0E7ۂ4AV~?CXlIOrp8fpNBEKNd|NK_g&l(b_(K!x4{|6J=i/e i:)dJ# .y*(Wy>RcF6-* 3^`,;WL>Ox eA9#bDR^h|CȘu^LBx',H^؆ȇDAYwx**MF(sրO*$DEQ<4. q *ʁ(~%9_߯P Oazr&GWas6֧8|$LP0d f)2U$n8 GE/V ~1dߘP`0i&xNPViLH#*Öt@Y(q՚dCLU'Y 8 'qIi NJ#) Ky./ӇC*(2Y*DNߧY)3LP6/j`F2Ӥ`ZMFe,4D\#J3G'M|l߸xPتY+?ѥp&)Ybu`WFD&0^c#~RB~| 6Ъ*P Hh&PF7!퓋9ͅ'0o|~!6oaWOEe =x²\rq RPI+F9_?aY.*H+7q0٬ՉD1$i.)% #\!L2^hpx=p=O9/~<;an.̜ _ ($ YA)8)ظXHG?G}FQ0&(̎Sp$;4rxHQ|9$y1L>D.rzc4G 5/@ AB{_V.Yh ;mz<0kvPQQ;vILlZI^xwhwf6o7̸*'^FݽG{X`bѓقY4OK &f)̀Ho:|b=-sR&"8WdД1 "_ P˛)z~}9cegڟ#=GrLRpPЦQCBR3#%Rň6`:',<+zg;_8j=`/ d7H rWD{D\av qL"pRK',dP;J֓cK_zt~jbmWサqF2>ŵ濺ރG{n>/+qfYyɜ+'PdV'AqLXA{Dȥ(sĩI4l(؃#AQ +6uƓ tPpy!`m5hV)bS# ;5AqLa@}ϜsB>l1Pbg-r+ EwyC,&`U$R}0j9=$- Q?lx({OO"o/o}}XXc8YG333gig7+I<3iii=x(6q24gZgnT-r?Z9}x8Meխ9 - lsطXbA WNñ3d,FM" 7]]Čj̎?:H&Э-5,^Ze}0uH$ĉj9Ԅ+&9,:M8п1E si$:gS1[M.b$殱hj!ibM&tWIp_Y4bfFdK# R;Ĝ < {{}L$n\'#`]jCOMf-k*U+I|w;+41AwhyE i)H!yG)"#x3rfcN 2`rv!& ̶[)Zu\[5!ba8E9ArBU9UE:jzu@LBDĎR/zS.5=,nHX3`4|vYi/=ީlc!zQ ~vdѻ.}qlGZ ĀU;l ~XPH25~[ڵ| @&88X 2N%u<iOQRʒzšLGLa6GgCԖN+[pAJ;Ji2}KFʹjKEpL$U(@L8@0\@O9Kc 5Jpc-;ͥ)eVFqbLX @<|[^hMf$L99f%e*}ïchh% N)&8€8Ȧ:PA 7ȺHʼ;oW6:䕒֥_v?~PeHӲx J$$iB*^FI Yݏ,,'LChc!f$:hma8Ch`+LgȄS0kLJD Lb֔mh&j#Dź Ԍ$DE%ԫtj6 RS Ia6d@'KjD2wFczeiFY`4>iO@:[I҄8n;I4l>cf$jDGhTN*} B {,gjO'`9x_V\sg`? ⣟k<8Ç;`lp0$khx|X])Ŷl~TmͭV*wG;ñ$A iBVq@@Y&$(p İEKZxIRqgK\f)lA]#QIXtw?xhwG8303(8Wcrj8{GYtԡωcT{)ӬTG5JFEa'pE%WQ26 fy~?kTH.M=M0ri>|t8W/%SUfʉf<[O2SÂ}+tTGk+GR*SM@aʥ'7s;%$7,\w<@DAkh[*o|̽oϽI?9:ITn|B]˖3,A~V/Z)LJ4 Nl*u{ز,;M4*q֨1"E`dZ[=IeȨȢp4Hҭt&Ikp0MP)`@(Wx" \Hj. zZFK(d+o& D8m̝ƨֳP xٵ uа E}d9D`KlfQo~cw=t(:Y~e-3+gtp@3'$./#-2 6EםwhK# gsI’tm QJTub Y3& pYspp!:}~Y)˪2{C\Z@9ExQ6_NGGtFu#9Peu VhZe~imz?fg"Q\>5:\⅙ȴ:]wг X3C[N |-a` G653#rSg,Pɗ9OH.ްBJ4&Ei`;(ySC TRCIGHk>VyuTGFJJ|C$ӂC3 e[ԯH^jӤ9N!lz˵Q{~gH(:_ΛxKoʯ݂Aw#;3VG*s˾ȓ~dn_o:S! Xgzk+u~9U*U*IH_g8;@i6EWCۃS=cXJ( bfPM Cpd *G Sel13I cwQk,%9F̮A̜Gxe eřEuͿf̑$>52}>ٷӽoJ+3XgV)>:n̔Ǜʩ]}UM*%ɘyLJ)fMKUW E jEQ u1C"L HL)2"S~;d$V928Wbd\BcN'߳ 8c /C~緋(,cayuG[s_(*@"~hgn80ƺ,x(Ãw@x׾}b'z3lkrER]"nYkf !$Q:Os 43#ӞBP!n#/2, 7S+{Z8Zm aA.lZFY0/MZ̄ln7L:2vmO9rY;$/1m\e_y#`X) bLAa2SYl,Mk-Kgʿ{4ZQ dS8$!&3uF(pit!T!nL+ӿlQ @LvȤb&0O$*-MR(4F2hɓrkѶu0Z)Xni`̦J;J3a6A_TR&h/d>7d9ʹ|`4_Ь};(qRbpO˥إ֊RǨ-]9wꤖy>hTljʥt9QVIcxY!rœe!xU`H\Ĥp8ҥ8ʀ1#210չ`}yS HGL32ֶ/f n&b7sR`YVs<>,aJ)>nf@7+ r.8S/Aw(z2ʎ?:f=)6l8HjR6(%0L>+i駇Ol*߸t~}|Q=}6-IE%A!EDšE63Jsi(13Xc9Ʀvc@w֦#->M~/\8G,pZI7CEOv4m V)!JpNS/^̿.l?+W*TkJ,YzIixDęZZ.#FgJp6x̩c{L+_3W4˟9)Rs_{}k("K ZkʌpsO/®Q6K<-*ү^}l .ֲ>}ռl#B" f3ͩ֋.31f(pI,c$q46}rwzF} V8&eBƚZrV%Asnѡ IO9_~ũ'zL睻z81Ngϼ2LsxqN j});>|!\7o`~Y2 ,ށAaz.o3m\(/|S_t=3U6+,>{fn nMrFMЩevS5aZ~1:;ـ3欪 k4r^{ $o1n?>f3gL5ߖ*4EExwz 4ޒR014yUZZ~>y\p$q+FTQ{OXp6sE?tͅ 2V˗?Rz{FR$w 3R*%%*?/^y8QZu&JN%o=S[ L11g\!XX@.Dhwx8Mx-@)cX V3<_r͡]u'ʟmʦ'zV]٨0ljaХ&!9l(7[XIU?pasϿ婘YY_q``jm\Q5gҫCs,;⇯[(]݄>*ᘇ2=g /\x0јGY`>՚{V/GYH j|<=|.7}sW"Xe̵yNR8|,޶DӄxRh@ZMhbEKq16Uv}J)ۇg%1;s@Qͣw#lGTˤTsX=+$[h \BOWЋs ͖K1@8{,DxCssH1K!w]^srʘjTmpقSSgóMFD7PsR f{z2>D=q[©g3KD B36МvJS@>S75U+ϭ㙾fs~]R:^W Q ^]A$ Cu@uH8qPmy7R[Yϵ?}SˋUOc%SX/oFXucƔL+0l 8ܧ FDž䬽f#fHOr^7.~9C|³U"*зcw[s <P>r{)&6L_e7ccUYgJĥTv`|}zcْ5>с׷`wf7 S;G{X:!yvt}(ٵg+%1"0gO/Ɂ <_K_@212Y`T-R/g fT`'n3g?LvZ=@JJQߊegh7YX(7 ;d3xmGI}g]+:& UWyУYRR zpt9^vd#_N'^y¿TGTRA5 3?۪x7Vy Yx?+Tz,TB>ܨd8>_E8$&3S+ d0M"2~)R#n% R`8TE[׋K~7?S%&[˸G 9f/^+ryvY Yx~k?W7'];(: Fbs,I3?LRAmucey&S3Kh j9It1t{?~ar{ciDWӏ|TN4Gy ŏʥ:%Jͬln, @j2ya/WZrZtXc5=?RŹb9pboS^.\hcq6O&kq+Kuf:o|[ãCX\\NwybQxXhk䰵PI/zpTRm u?ȫ ML- fV6jyĭ{磃[DͭXHʴݱӻoV/rHĴ1d:c_Oϓb5fZk~l 321v`v5EMmq-'<9X*i^7(ϵ/|824A5͒Zg7]0?$TznhkRsqdλ4Lk?2lu 66.D?AXt@֜.C05xgZ '//85,;[ DoBQNh @!mw`yF7[S`sKF卵&5{ZX/z0a~On8bxhJjX3" @me]P3R@htR=o-:Kk"`6kw㫪T\ݝnsrst $050W6:(T^"sL;90q[AvQC&0VlhŬ,U >%I4J3,Ju嚙A=Fŗ'r Z|zﭯLa`wWfMa/.̶WYΏyOh|cƒ M};fO@wu_\oIO&ZƉiB92*b*h9` > !DgMh9G<-ϒ R1^#(IZ3BYiX>=!Q0oTNٙb+xoSՁ En[[v+$NapoW~͙TEW/ Hŧ%K?bЊ؃חb]a8+%9&U\߽6Pj/bKi1 RMYۑΟywOtl>R Gnew^m ;Ɓ;'Az߂qq@Q8~}y5U"Qt: eԸyÇVc.ȉ"` ,˸>,i|gfɍk:v^y*@dh2QͥdJ>(rጠ*~Lx8C=Gۍ{Hݺj=?h}LP߁WXzږPjMTv󭫛0 |@}}Nu7,bo-aӺi ^")Bf9PF9t OzTF^āoXo<]4wMQ?wJt{Rkk"z<﷾p`/E1b_)[SҴq*q68HT*n'Z(I( Xzv}UlY0:\%_VұHl{kKW,]=mv^6ԩ7*bk/_=}+Kw gPvz幩xGoeQR-m/2arcZ6%DvoR!d,'skB> .BwKQ0[QXAHpX~GK xt6-\4)}Tjk,Jw[*PETKj+g:Mhc6Yv~²3>պzƬεZ_܏oڸ  oTK^ܾ+g#R_k0WɄ(Qo])y"saCN6 *d] `Rsu<3+pm =[̊S]B{qԷ*"I$#BŁUm{!%ʥS˘\+fasU077~g? j}мZ%&~ r땋^~Z@9n| {rgfA}6wnE T+\±u5WW$[$'[h]=#@fʲX{~u'+xQY $O^_iSWΙG+36N`.8`~k.a⻅`${0/]/rk._KA9V7YrsɉfR CmɞREYS;2# rڹfs8hrf{h}"˟k*-o_{ϗ"^9[Wρz_~;޳1WΕ 3jwjr)ԼDR%F~)jk=-7fWy'Ea=@b#~d}PQqUsJՒVT'vmdٱgHBtBwp镥i`n' &Нf,fKNjlKC$$k.ٲ%=w;+9U!sDw99ysŭչ3,~/? P2%R+ZW-ZH*c3s_\|A- >u؝H@KU~jaU Of_T=<~#-} 9u'jlY^^zOH O 2.tK*HܷʺT8 KXb`E%NIu˒+A}+tҷ-LJKofzVՄHC_:;s8HtJ.E2؂}ھb4vJ9~,"GHBJn \8ܫ-|ȁuMWB( B_\Fkc[Mt CfIfu?*I_o[e89p;5OhW8e5+J _VU^weX(0AC%LFG@)SQe C>ExrL L\RJhB0Sk`2(5Ӧ]S烓aĬ(q!:]T 尝XQKJb+~9~0j/D82>Y"ủkV.-yt f[O~Ks9 ?QbuMh,Y]6UQm-]P. >IL8cpS{4XЮ+w~UTYTA-h^Nth`!K, S@CI_懳xV˪ʫ[cQ澕_e8%NCp)eAv=.|' lp.Rąwbę-C^l҂S C& pCiSD9e=` GD?~l/0TSvocQH #E W 0#XT)#HWVSEaN9WTd LΎ9UݼDelYjEQ|aS\;6r>Afz? VepM5V{p8n^6[tݘL)bc.m80.{gktg« |Ф)@U)e *RNWTNґ9+_dC0;u5Bb@HI8Tf1PYbJ 9ɃvI-*m2*DKto-۟3Sd Rk\Q SRE&5vՈ ^֮L1L.nyv!7R:Em0jwk2)ePٔM9ô8 2!I ;NJ6ܷG92BuoUrۦp6127?[Vd⦰&.K[ӻkݦo{5U+]䭕 8QY4,;=]0~ 8L2Ȣ<-s>RN)FDL՚^8䦘%!jo-IZvgeC~wTM$YȺ&: t c/QUCKN@&dx ?'NWS9X甔Kh*99rdpecSi #o}]bvo=*3 %[zz1 ¢%$G TJ ac4\jy3tڋ 9*I9{zL\O;u{qïvsْN520)b)>JՋ>{n.uZLߢ%A*c[`"%tO[I@5m%t<~W#K?7u]soS*j`藘UKL,nl)Bx܅,Ͱ;qciq7[/]PޘlJ:]RB>ݞ-hBWL,eulȗ~ou4fsu cƱ:CC1e)˖T.V* NRe-uf xe{[c]mQ,+20]V<\cx#+V׵Ԋ !=h\Ăp Ѿj޿oG&dUGZ`#޶2_(\]R" E%Z3c掫*׺wO⌟?dpFf{|osʴ5S1%n/^ g8S2Pg꫊ޏEo,\Nb! q,( y؃c1 Q} c^xz?ie)4,|D(__39r>|Uݹ9|}fn<VK^\+W/m/Ld\V[y#sss _Qb! #KF OfSK[_u^rl% 8mQzqn.m6 UAH7uCBz|g88yzy>hki* 28М[0?yW ^Ƹvik˯l(uw"lJ,YUMX|2H_{Ŋ,ek\v&EScżߩ "\,+ĩsr51M`X5CGw) IDAT+:2>qwfM%VzO WV$'@kXzi%[`_̈́8y\X ` ӮͪRp<>;jS JHc(XŧZFjL3\o )"ϝ9ce85m*S|_Ձ؋aLe 8Pkks^USF~]8q)fl80S=jI+]?vF"V&֖6J[vgj;k&,2Xl:U^e\e._8ϯW0xR^h~?I)oSRPqܾm3]g#I=_y^2+{$ZRw!ʣ?./k^uugmKZUZU-yYZķ¬ůX"3Oڡhņ*ߨ~=|Ty[|=d"Tr]K{1(jEmWd^q"T7XLB9!O5ʊC-ul 1UV!r%0xrEEj2KBaQ){2F̫[^{7j!{Jg_pnz}emꖝborVpc37]хkR}mgUtG9B`ZPI$sq65[^%/S 24{63A JTPG'(/=cWwK !ԗA@zRDdpuЯMPEK:̓SG:LX@A(F0qan|#[ Vê.ќV|=ʌ4JG >VYB}‰#)BU͢te{*V+pЫ5VWC+q MEG&::y:|=Diam Uvd"[Mfpth)d9~'n9\_Ojo6g3\re]p .p]$S^ɗnC/Ҿ8Z!B|4s..E¨Z彲M@^Kq+!{>c 5,|}|ys `M !V#k-8YL! :G'O(k̪Js:DZ-P$d0WVXCPW[1.}j/p؛M CDmrq+ Cv{X~HȖ\&%t,pWJZ\^[ߢU$2`sSϝ: fVjB+~c/P*5}<%4v$+EoD$0 z%$\f6g*+*ٱ}M:x0y?̪+cS'ǭ˸J,@].ty,wqmHG7 ]f~`˷ Ö9dD +^(UNd ycn<{~.E`çOO]ƥCqy~uH~ɲ4֫Vշi~+ʙkrW. !s?3A4[ƚ$(DAx1[z˯PȎ}Kٱ]šyhO9?s[KceVV+#Xac'OWZBD7Ž<3[fV%p1фghjzPQ$c>T[v2Tiԉ/\PYY_vo W%[粯xoƕ!.ܫ1PS^9S&P9ztfdt>[?2y-S?:y|\Ye%Qg|r^f`t~+ա"˓"<6z˟5^DS~dD-E4RG5jnvou|4=AƔ!_Qjg0ÐKGHrt[0$z[k-qKq e ߱EWPĖGٹ}UK{sG(%^T^TEum.u'XP:A)Uxv*-XO<ƇR!BugpIvb}H? 3i6'h\"IJ]Fv˯네Aj?s_YÏmNW)xB7,+ݱՖo>h\Y_ =vE=;M/h+V5 ͎F DDq: HEH=3JDm(V506|횞 xi;MKKRU;_qCjOSbT''_1s({wB>C(,3mpcW86zc_uMKnxv=?ݸ۹wΰ?T7c&w2Ex`گ CI?@lRsgb70P\4x ̲%OfH(~*o4`v:.mݰj?s;>>T\+nhҶIRŭ&0>NJ2B/Y+!{A9 :\٣;*mD­Yn\OfTئeI]PH` ϑZ !Eyͺ3;:slȳ,>WFiBA9A |ז{дf 30)B~=cHTe;olYnjsGg*tWm~5C#dgS'+c˨2淟a94_ fXyhA*c_ DmJXwGXuYbN2dOlԦ7}l}>2E ZmiIrHo|*Ee)ᬑ2+[WSHO״f3 0tejf|ztu0g/Nϡ05PJ*juwiwYfవ_P<:8Q)SWgc-imc'VIe]h}m;Sb 9,%sCt+n/gLBBD,v:nȐ)qrѭS@QUA Eu{{ nASVzD"qQpExc6EZxj0j}P46>樅V(؁sx*vYՑb x RUY^f55SL3.S"fvnGqX[쪿%6 Q5@87 s*f +8ۼ^E],B0 6~ 0C}]vwbو.ja0B*aFkz si/Uf<-Ip.\EւE- |2n.U<$x ɸhUԫrI׆CT*P}NW6SdwWt䮓%`R&%Y ^^DSe% )HD&o'f~(k㐍(xG!웚p2܅y62 ̞lb131 פH&"éxɊWl(Glh%DH@F~C^S7clB툓"(͑PA!LIп?_)qCt (IaNa8YlGa]* ]"'íXtX`u0eH S۶@C̷5=k؛5计{Cm 3k:h]'nQ4"n=*Ҧ5+">.+6 W% ?qɇYiD*1?IeOYz # E7! ($)` uc'EuU_H!U\f%HQME;)QK Tfy 0{Oe\Y jTB Shk@()E89r5yl*=[n7z_hIt5dʄ"eupx뢓"I[)W}3#C d}KM;cHH A*c,'jG}IJc<ѭ6qܫJgÑ}X"S S4c L'9<)?98\xi@]#) ~3L@AԩIZ;IL? ,:})%fEA(j|`%-?(;YP[f-ESy͐"68 # ֵ, -.cɄ-,"m~l`]lm $λR9҂A*I#SEl/0ݓǎ^\WaU. c;{wkutüg+Nݭ|فi=aX2j$uS,A*8, ,9i=|+ECU })ǀbe)PՈmEVЁETj*"G m"h8BF{9I.|Lx v _Q B\06t]W悋+c "Nj" uu |իn!LL&j)8H;jEDDH[>ťI| Vkv߰78w]!gln^v3GwOko̔xܪ8Q ;]Jpv)UG>ZCe APܣ&]M-cK6/'*dsqQ(H/Kh:,nĴD.0!dH CULHO:\hcش=_,E^&B;_.( IHY"}`FZ֞Zc&%Ⱦ:ųƛ~ y̵=bD]pku~q3\"'aN߈z;S!HN/}b] CH$z(&YDVs]Vŀl05,'QVA77"eLDF$EWO/Ϸ#E Xj/see\tMbާ2#]$)t'%()$[ IDAT$9ﭯ+xv  4P#O^ʋ2iWr5#=S Z0&w9 +FïWkIUcklHE+mߕ\H#/@)nEhG}Glى=(%QD",bQ%E ^M$KB sE÷TV1QKL̦M)|(0M 50:W %aY3UUueĸ)".AU&xXXY /@#$ڐCLIT.f\@ }ob$B5t?eWu.Z2>+O)#HCÂZ@8-W}[$8jJ ҈N(*$5b{%8UjkH#y`Me"p /sC\ļ@3,,=h3; H"%[xy+pBB;褑5N$ H۾?$~ ڱV;dyCaVd%+$(`BPUF(-!8YA<=DR"tuFv|ݼL&yKes*T 2RZ'' 6H`I_X(PBűRWLNҠ$+nN WK\%{ݺT^'bR.Reb5")I"J*B88q;TAU7dN07FpD !~W gKn(+<K1?}=sNUdWA9dq"$Yed NA;_@F*PD`"K&1@MW^Wz=gd~ΧeX"*#]O%m]鶨aOs=e@Qԋӂ`=[It -D"'D 8]O&8t 2]G$ֈ U({zd$!H PC{L9r;g+蚒 E#*Bxlẻ b)KI"*Bg^Q {|oON&!6 7v/G]CH$u*UMm_;b⅙'f-HHdeȯ{ʫD\#4kQnJ5_cb>7 D*kH AVP#)6Y.ۿSiiHkUPH|&1`HI!(:pPe!HNSRYɫѴSp ^5^(0O'-!:&]nZ.X/aEKNBY]WW&JFzǧ>I$Ib&wY؀I_@`)O4i((]1q KQY1}JUce LH(DW՚?5^BYS'T)t1MK#HRII$I`A_3R1/FkL &x؞*6lz!]U|PA#RlaX7F X|8E OKJc>2tHvl\2Q&Zskc]/Yܫda0sWWT­ :R%vN4\!J/ ^8pb.T( Wr9B BW)tglAt- c V )vnDF \X/ b"ЮuХSq@ +fNc@Hl*Yq +!!$+EXI"7S8MDr@ S:rE,)XLu jj2 s}1q=7BR$\9N%k{2_FҥbYID<\Ӱ WHN2N1k1/ІEqFTus26 yE\W~ u`NEt/QDN}![#F`DUaAMY04Awa(h?z̜p>c-kcȢȐm#ITwˈh dDìc e,ha tk+EdB3K2'MDڬ8J g/8&o<2';^/.tEJpbǷЕGvyxE4Y엀&YUE]G5~u.q!UbӸ,YQp,} ֆҮNSrFu&.!״F) kmI IL[Zsq7n"ŴoX;)d֞uڑndžv#`Ȭz ٞ~0 C@Cv3abg{g៊LJqڽNP}S}äWAqYHYPxl,FIRe4QPY .YAn8@I9qH!V :%Z9*'D@/`W Qt 5? y$B *F9- ׭v#YL$!zXHY24R ŮUg#,SlX$mE*;5:cG_"ii׫%if?i񉓹\cl$Nr %5!`|hg=;s=e046<鳟ϐOW`!`lh0Ǡ\wBx>;,cfq1 O6*G)CןhU }]r eDbҢ6`0>v+g`03'ąS<>48>48>Sͪ _dXە:^Yċ\wco& VI~& 0c|lA12+b >V] b>>WHY|3kdIf>H({0Jx|W;)A 1?6063EF,if~c¶`{|KlLJvd{}>`DmbK5 & jCp^B$HFџEH[QvR 3HVRַFT/R1Gmqo $p٫.jdqB($oq\&1C/砍0=/6*r,_o-C i8_7e(sVYg b1 xŻwhgf1>S,cY-3>sbl({ Enߜ4n/tz7ג H?4Mb1KUT 9#Ӈ9zGDlǜ#s Fb. RG/ۙߑSp嗃p)$7f< )CU0qpXxhlGZvKB{W Q51~,k\]')M'bZBŪhU0ٮuC;љ^71@?۵nbxGp= JgI 2T{)*g6" ;drU fta^2P5=. @{oDP&t `iS)"&TKV=+Co4ɮPu$M , R/Hf#EVuܕH1F`۟i0+Ȼv)Dmaʅ,ダՌaͭ 916 [71Hes!ƞsH6nbAd{l u;u3*Ÿ$Oe+ Ԅgָ|ہykBaDDB"]VB1du]wٮ ?O>!&v ߈ŝ fv(iOwFeu{YdG%A C'Fd3d1-p,n܀Y(g*{ 'f E?yX: I}װtr/`󟳹"ݖk`WxJ"%ժ[ԝm܅@!`f9G"<9z\&=)k1{B`u.w$ FMLY`lqVÅL/U~{%uX>ԣJ:6f4TJwNй0D*.@D 1q,UEqb {%:0a^s+JRQ$Ltm'KHq*GD9IЙsu3r벭&['s#2ᘌg)6$)&djMn<)Aщ8rtkOfFuضmS?^RwkM@\B^P}DoUptnVdGL*U]RJ+Kvk6'X5(vBE}9tLN.^[pp> ?J46gI]=!QRZ/$g!*QLr#3J^ ]u\:=g+f_:1׬0;ujNgmna=]*0!N}{<,ۛdp`p3BueضlzC`DZv{l1s6Dcg &'ƶŐ8ۺ><6A77ۺabt;qIM$&ƶ!ګF$19l'Nd[9FLb)kMzlfbd6q=P?I00w[s}+E^fQKbط=5 mE$gBl M*'ŏ r Eh1?yȪl->8A^>J9yG/,g߈ $UmZįWs-A#82!ɾeLaV2rdnV< {^XkH"3a" l2%l뀐Q] wD#6V~ʭW >(OaU"d[㞖&I66(.ycσ.c\?&vrNhe.("XBhZ BTKHtJ5-+FNh-+H# G\j!Pg^&`ը)Ւ }KIk)yE$Q+Hb%tVl'$HҪa'),ʖa?^,z,P("y i$'TX FR 520 X4Q0LIredReb6<&?lDzmvxr6r`xb]ibldž}Od;7@f;ܿMG;}O8LUAy]NPR(j%?2 ,܉0FXvRP_f)Ư wdeEU"9Lde-)^ *#S58inB+gHejL̓H; nՍ5s'7m;0Ap?)+DQh"bfwu_kS!dQM1=.&A >e˔Qq(!E\@A']Qc32w$s&Ǝgۚ2\(5ӱD{&ӱ>e;68oν']cg&:×XoW'; _spcJ/Gaiˡuѫ/Fy}Y `8ٿfn6De7 UG0pǛ7}qKwdg}߰vCg~ovak>޷ݭs燃BKR#׮]\MOA͓L; ߼I IDATySW>Ѝ2`,j[f[Tz-Ar\bnk?%m{z⚊(MY{[xRh@mu;oџFs ՕB (%>Q[]ܱtm0@ܺȋ(G0YC,ڢ- 7*!%#}1KsۼeͲ5K0|KV3e89sq 7\[]u6|DY+[6ܲG1lH)m8;>X=ޘoPJ몫ykd-^@ +IԼyS}wYU:,(Cfz/6T-'KKx[6usk [5nKh"-z.͏ K٢_(dbLI:|KC{ղ <4x<2ZWS%Tkn@ߚelmei A3JZR9ڬ{G]MԕMS;YAIRF+aօYeS-7tR>K{]Bf]P)%elJߢ0H)e"==(I>O;" ]orv-C#O' 8tGI b0@~|ݷ>}ښ[np>3[ 侭&okާ'nS= Zu-j%/gppM}~''K c'?W}?_ gTC»~“?AÏ~S"X%%y_|q Nd-b3x; I?x#_yPlC ~w8CڇDh]y^f0?edKnM]zёSGm?,ῠ?Hc̅gqtc ?*(,Z? kV>;C3tۍg >-C 22kߺ|:>[֭]f=Jqq?I,Fo8xhl󖽼llH/B`kW<޷99|5k+%g@@s!h1wMLXk_!V]g. Wns3PZho<ӱAtlL +a̵*u2Y/E٥332[ݘؘvCxOk22n`!ӱ<+ӱS$TI+fiLoX4P&bT69bx~ 5Ksm5U c m\2)tK~U;yA޻onHUHvK`ׁ߲+m0p ]Gd%Q$ JŕCc:9i4$Ƞ v{7VqXBp"?hr gVriǽ@j]HgI8Oneɣ[S8ȷUe`>s| .WMw b,ΝG-+& ڏZGrAݿ }^ TasI 䒢\1{5N5.|oy-p$ h}Aq;!w6kYsJ(AKY{JxBA/&Y/&<P qGtݷrC7 ,׬ݼ[@";nv .HRg#,2TɅ@4YOv|ym7\ZZ$:˅T[]w3ny \k[ݰvH92#Ӷ1|Čt%*w=,'IThk@?8- |-$P i-5Qqg~*]pw#yCmuek~3om[KuGd:{_^\Qvue()XHlWh-.&yku latՕ?Ŀ0߻:P)^sSPK:{;n^5fq$C aV墒$ǰ^w?<r Gxs;&} _l afÏy7VWVWvcÏei9vz煢(2A9:~kV/LtÊLի,kՃF]V9/1sm_XCGF_w:7?[.yd~[?wfO~ꍛSL'GϴmC:̍?;˿ oȴ^`rdKXg654-o= +}%0 ՔCrLMc[)_֤遯;r1/궈U3w~ ? 6C5DVHb%RB>1j<'<ΈT6Ylgo~l {ǭ#Na! }_|䉷ݼ*RnnÏ!'j0kc%-V)au4*#~?o$`B'X[{,Yw77ӶQG'/͞)Xly|u*%,Χӿox_:gNP2m'G㧲ӅnWK- 2mȴmKPdoJZXW6F`^ܹ. e_EU:Gw^wLs(eJ.Z}p/};;zH uAD`d>Scm(eEzq">؃߉:~>N9~$8؝oi/>SJԇ+rl~l_d%+o|0 M;?ڬ[nYu!*xGP XN,mz)q`q5,G9?wΈ*{js3u{-a`}V^afgVirI뮱|>9roJI,3hρc?ّbbCff8dS?>ys:  6po095z=b[TuL_<5ϟ"WČmx=Ӻ{X*Q0.աoiN퉐|.N6HΧ^CW~W0!Uy˰5Xע*YTU4/pv2duح,N% dda۽eLufWl]ٖ\!ɖJv=RBk4W^GU33t &ݐB'$E7 I%iV^t2q+,+e[g;{/w9{K0k'>ɏʻng6QJL=,cmtӝ\✦N=%@^!WkV_OW0euREwbirsG~j41BDo7|9pΒT͞8އ_e$,2N~Ggգ?:?wqv>7|@_ݞ03G,16W$xH%~2QV_[quI3Hg?=/=!$.]tf(77^>{(‰׏, ΟʱťM@}#؋IMQh^M(\"j3!"YX׿|3ko,X,hK$[o'"N1|<Ǔ d`X v$K/#0\68W|?fէ@BR~.,[?/sYy/%W8" _>ćS#^>}磏3^k#DxA;#n7g/v"N~ǣ|}2;>$4{HGnξZ|_tSvG&ق6;p+_yP⵹w??yǠTނE)ɬ?pp$"ӷؓשlP8@'k{C |"+B/×}/ݻ˪"paqO}ڵ'Oŕ2PoK=}F.a!O辻w%9YxIg=}gQ}͎;uouE2 `{e2ѧ|-TopخCm;ݺx-hZ숳鮴 F@Gܦo[9$$Fo}ҵZt-BsjZ{eډggOM-G8r<jRճE\K-->bmxEnW'Fsf/ɏh&鷠)| 1&у1b)8 E ,~?Y%OӲ/x <^WO2'~K7Ky\gIY4~,.=O}?Kpٶp<}pu=Ά tO(䐐U:1_6P)RH*,[?K+k_wÏ{Vn@ĵz?Wo` !j O=zijs<޾ʎ?{[gI(C&`BY+-JS/-, {ɂmfZK S>uK?5  &ݳdA-S9EmLKmZqڂrqbF"}V^iC?D :YHB/g>gkֿ7?K]v^|EJ1O뚥Q L'']&49dE@U~B 9n7ȁ0u'C߷=^LGbKW1{y&~#o߹}#;f/^߾kyp3mll6[͎z66JUbl*jYV:5Ga8{=#P2{Ϟ|nGb5{j=ٓϡo{ϞxJ>!99;c h.v r.`bqKc˶¯5,˩,Ә%:Y$q1#*j)"DDfZtn~Zts~{VWזo,эr|?2ZNH^㹺&DAES?[UN3KQ&˙C %,|w#> k`XF\-Q*av(d"}6t./b[ź$JZJZ_;0m1~K8i?OعKgc-FRR4saq.`B~ #,r ! h)naވ.yn˕ 2'l>3]drۤ,dV' w=L2V IF26ԋk>fg\\YxI)2-F4ClX&rzm]T"eTzVsVQB"cי6iUܿboj28ٓڶ-nn&=t'-QGbbz_B]0^]b8'^} uWLphe ^D"^uΑ,-U&Dj"(oEґcaݷx if#g28٩lM|XMBB# c Iw)\F$7"wg㴶YK8f2Bɛ^TsjDT syq.l{1 2_e8iz:qݵiȤ9* +*WZBas^K\H8_?w"ma}Id۾ó-)AD*.L=r=8}x2J0_pphω7,a+e[v)`gO.` In̒} ~}1c@49J=-Cڥ- /۪҆08~vV0empyu*4b!fI2,%v? { qgG 8rcۦN&+N[237:8fs0 Lh"WlIp ֮ߠ۴b_Are,YxmY%TtsW]ZJt =4!m{! |H(KzWl~4q!ڶ\(>m7o+N>*}j'0@AJ ]Eer<\r6y%H('(-K9_b*Wa YE1䄎Q >쬳ۆDK>^(WJ_+ٯ6υ'!=%kb.CaH&}j,d^qgʓh(ʄҪO|+D8A&@vijV @d0Xzq锪&M Sp?5AYpCB pkp6 ˴n P+m_-B !#>RBq5_MfB]Cŝ:vP8ȯY KCf*?m¬ŏ$]Vm.\:oh!TUd$'K @|f ah/^zrjA&C7YK>;-N3 v lʢEx"dCdim^iG)X4 D,IV0$-K`U;2"!IhFq-F^)?}vߪE`âɪbhB5>!ON C[HHN+7!ϙOM2cDfA5P^Sk%Nt"hqC`= 3e3f(>ŒaE5+*+KNH*[ʧb[ `n>Fz; ' ΐ Nf ,t>'\ZNRGHVW7B "V^󨄓&.0aVSP:,>.7~ϵɝ߿ IDAToea`vpȃZުul!\7HqEm-j 6)753knI>&咔CBM+uaG'~EL٬0irSǷ;Ƕ=~:C0.3F !x3$M./>{* ^[ܗ[|/#{Jk~ *Q9\{Hr|_vvbWKGчxK׶ݱÑV\5R6R/Tp:Z"<8I$޾ pXLϞnu>*>\ʨ]WJVawKq,0{`"ѾQ`'yw+IsYaյlu`! 4im̃⑩d$:y2#8OfT/XYT~wj~xp)e3{.oqHRJ>qa`\" cZ5;&RxpU_qiZQT~r1:Rez&BWLXa\.v*74E0nC%*PN ؔƷ!#,3 UX` ױ. %UGÊcݡ S95R6 [,RpmyHx/$0BJ*eWѪSsmb53>ND{2٨DдbFWM޹ c˕L&!zG^jCS)5U ʼ@15!NW a]&);EK qAaDMYc:?z#)fsΡ7#D /§ :띃+@IRNac! 2H8 i ]oБ\#| nr4/qǘ$ hb+AFf;b7%5EcmQ[8sOƶɃ;}\ͺ ݬʇMiR$N$Fx,AJj" p쪢\1e΂gV-9iڰ~vFiJRjw 9߬e3Lh Z~@ TY{ nͺY3EؓaB,% l@-kXC :ֲ t035ڃe0hF$> Lru?Mvl^[bCgS g$GH[ZWX&-)6@Z* 6,$huDuF,Q@pf2'33CN'|z"ϱvs. 41-9n KJGPDhL@GCg8%>=#ÖJiOE`|ڊ5ypcM4!Ϗ,E4\ەJp zHL8LόO 1oUcJI|)|2xyz؃K_* @l lX҂I+nذ9|ٱщ(DuQ_q;rk #qZx /.!d:2EZRIJ1[R;/+ iMPCLCؿW"aYik"*xG .r#C{$\Qgϼvpg/hɇ⇝_͝9hCD4w(?bjq!!ɥ7^ت»O2U#%ٹ/XsםXIN)I{Ge*Ic)o :!!6`Nm}>;/kV4^;_Ao<$B&g{*-3V|d|oSxG\骲ξ Jj$v0_Tx"!B0X3'LNlЉY&zQp t`&5OC]֋/("b@oFLfј|3tHSFVTϱ/5db&1o2O㒥aG KMAdd_D(0K A^$3* $3 k,ŋׄ!h^iT$\GgHūBr MϰU Aј|pQ;bcA85JN ipx;{HwhALjy`s N>*W D4/`JV0IV_P:*DŇP(L9乄A|.ImxhCbH8i(3;DX}Q}j,wD3˄asB‚r]} 88~L!I U6_HE˜KoDQFb@!3,fAWjvG]8dx 0IȎr→Hb~ LRlLD@Fck/5/`Zkίz;si.Ђ4W D8x:3L@Ϯ#-9y_F3$3 :X ۨc9rD"\#sGb &¬L f 2Zc38`dGn%Rzt@ ˜VHUuvbg9֤ȩ!䡅4+D;0 0T Ç'Va#ѱpcHɷ,QWPfC˦gt}K/L\76waj76?6X{[g|?"e(7)VS/g$'G뽝Y3f/j j)zojCUm ^K>.KEhتy`igFe"ƮP6\$.&Xt:~V?5v?І 4vߏ< aiy 9N* Scp?c*fPS@f1as$-`vVco+/K' `JW肕{zoƳc~<ҵw=O'4*\u+lFv̠6(0U @T NS!>JLo*[ä($/L&iD.\ⒿRN+$'h[N0{5JY8 Dn\Vj5IF@YG;pƨvZUv`?@.XKlIʕYg/2k.8] `gd`~B @8#!AHJY,%rloOlcOlWVxqqq2P> $P&(ri}1>? Ō-C$|rįC 5wLNV#c i䳊PhREInlF.tU0IbCH'*^PCJ'-8(e&2/=YD#;pe4.eс$ęYvlc*S)zͬN\ FD'kTײg-au0t}ǿ90ГsD?=߷T(BD$W~{Ym1ř{?uaekZn}p7W^x [624XSu!fD^BdKoS?.]N&1%?=Sw<='_羮w|#~ =l'҅d_),\ ?$+mJMSX.䊊*$8E- K\D`9bh  rϟ}QZefLOt)]wBv0>m̝gvc+EKArC.͊ZO0Ǿ`) xTp7 =dhQ~%"/}.ʡV;Rb]6,@ m;Ӥ6&XD4p~;.cg_xٗ?RCzϾT ?57?CDI"S/4=ks+T*͝=`L;q$j=6i^^QD9}!sfwB`F;C$Y3CSq 4tEķ4&O 4i_< }X;0`ajvt-']e/>/qcsb&"S/5&qcvb{ѩG+Rgq:cDԘ8T ]&?V(v֘iL6:;`h2%VÍD榎ǟkL?֡(ܘ:!Wnqe}5sNj84?u\CtqET8,h_?^ .~r߇߼g-,|K.0l2&6LqR K5Sah9n.EqdBO%O?okAKŞҔ`. Lٛř:ݸx`v$Jx)NBʦ 'mJjC$fbC%y!CƂ!cRjLJ_{X!" #9v:+a1!AB2?=݉|b~D20q?ݘ:WId``msg7i9? \܎+-v *~E_dlDΛɟ\1ӎRbjNyu!-ٓQC #x7?ҡzCy?}?8&.p ϬKi~H̤(go/<>LhZm /,eOGb d!]BF&ǽ~~rgb3;-LP$9JcԱC7?L\;$w:V, Uq OG!GK~ęK[L|PZn G1o,.6$LBWi~O_p8(3͊}ݓ!T%˂wc~ŻX 09VBav:@2;6$"iGb+Gtv uxӿ}co?|1T`Eo|giKco;V; 1 p. aUjURL-١|=Nj7$1~h~꘾Աp4?u\C槎 3KBvO3ܹĹ)sH[GKO?㝅řp&.@PI|; Hcװ4F)Pc0ݢmI&^n9e*Ɏ!)dn;\MR)}-@yMW>; Cӿ޿.,ȕ`)-(Exm>XX^ɴ}kFqxE^޷W>Ï1KoHȋ?R. oq2'B,*ј` ͟;N,xD71v0D40qPs/x#;^nz^?l>2*w_:v0~10~(ʳm\/>nr!;CTJ#CFbcd z9@0oxoG"͈sѺޤZ>?`֦eq^bzq&o9r."J%/]%Ieݠ[mz]=A"]sAz?#B>V1xkV,yOrGc۵v#C1TtUIQc|/)sNCء$JuԬL'Q͍s/Ic,&40vkfEc>pc`W30~Y?PGTz*0cbS]sR}@н%i 2٩LctYK){*ޘrK20v nX,a= _݀߀Dsv'> FA Ia)p6#* cE IDAT$9#jsO|'>w4m>>+3x8GCWI J̀m9VYJOoY,ɜ%93dmg%a>m0HL01.Z.y} ؁,ኟqx\pWaHS,['\%F^; 2ɢϖJb#CŔY}`@x@;'|`@|rw|4 lJD˫<7 (,TrZ?ͥ?w6}:3ߢѺU\mΌO} ٩+kƇGi|fݼ }`d0#'Ɗ$m#CeՈ;`ݚ8bTWdym:svdE#,9B)h|]o,6$R4]e$?>l[>(+,{us(ꭣm4oa6 bbh-xh 6Mmj՟f|+7֗WU+gԇ~~2.(O? R[0_=~?+_{E_vzSʪ;R-s@JmB%` AEs$@|ܿf$d $<3%`2)њdZ;r\SHm*GktsRF fzp>,!(KѲ(K9IP>N\9M #R rI03e!wx2 avx xCxl [܆,E@h -pp؉_ ?JD4]g?gy[~V?̗ 1yL%F=@^U$v0'@DU;.Ae${ j` @/oWK/xBΥD,4X*~3nT[>B!,YR`w A̶"3402'{ݘDu4MЛ]j:}(@Joiwث֪ 1g1LAXZ;nL_فVVl\Iف{޼q5g$o'eAe'$w0߽oP /HKB9ෂmagIpY 鏑 P6D&fQMBqapXg2Gh?MFl!1}̓%v0_ [wcZK\ExLAs0CvQDB0@-`j8b\|zTZDЖ@g %L.~a3 Fz+RTog %s |`fF H/~P9M |4 .4V;f@ ,,pOE . +E#1sQ=~3XHHG>V(zXJX&TX ''_&@*xET0m5U'j!E(:0 ,Fy,34΋;&`m6[DW[o^9K;'hcl}x"asl}x3gI( ~ML Լz><_B3SwN_ߜY^eW͙)}eӗ﹫okZ][]^[YҬ'fHH3.FS bڸ'PZE>4}}xXw 敩V3;TՆcUܼr>{clmx"Tzbҿ6 OHD+SWkFZY][^[Z$f-wٴ ,G'Ctv6C/\7bW%$`4X|,5>fo!A LќqRYl`MexƉ%ن=\J|j^b-1A,E`ED%bǥglw؈b5 \!c#D(@ed'#.S ѝaiZ,^ݻruNܘD"7/\2_S|Ʊ>4޼2EB+gkiOpN'->m\jLmLټ2ռ2՜9?$4Ӡv͋H* uwm c$ҌbrVA(hx;7Jt8~L@}A"o{Ƞ"6ʁ(< E$#;HpеȜL6fKWi0M,D<8I9o<7-s $$W(|LqȤ (. *DvAG\`T\`[Tošʰ@Z2B34*`Otgznr<ֻw'Ob:P|㕭w\E]̙cjKvɁ|ٍ̳}41B" ٬lTcV-i{ ?H'/N;o?K q\+Ni!7Rufv۸:ձc\Xh1" Dy\}h \w/ۍSqxA*7u`e2G:'!$#rf(x ֐FkRE֏`"l+#ᆻA| ( /(EBr:#0&/xj`_\5R $CJ*2JB̥2ʂZHQ_>XV!+ a `P3_2:i$\V`H^sL @j|]x-W2~[#td R9 Py3< }U|cOt5gS}8!]HD+k^-@w7 s}h|9XRQ.GTx ՊMo"4IgfI. S+qC 76]LjkƟ*%JrZ`T4k)!vHg_z+!l.pm,BY*) ٭wv=v~\4 A\fHhH4!얼)RS˹RCYbu&zgJҪWvgIBD[܉QurS)CcxŎxD͙Cci\j}ǘ.1"UkzGgd]w9͙=A=ofՕoKTú645ԇrEK,KY2uvIez'a./!gbPfpMTmU)K- TR6tH5>jR)#>#e\ֻ'nqp(kZ:h65n5`x $+{WPSյi؎0] LE\!BKۻXA)h|r.0}y.2cx*lH9 3N yU:pa^mi7 =M;W V* e+($kKϑ8h\VLz2bY L3yEB ck1̰)!g%%Za`*ͻ-ʵiPf9Fʩ`FOgRM(*yZ}m>s.ʌ,ٽϖ;1!,DL{oꖻk S# =aXlKG N ƌ &5AL2#5L!_Z9,ϙ-*ي1і;LPeW-I6_ӻY>T2<8}<ڎ{DB~*ks;wvt//~/N\1 wXnM-ZBYX;'ޫZwO/oBT8TˎxLU4r[xf>n vr|7~%z!{qf1+@ G 2B)$jKbl-w퇎E"{óY`%nrKD0IQ!8O?B{%j^Rvл.\@²xᛗyȰ#Bh-]9MDuhT==}U RH3 1tws&ALH;pHr6X%8H~k*Za&L5 /P.}JfXXyʮ NB*gh83x dL_Fbgeup\(ō W)tf { W@@o"SҎb3}'lM(e> ٪ B)qAaiE'U0( p@*K;=sܹvYMnt^i̴6im{D-TwHP.K"ۥl80ﲍpVIg !H_Dj$} qrAp}jl<.$,XrsSASusd_͙#a&;PLbߴ47n3m3bAƈK2~`J80ï+ZbHgBO$xǡꕬƝ.OX7X= ~%̷216 |v kqZGgwGW7Sҕ};PN[M&7zi͑ U[)rrkeumuY$ 5BO_*je~g8.!UAWu2e"jGGwW+bήZQHz.V3.=[::zpO s,\Ʌ`qVp#HzzttŪ8Z-LYC)[]K7C*G]#rPuJ6VWזr>L` $W@R C@*n(:5Z_cdfVˑ7ysb(rz*{X,E +)JF!ZtLmyR@s)s=Q_<;;VMb ՘Yњ uU*T x+K7(<"7Oms6=n::)A?zsu"gK%@׷U?3Br_wx&.ZGmTRk²Q%@L@+TmQHnl_.ϼڹe!$ <}цq %hm6ac| vE-ВĴ^'5| h !%XmժJj6kzPZ%b%[(T$TjUGGr/DA&:'JIHHF}.!e&bZmm,_ ӜHi'싨8vPCA/[lo~s2I u 6mX 6 K<#_!nI{ {@AҔie 4@1[Bi#w}[5wxGGnYٰ T*ՠ TMn1*\-펜e}|1"r^G( R[ ;9Wv"*MU\8_6ZKIzVv(j!~];{-e0(w i&ر9ys+Do`ZQ"p$pk=^b$a0bf]03Cr9[r}W.N㸝OA6@N/w}]g1S-ijKPeC" EfޭfB5 wvw:لPM 34ZaVZ;{iSٛeE<}w?;-^8νBxTC 7|olw Nǿ߹%y;7,e S iLm%*YZYP4!U8$1)Y0q pI,5~2l6N>q[aIPfT"@WF;;{V+ iphTc.k濜CAX6=e:^N+.Jצ(YTD@IG!E\J@Gea8~F̪̀hɟ萞"P~&Y+`.WPMbLERhx,-PsmBR@ID$DDA-ujIKIsRuty=fksDD[FpԖѽgOȟ IDAT߹78 NoZnx+Wy;gX6[7qClvU*^˸J&E&)6aI"Vgg!`ǴF34]&Tvozj:DfEXVWzVa/ ,_WetpERVjfӮ d5J Ղq|$37Yp;mK)ĥ ##p1(蠊& ȨOWפ ,LbtaQ ߵp H~BBle]J_)\Iw۽=o~ssJAʍݽA$BLTjFkŚjn\Xܬ7a!"j576dee …uҚ{aNG'N I35m}e*6C..ԶնSX3:,aism~Q:Iw֞F-&VzjY+ҽQe\>?7Cb`|aG3l,F MB+WS=t &*:Hz*L9T`隤yZk$'>Rx#6ЎV׮~U솲4zFX_#\ Kz2k֖WodAf$Z!ņz;6]ⴋU6\Vv:0ʺ|qѻB\B?;`EtĒ'{$jqNƕhqQ,\<]@.,D?7`)b$ Z>EL[F.L$ѽ@$t\YVk]膸 \P"yGh$[!-oND$* W7iZ];4c/+fqF%K=cJiI3|W-ź ڬ`jCjٜ.PRї&VI+K7[MI\؇`fsV;ol9)59֣ŵ%e0B>Uշ5k-";8PX"$pt|-Ha{.to7t,+3;gxLq+AscM!Ƅ"M$I:c 7='18vi]}8t4V677|j3.,jumĂF b+jK|kNrwL"]9SvM-"z46A$EQa*O+pJt믁Is$7zWf3j<Ԟ1J9!* EZ@\ʘdiƷnq,Q+H=QU%x7PlvRݺ8 HX0T[hBkXl,EeR諴6i}w{3("CqGet2uL"#3N*j67VcG2sHz'Zž DFqZ,?0@c i׸ܖc"%s]х66KIBI,BI\5D, 'f%3呵K,]EJ'*]JEM#ki pI|vl8Ċ\+Ph e(#h/gC~!\Lf,.ǡ& a K6 0!Tx-ilNja8zldv_DWA5-lsyVO]]=]=P ]\wXL-4(/޽ZH8 uZع_P:O2'pg]fKOL* |0*QZ~dx^i#zr6˳|:,CdD@ً_ɇ q31ֿ̦ZB]U:;]=RwHXYmuk<´ %?MMM٦D0JM% ki_R7DIHP?%'nQUqREG4p_6Z%"p(˼ B6TQ o ŰkԩU6VqoJt6dI'f ~R}#w-NFSɲȡ ɮ<8;`F{൉9۴[.?'{i\cEΤOQ?~ LѷԪdON]&BX$z|IHa4rp} z!Bx i<2gD.` FGv>~s#lܙKF'Wz7 ߮PRPlPckRඓ@qb$EY96e\0 aeiY`-(iѧn"U9 C};l"]G(ɊXks3 e N(}$B‡)RWq^,]zn|@M.e%^M٪04c/<Aҏ^R%v+H9s vB b@$ Y W$NmNVhSɵe6JuY]YX[0HhTe}٬$y)uvvmn1a}@qRuPWf!˷+)ȓ0ښM);$unM>p)# BUsH`KSm=eF{,QKuAf'!Q"h˂"OS .5 Og xQOxH~謪 Vu$KJWOʒ̂.37vlnTk5Օo_ʳyU[F~)Z-Їv*B-0#v*vU *H-vfp -iEJY>g&Fz֧{sg~]%QD3([/1.bXEĀE}A /EǗ E`dLoHے_h0=8Cfqiy1t{$QO3ΎޞJF(]]rҹE-#bVHOg^;qdF2 B&JtQp|tQyXU]󁐮!uk Ƨ h`GTL%}2M.O54 t@]f,%E'My ±/(RPTL#lCEcbK]E&1 4ԓ*,3]qyV]ΓeRMNc4qHZ`a&ACYD@[@{FdutՑbOE/"U^%ڮW@GܣR6v;ގONNnIZ~TN.G%}ic w0aw9BG0D NA)c8nEmրY P%J U|#\(00  @ t%6Dxл5Y-͢Щ+$y=npI@DssuQXQ 9*᜔u);"ֆ̗Gmݿxd6B +5^Z!#'HkC]xQDɨ LҰ˕oGTÜŰaWɨwlAlitwvR*"uJ r.6?݉itn^nD`]b AJQ\? z2R:7ww sNAa )pRd2&tuZNʎzg{kwKE.@xHu[c O2Ц(dFcAFtͱgUD6?^2rԨM*OUV DU+rwVV-J*&"c((ʤiLsyK#aMf@0ֆ%t_P_XB8ζ:'KFw2tQo6E+x{!# QɈfmkU!>4Wm3$(TguBt:/@3]Q|mji]m>2X4FU @Ĥs%$"11`IE+QI㱝u{ZDēN5+tqs@% #\Fx'$pv`z(q0ṈZT /$nq & Hޚh ~Kѓ޲5Hbu]:5)TP\͢iUX+V u4Bu5KFra =# ۆlg76/[I_FDm$V0 4K6bRpb0Cx=! z{;ZAXԾBH^NANV0C`u:j-;A[ZCX=9^Q0PIw:Zҹyv"] c9եlꠞ-d8=Q!W3 Da xN8?E1IipPCh9ì&*+k {Ev)g!3-caȐiGii.)W!LMwp xJTU.uus ,ˁ%$*㹶DTlĽ2Ack绽 ~n}Pk-˲0ғAjض/!`:g tf ?, ݕo,`m*1#ƵG*&Ug&tB2ՒB\ ݇Z)d uw'Zm@%(ͦ"=n"tH0]n+~`(D /q6\ZWgHP89ŀ}`$=N lOss]"tE'my¢r&(=w/f2T OK3\̅XXG;i஺RD\s#Cd(/Eaֲc A؂4Vzu=8vm5iWJ/SOwg㫝Źʲn=JR9&gedYP)k rhk*,b~GcHg[sc͵B^9e6Tn\r)]A U \&RĮI9ACZ9bO[# B鞥?J'!Ocwuuu"TWϪίRt3)Ism{RdZU'cނ,g*,K@07]J œT3}ɴ5٫{ii̍67` 68-ө892mMmM/kI͍VeL5͚= EQB(EyD&S\WpќzxĨh(cW~'gcC( #14{WU(\C^ =ڧ5chk9ٙ`ɼjǥ:G:0/> jR*1.}Nb[1hvPQVLJůċM(䜊8QtLJDt,r$GD: PfGR^09RVyqĶE%{ս= j6@`UݗM[ؒː N7Q0>xs PeEAiS/A% e%E L#g`7 U&!&+5< dLiG&wE+-%2 b*pDD@WE`ѨUQ%en|AZ IDAT6A5!Ǫx~&V2ZRpOJ8MkEK@UDWi߆^X 3BOZ BQ {]tDi I@E`"䈙1bbEZu9Q8[ gDQBDm/\4b$/`sV*b#hKTv!`.JOJu6`ێrLʇ+q's4GA s#H)ũ!T*ܼ Fg@WV&@%CJJI3iP} z=ũ@WML1ċ?jՁl43!1 iz<1)P eqAX% k4$&kP] ڛ*zk1nbk^$p w*'HV{k`9FIb n6kU2݉UjeGC r4I*''''-B$ Z%0*ie?ʆL\:ҡl/ +vlUREv Yf=;G+|$ܯ]$X`{m-!wf91=ұ6ф6+@͍l.{FROnU%X(')D );sxIG(Xہ$_>@ڃ#c$fQ,߹yͬd%Nҧ^dm9q2Ҋΰ*M=vAQIg{3a*̐ǁ).}l$6O)9&Zq)Wx@V Y0R0ytȬDM!b P. tϪā.)+¥5 2vzF0b-YTR>. },1] P5Tw16P=Sbp=i^U5ܠh+׃2KZBzD) 8H 1ndNjDw)!u̯L'6[JER,[؞ H {eq&*"zEp@] UUv9f-Bo ϭqb˧; f$Icm+"[y'$!b;K"@E &0*:!o~aX8U{a|γXIKZ^ynQlUymeQgsRtWoؖ~۶Ĥr$q$vCp׀tFiotеi,d$0al- 9FY@%͊v źOJUY8$B;d@U54$\18ܶI qYVlāk7f-rG^{ @̌* CP(,uC3դa1Ѯ":Y."@u{f/°'EH0}) zee(5촨J7XPDtnEʯPO4"<^2DNUQNjr1;Z*sˁ-PF\vN3") p~Jru e=M7s,fN?ɀ!us!a N+7/5K{ ZW{,>.l9HU+/Ӌw(q} 5vA9# ATÜ@pՄҨuĔ8zIXguAV"(Lc}Е  @\I\Y42}5Gh֝[ @IS{#!puA?}1/P&26mQ~HJMv=.WvՀ<`!u͋~8@#up.NLY0Qk_ yysJnLgg{ ; 8?D` R$!dUEZ^Ð8!%FV6- K:(,,bܐ=قc_i"NݛAVz[4t+ψ/@F6 6`ѺU)E##KFٓ~ 3@S@&y @nuTaÆuAk0)0M.J (:V p+vGVC0SQsEgV? Umv%J P=S(I{T s(IxըGn) #M^GRKԄ࢒ͱ/l?{xA  RhH+`H"% 9(c'.(͍EE%j"Q꽘m$'"($vaͱ`ZZ0$ ldQ+0T: E_\9QxGa,XhXù $q.E*+huur“'+";@YUqÌH5+jXц\Z|yt9fF" ;g!e~qѶDzUBu^1+*꣈5 y(PaW\q3+7XA dFHDP+՚Z\ 2gma' 0NgY^τamR6vvK-,bl#TK^p';Z"uulI d1*8Slf"+9ҧBR~Ul,Bʁ#d0" OwOOp eɗ6=emT-8 zq*JD"[p3ЁzV;ԒVi h4  "()#V_b@`~?8E=m\(2x@E7*@oB, 3QLU=S>cfZ-Û:zHgL B@hc?c<]hdQ vcJ pm̺a48jZl?xhPszm joA(}DJPWxWxĞa2>P/*ͨ/Ұ ڮ"d< "Z*,;~&](uh:bkUO4dK{0LVj gsKf0}+ѐf]:QKs3C'$Z1tv,oAXOdVbPen'y]5q>s8%Y X>ewYkf:`` )0e7CM=8)pPZjGnWRgnli A>\":OF% 7<İ :XvzSд5ה 15T=Nť`|,-NHEmQuP$l$Xbt_ [[(֊ la(5Uiq"FF(8Z0Kuԩ6ND|2jRcXc*-E^JhqhWXMW*t_<$+pIT7li~ P.vУ!aѰ 2s+uqNjzYGيƩ܅@= )&DZ*'qAsz MBt 0B$:P6?+lAbrEki?LY]&LDtk^l8#0+ݡG/LFޭ\%vx$V=FH,¢4;P οAC2eE@1Ŝ;x`Y?M9鈫PPnQlQ 5sF|ҠĖp7nyb(kW-jD@Ʌ|'HDŽҦ]* X6БNl;pxk;px9vI({%0Oeu'"%$U `gFe3Vꬲ2f m֝pvȥkvUZAySb%;R$XbɂXb%,X%X`%XbN/[xɓ'y5seL4buoYu6nzdiή6ݲm5o/jR;v>eйΩrfԪJ"jljް+oeO^ .7J|gOO?^Y^Vw-w'YI6s1OC^~q9W]6{*~xӚLv3OYނ_Sɓ˟ZUykk_t6sU˗q5z*J9g}fncSs?4\V /ܾcg&N<,+fjaKW"zmz |˞ƾ.vNM T]!k/SSez+'ٗcۍ& Vb9cZׇ@d}ZޮX5 ]qR`y5K_qb4<=V& VbVXbyG{ҽBMɩUv2,~zM͘ZU>{ΐZ/=bIҽ?j+̆6J/KL>f9}ɉ%JM #^("zt˶0b؊cOOy5b gzfS6alLӧjljux&ި d͙=t圚K̞iӧW3Yu9+ Q^Vji_H\7{ʠ?J9,Xx@o,[6\^V5jW3s4\1o5vr۵Ne/j'!/[pM+W1o69µ۵f+9ԎɉUJ+&ګ>{}]סY-KmΚ> SA';v]n)p-]1.+S*-^hϹya\Y Zz񨰿LGY%ׯX[~cBf mgLaW޴Ƹ<ݵpݬ&+/+slxy5sf2؊cz]T޼u۠qv}֮;d޵kvmj6%G`~<,w4oΜ~ 6Ә՛i mr)ت4 ƒo'wZUK+gVϫ;( |I|mnv_Y^V`-gM5X 1]hi^OBAgN\}\914pAX*@7;vf^{i;BRL؏ۿ%/esfHuozU΁Y$Yx<[5~_قQ="~޼u0r%+زټ>BtLNmXx+͋4S`"CK7Ra7pVO4KU+umIMưݦ-^y7dzV^MKgWr8G͞&N}"m#ey;{g{۠ԪJoл,m̞@&גWɓ'ͩyv5IHx޵Xn՟ZUc*F߾z%Q!Bcv 0Oi _wӰ`,/+]p\Zu6lt 7 !^kSvO(l̕Ny$[D@BkoԌU˗ZgjU%aS1:UVjW-_H7y/ 0>l:M-aʙ6nBWR[]o M*K5~m 0)/۰ kWRnϋYi={͟V-_m vS W-+<389ϩZU~)'% ?:h5 Amy%&0\pż 7yɓ'y-5+f ${4^.O<lL13u8boi u.{!M_|iЛZUi.d]H;g_W_1,>M8{le /ZD]EK9~i4L7R`| ?Yf0l|x|N/Zb?po30"ڰx@2̋ wq޾cgO\fOV^cGc=f տKW >q眳p 7yd~xn^|l8_ټuy5sN~k(h: {SȱDpmjUe?@Kr>C#F'O4ԪJqxsy?·3b;&dJM1 J0NA2 %!abG䴍JI,Y;BmL$Ē0K,K,dJ,KK,A5gpYbޚ~|bɂػT%?rcsssS<{Gy`cw&Obɂa 2t:Ǿ9rÇ)ߜڞ TbɂζA>ޮ@ ?o>3==ծ_Ƨw}am¸1rK߿ûr;-IYՆ z*u<󝫯*,(P;owٽw}aǞ~/nu'PXXpòov0*,(7#wm_/eY`5gqz˯L1EKl{wK3ծ/Ͽ'7U^fUXPp?^woSOW~yN*_}'v=x@k]w=e͞5~O>uӿqc*y=ZUcuO{o'І ]Wbl pt,oj_Z1>?ĿJn =7 oGrq'N?v%3r q}Ww>ٟo?nغ/.f٦{43_&B>P{KOxz>Ϝw~λdanXuÏj^߼5;߻֩~/u/ |ڿ\w.e{+z''N?ofT=3?v@DU?s.]hv5}O:kvg=gEz?n3,sy<"Z=3?9P|QIDATg|T[]T?瞟ZU[u&;~~Ɵ{vd~yEfsҔsϪ<4Ynz E7z'W9,Cqǜtu7"!%%W_ü_xY/7>0cÏ /}?6ڰJ,YI[tg2O=ׯμyhom߱;پcoy?OD3yQkfYwF"UWR;bǜt<~ɧwфStg2O<ѮGM-=ˏ[y`cFʫkﹿWzzzZ㊈üs/yqahG-qmA_WbɂnͯUIPTʹg|D$~ޞW _˲#/=J, avGNK~\ܮ/vuk^ODOGDw>~)2J?}b:Xe^|jʙoư',X>鄉I>|wm\ᡬk_v7/V|;'MukDT} "n/~c/>0nE`8C)'{?'t;z2=Tv8ֻ6/V~g= ?rgTa8aO, =?m=y[5wO`O};~>YyG0n7o]o)\gϚ9߹n֚/~[_q~qƦy!'o5c'?q>nևej}'_`݂;#'Mlv*_}Krmw"(c⦟-&#d: ԰;o˯<#̪i#d2 /?=y]Ē+{O[R%L,Ē+K,YK,dJ,KK,A[[5xIENDB`qdevelop-v0.28/resources/images/error.png0000755000175000017500000000141511362261070017544 0ustar jlbrdjlbrdPNG  IHDRasRGBbKGD pHYs  tIME k/IDAT8˅]kTW>{3d01&m%҄`T"*FiEK/J x#A O魠^AP1#&Nd3ٻS?B7˳ֻ# Fo7CN?9v(~cty:0Zd,g'BH'5X Ld}W.[__/ Bc Fr=#|j`X=:ÁbI.~ݶ BPꔄpw K.gO&}; Nn68W&ϊIK eH"&lnzAbЧIޡ~2 ԱV1SSu<ΕqKtG8XʡxdՕU}9;Y &?EKW~~iW$}"fgAB@t2zW[mP@P ƦkۭU}e| J]@ڍ#-ÌQ %}wg-17Z_Ҙ_ 5UpdY;bXa cRvyzOR[05ev٘{ȠB5DRm˻,զ]l)OF#2Aտw/^[W=T!C LeY_M<IENDB`qdevelop-v0.28/resources/images/compile.png0000644000175000017500000000152511362261070020042 0ustar jlbrdjlbrdPNG  IHDR\tIME _ pHYsN N }gAMA aIDATxڕT=hA~s,2Nr+#`s`e: H*i,X C3 ,wZHvQ]sޛ ɃaD/#]G)8N.|n7z=cس<| ٭7CiBՎP8ƭhxRsɢHamDJd( J|g^Ȓu7w (= Y %ecx ү`^OP.r\)0t\)cW1CEqsf}ŒEydnvHR ׮\Jˆ am:^Q.MEHPE[?:f K?f8Ū7 [jꖳԋe6a;BB 6%D,Ac A(=R`cEz{ ceHchhb7\qsj[s͹ABSUq!8@3}z۞&TrA03ţY;>~( I~Vt!pp4fPn nZ~nc}1" Np8LLx**kE2[O!kߒd!ԗnOo 6zDbAI/C~xe~20}jKGP"9\iY(OTH3QlKtޭ01K?gaq  hA}@}/>?z. j(ˊۏ \SkU=.n*xU K]5wQQQS~H3RhQe3>CwWb6ী#@0:K״ "@H%|`M;y](mӋ><(y}8/|0egUYIENDB`qdevelop-v0.28/resources/images/indente.png0000644000175000017500000000151011362261070020032 0ustar jlbrdjlbrdPNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe< PLTEȌ̧~x_BeGТڲ߳gnjʥ}kyW^ҬУ]fHy_Cʦ}ө{ܶoO컆ޭӢϩڭ{֞ᲀ淃ʕ{aDĠxȟs]qQۣċjK]轎dۤiƟt߷—z`CҨ{]oONJmMڭ|mMšyرʐۦȒjϞ}Yױ渆Р칃gIh؎pPo`tRNSsmCBIDATxb'!>/ B&A D"h@!A<@0 4Ⱋ@pa 8l&. *``cbaWa4 $\T|1 &>M'wk+.~o8t%*܏DK?R *PV60 C m"X1@@v n2fX|@p rIeOI! @p p&@LD0E4 @S5@4 @M &YcOf׍IENDB`qdevelop-v0.28/resources/images/dbgmemview.png0000644000175000017500000000023211362261070020532 0ustar jlbrdjlbrdPNG  IHDRnbKGD]SIDATxA  ~r!Eh=8fO`aR3׃*ԃLdD0 k'IrDeo~l+N-Nwr9P+IENDB`qdevelop-v0.28/resources/images/window_nofullscreen.png0000755000175000017500000000163711362261070022507 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<1IDATxb?-@XM{69 ~ 4 R? ~}Z@, Cݍ~b`O ߡ ~= 4?ĥ'а_ 7? FbC(@,|%@ FfFпȂ@/,^@, rGa0ϰ@1!_r6?g1G-D~@ g%P?`i _b-÷@o5ZW1Y(R@(A}Go ?k(JJϲ[Hrb}dhhG$aTE X]̵ pi<,."PYM#:bA HU1 ̯3pU#d(sxPf`c`dl(X-T {B$Eyذx5102010 s0B & (%!7CP\(ucF1/0B `NVl#Xy#43/0,A 3Pb?`X0 +Ɔ{?~3`b4_IXK?!4"8HCÙDo=@F BIENDB`qdevelop-v0.28/resources/images/qrc.png0000644000175000017500000000247111362261070017200 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 ;× _/Ɠ1| _@ ~/ϳl@ `,Bi.K" p4 MBxa+,>Sܹ,y 6* aFf& f16\`6(@j_`0ÿ@ ^^3! r0?|gx=ϟf`eegdd``eXL }0 XgN: ~G_~11XXX0 4n@a|-3+0\ KgqM) B `1033 @(32S0b6bxpv_ 3:cxUFOALTgҋ 3@ip2ÛS _0 "/! $pjgKA211@.FYČAKAlUPbܹ ?d`&A^d@ʊ +ee_0W g] @("ߟ>1|b``x Ͱ&aC%I>1×.1˭g$uk aȷG1 P 97'6LddHpf)lй92'CͅI' @(.4yyyo3͛ W30 s<Â8s00Lf`8papTOݛ7?T_*!Y@nz@$4Sd&@1a++XXkkKI1d00ћA}w됔ۀCff: .F]-8O}v#R P BՌ е@@A.zY@4׃ 2 0" X ϱ~jIENDB`qdevelop-v0.28/resources/images/stop.png0000644000175000017500000000213111362261070017371 0ustar jlbrdjlbrdPNG  IHDRw=gAMA abKGD pHYs ?@"tIME ,3J`IDATxoE?;k;6P@ zIQR5"URrRA!!RKisz Tш&;OWY{;;awu'ֻ;}o<n>tӽ0g_`I& (P">&>8XiP{ev#`&zhhͫW96>qr83rivx^)C?HD) B1߸Gz.ZE #I]rt[ $H?J2D6N ,CS0}ݗ!0O^o. *$:&'+//.!σpwMU*lS *P$^"% Őwo$q 7o.IwlHtq!7vl6/~8] 'k͹2%:%۵(`l%xItiy޺xS0.0pѢEf4vK/%WgשϦfD/VR2D ARR,ُ?@ö;o"KEd 2]sӟ~ Qq8*xnf#qg?j8ЎCv4( Z -qvy_,BsN<5kw,U/ !~=ӏ\fE*JL3 L /Z=am\]S)#Vb2ͽt|\, VyS@0M Jspj\X]|(ѵLbO r +* ˽L:ށWo.? HV`r eZ!˜oй' Axom~"wm:ZKܯ ?Mx*&#@8@] @.NgnBF⏕Cv}IENDB`qdevelop-v0.28/resources/images/CVpublic_meth.png0000644000175000017500000000050011362261070021126 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը^IDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~% 1~z3MaLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK4LII430NN3HNKLL3KJ347H31L _L3IENDB`qdevelop-v0.28/resources/images/debugger.png0000644000175000017500000000230011362261070020166 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGDC pHYs  ~tIME=!=IDATxݓmLWS*i-t8f)(-/NA;42d@ Y\nܖ{MLdfɆ[%sLA8TGPP; ɶ'7߹fMfMYyt+%3*djؾ};.L"D$;\ҥO.jI:;vphkk`0WIJNb{xl<<)))`0$iV9ًEfQ5O ,R#q,d2ى(F6fffr废=gC?mq]F#N3tMśwCkf OyZOu~?nj2<%99pUUn`*zx[sF Y%hK;i?sH@MM GvFAA 466b6x0 AI${j01}Y;d⫔ZDY]qDPaz mjq2@4*n=Z'4RX)'\B41 2ce!/% XK<ta@3HNvqbКLtjZsuq_޲S"K78b`_Q|bPUޜ./ҁdAI9A)=/. ͇t¡IENDB`qdevelop-v0.28/resources/images/configure.png0000644000175000017500000000251411362261070020372 0ustar jlbrdjlbrdPNG  IHDR!-bKGDC pHYs  tIME5IDATx]LW`qHFs1`q\f&bev3f1:@La&& 4)_VhEJ;lم-Qܞ>sVv{`$ݳ. 0[M+Uw+V,\PZ1O"`$ˊA@UU p"tnMHJJ>/RJ}v[1_22i&,ˣe+DLLLPg4(U꺎j~w:꘰Z =Ϭ^=zT !x(+$6m[>n HPb=#YQbuioڊtQV~?=,$dKKH%NKq5MR_F Q1\sgӑtA(ŝz =%-'DR_ꨩ\(I/hmm'==q'򷥡SA(c|`_/MvV3@ϝ-aC@mEaa!v'Oܹc"NvP(^?H2k4ur|WɭFccHQsnn?t_pEvJKK)** @.LmxkVn'Py`NpյH1[Ŵ9Dۏ$&&~͆ {O__ok39Nt[-unA#&奿PPP VZ+oϛ\G2#E.C8 oġɼ,Ex) xfxRvT݁1,uA59L^ L k*UjGM5#蛛ӨЉ˲X%qȐGxu yNL|$P  Ђ/4ǖjY,@K r0\r-pLCq#> X0.0KAEN5A\ `L84\ZP|* )7T > &6Հ@d0T-)md8 X1P rV?IENDB`qdevelop-v0.28/resources/images/CVprivate_meth.png0000644000175000017500000000053311362261070021330 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըzIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW 9W "V1smLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ2zTXtSignaturex3K2NHMN121KIH54K324J2NM6L26J ՛IENDB`qdevelop-v0.28/resources/images/next.png0000644000175000017500000000243711362261070017373 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs ,tIME 'VnIDATxڍk\E?4IhMZ[FRPQUA "*U" W b5X4mif{􇶶/3g>s93l^MlkSvnVt<~E<0"Ltd?GO/j$[CW_|fGxw*"A+A&wݞ;ٶa]Dv|\H](2^PA<=:Vd ¶6$Rpo1?-ӡr\_un@ў!Tw擃%)hJ:ܻ1ɑ5rkFKsn&웉7̄*6rψ,DZHgV:woH%%CZOGG55$Z˲s"$]ޝ|vloRkŭ5Q,j!9AeH'$J),R P>0S*0R VAAQ:X)X0餵L27L27sdZa9"{`DtM{<A=z@QU46^\?]ifexa4 G)>OWvEg1f \\!* $z׼ڣjg~Vo_hEibҝ-Ss&2Ik81O&8g6לry&֥˸rYM\&MsE*%84VY'5ydž y*dQ01d0[K?"MBgge:YJT7ΒHwb$z'u6G7ؽ 6.Ϩ[&g{\~g܃"f(Sf~4W@_~)~嗔'XYwWYn_)核X8cs|s$] {j'm^@DсUA9YJiq{c@i]&OMQMCu?bUTE~ާkA 5kL>'K`z`G} "f0Ÿ006@X} #[n{OQ=z  b}sYf~O"zUUj mmvnoGFEQ|m nl[~w<>xЙpaVZTePmx8\G]m\nΙ7w_>yhᑙȽEA] em:T BdZvnsf~amOGIENDB`qdevelop-v0.28/resources/images/CVpublic_slot.png0000644000175000017500000000051111362261070021154 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըgIDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~%<&(gxl aE7LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex35L3546IKIN17663L50I43502547J53Gf%IENDB`qdevelop-v0.28/resources/images/CVglobal_meth.png0000644000175000017500000000052611362261070021120 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըtIDATxc`0>@P!5@3a.ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~% 1~% b=]XLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK442K6320NMH6J2H202M36L107LRe:IENDB`qdevelop-v0.28/resources/images/dbgvar.png0000644000175000017500000000021511362261070017652 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըBIDATxc``PL8E%D+`rTu+d : Bޥ(0kIENDB`qdevelop-v0.28/resources/images/CVprivate_slot.png0000644000175000017500000000054411362261070021356 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW k"ʯHjpΆ!ltLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK4HHM23JM5704MJK1K23NIM5L3NN2& lDhIENDB`qdevelop-v0.28/resources/images/CVglobal_var.png0000644000175000017500000000047111362261070020752 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըWIDATxc`0>@P!5 < E^f0& fdL!X5o)KY3Y0L30Lta+LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK6J43N162OMLN1503MNNH20475I3145lWIENDB`qdevelop-v0.28/resources/images/designer.png0000644000175000017500000000437611362261070020221 0ustar jlbrdjlbrdPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATXíiUtfR(  $(1O %@PѸ K֦vZh ]2̽w]B-==<9JDPJd{|w^n|'.Lhy ( ?dj5+R떯Nq%+5*R(Mg-ьRjM1}{+8-w0h*:ʧowZΔ'숞fGt])DED>3.l.Q#Be֧hՎtoke.j5ӨUL:c?;3'MO쎫JaE_z9/e8P (a%)ǂzN ƙDf7ṍk4~3y/M☝9#RJTDO*@X P(2X9X%x@:Ȧ<$0>ƙXbES,VHf[Rc2⟿q`B!ς 4,"i]X6V>KDCŠFDL4JjtQ7QEoc:Cf .m(Wpaa>]_=q(*ZX|٪yY 9S|/*;ygr=E!ͺD6[2^uhM7Av| Dh gJZ9ALokns,YY07òZ,vԊ8p7 ,ZؽhzW=WsАpP)WIF(pxg/:pK^n |j%?o pZ345z~}?DuJ=[سg"Oҿ#?V.C*^ Y:Cf2y򶡋=\74*%jF)Lϰ,1qD̢~˓xٿX, G#_P4}15W1:x:JLu8 `q7>[ളR\vMgI3?#=Fl!a(6jE&ne[!fZkv%O$D|%ɯnaCB2~gb__[_KX؄#͘u_oPn]."Rx;ߎh1ION9$ IENDB`qdevelop-v0.28/resources/images/CVprotected_meth.png0000644000175000017500000000053211362261070021646 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըxIDATxc`0>R`^ 1kV͠pgwbY3>0 3c8nњ t"?H+`+Ɍ2H'LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKL670HI4LL4JLI3635L6J2ML1~>IENDB`qdevelop-v0.28/resources/images/build.png0000644000175000017500000000177211362261070017515 0ustar jlbrdjlbrdPNG  IHDR\tIME  #k pHYs  d_gAMA aIDATxڥUK\E=g> FL`Du!&@ЍAQHp'&$ ~vYea!B\8Z%DD WW{_OGX݇]uV7Դ?.zOo D_'߹N2,PZpW>"t"91RKSITT }z~zZf@0N9ca0b8COuYq$'0zf0ZG݈f7uVy Dr!qp"!$|K)܄-\IJR#m 'zdP1P,:x %*26 b! " u3:F+g*6#Y9nwKj`~I4t#͑8y/iJs} å IҋM_ B1+rldP*l~RjύjۜG1N22`~89fmf (`GYXdOIb;ek3xu<ңlq2˞j-)Pu\ر P9c!^27n-t@V,{"kʔAPᮯpb9C@+0˱=2GVQDYKTp7VL6Fn"$2GK_<5kREV6&GO MV Iצ> *[X*UnjAAE`ׂ8<έ,@Nnji 4PZ(IhxˑHO1a x16N^]˙1:ۉjxٴY7}@A膙51<z*-çG;isןw)[g-3{='&>iW hlJE@?5ӣNrRi#L} N KZFw7['Y6{{2`;uО4I5Ij^)J}CW<[@8fѝ^ѹQ&+fg)~Xx2:0kNJ9DpfZ(ef h"6El.P2 r Mvݡt|+Rd7r#qi(Ie4Eu03_x05 􈡉r(Hbءw]ߖRiY>(|]K&^ xW7˯ T|NcUļvOW]|;aIpjqvŰ"Ր`=b@ߓxJ{]UXY0a Uk',l &}OmPLUIENDB`qdevelop-v0.28/resources/images/dbgnextinst.png0000644000175000017500000000031711362261070020741 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxRA0+/=O@1FnmW耯dXSL+z C \2S@BQL:qf2Ǘko`ozV¡!c" "N'{W" u&-sCSIENDB`qdevelop-v0.28/resources/images/window_fullscreen.png0000755000175000017500000000162011362261070022142 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<"IDATxb?-@XM{69 ~ 4 R? ~}Z@, Cݍ~b`O ߡ ~= 4?ĥ'а_ 47? FbC(@,|%@ FfFпȂ@/,^@, rGa0ϰ@Rw7i.vV2W`-ri(3Ϳ(( fef`a`cQ@ `$) (R@L`e\~ALQL׼ ,30H+00JI2YzI* .XtB7,4H6~4еJ ?sV,  &lY-v f ,ab3JDD4@!" Z(rm*b @1 _=g n .r/awϛms(@c_ L!X\>u߫ z |1 0(q XGo2 a_K2`/Z  },S? b? d؏_( ۤ`@E/hZ忒3BhEp6,3z iU@!1IENDB`qdevelop-v0.28/resources/images/CVprivate_enum.png0000644000175000017500000000050711362261070021340 0ustar jlbrdjlbrdPNG  IHDRhtIME  vA pHYsN N }gAMA aIDATxڍR0'aC;Suxև&}3d 'ЗHʺ#ܨIY_1P6֋,G˲Ku8>t|e>CY\#>آʐl"-$5p-\UMqfQ)vc>1lBp (\z$%8 v&_`_;jcq&%RG/ OCd.oK- nPe;).lQLy(6ߏLO@Y ۽F0E8Pi~|s[гVͲ"I_ӌPWApJkҶ:!.qZŠ;fx~|s^~8F|2uY0ag'`u ğȚ0,$g{vp?@>_r宎n|=~?psnyl7é$vEK(2⍧'&2mH,cQT\ OL"VS -al9m0?oT2a,',i&Jp Z}~)r=c"d j(,/X.l$@D0Ⱦ(W8 mAt\G"f kIgUus~snݪުO>ܪ[K{>K0˒Rv##<iHўOd1~;BȰ}k߬9&Wj:m=#m|'mc=0) {&>G};1{pppF38>DFTIX )YRdO%$@L'2!D)B cnfYMfz׻ݍ*? .Ƥ05)`!}k5X,U)R.0!\),F)rH J@J!B)A[IR=2ql Џ!!t'(N 98N{KsSN=ŷyj_c<4&I05}`˗-˭Xlaa``~ R+YPJB!Rd(SD F)R*!!D" L&B)!K tP6RJ70ƞkiiyg,PhXL ID@?*7Ӟ~晓œ(:QBd-9 M )0 ܠ8!(M &!R[ROh+B1 %b-@g##,h?(]矜`_ye„ hlM 1(χG ) ~ D_> (B7BRYc mq\ AR""ZZ0QC ,z)7L&cl`¤ U-&a@ym v޽3E/1sw98, 18 g,Ɣ{`}F Ba_ !$Бl@:+mH6#-@(R~"Ҡ2 iAA,D!"i@{3g?g1\& YJ0Ӻr˹š(Z*COϵZsǶ S1%?(_@̲|iЫY{KDJHAamxN@ k5 iJ8 dϦ.HO@lEW D5=f &, `ЅwA !IP 0 1߇cQ%_Sc%HB^3g?g05s ^q`ws+JRro6˂d@>c,RPۮ$ ԩM5haWZ$<@kjJ`SBkzhU4ꁞϚ؁I j0 8/nd[`aX+ن!{ ̛7W܌:A#~{b++, N ,X(@'^%PNhFzL pv%@F@5O4"$˔FT8IJ@ G ǡS@E՘a,"C2VJ3Q!ca}_ C_⪫Ek0^'^1 v-\Q(R=ZqXq]mX46,K1pBR=sDU<?+Ԧ<|Mn" sx2a )02R%W7%̗B"JI% )! ;u&B# Ub!'nA X^Ph1=~E~^nݻ{0Q|;GL&gkk2ZۓTPT!RqC2F:5vjL" c-*cPǶ9e Sh!Do)@MLA B(Kj^P>RhxHBƑ:]lIL"8euJ9P4=x]xY/K@oD-\R(-,KkrM|۲.lۆp'8J=K"V%U| D),V?с;2+CA f #" Q`Qn10@ {zwv"nD={{ C DC5hM@ !0 -t]P 8-e̦L}78 87?<(&3taaZe% ʨTJB >{y۷Cj3f@t)h:}1d[[AHYY" PqPBMq- q FKC| x2;Pu ^1.A/g_|@9\f9(ǖm2R9:_|Θ,'0%F|r"JC% QT`߾[ /"wȝ.yC,TTT*T&U&I м'=HEu@zJ { 47nϨ A-FG2TS~>aR$d >8ȸ.lE6UV&up/ +Ѡw46Jbi" eQ F?u'ףZ6%W"9Ȟr Zz& s?ցBJ 2B})!@\+xAPTP<<qo۾;r|Zk`LA/Zk}17nP4t܌9)&6I~&Q{uhZ*mE^*Q <un=kaë-Bq8/FۖqD#f&T!4>]85`&6vrT~ET*`}#}nN``߰@߿z뙽)ߖۙ r'Ifv):ŗN ?f K@o?jK瞇z5'(} `>Z:72Ajtj0aFa깩g0ۤAI5YC J(>*J7u7/;@=XA'&~}ӟ~w\R:֦2,F&Mrg:?R>Kmd(bq}A4Ttzx+V"hr+uY3g"ףs; Q&BӁQ J֏㸦$:C#%]ʾR _ P]=q~#48A# _.;X>b[VI;YI|L&6 ֹt73F6eH7+ ۋn gnyqTVF\Za55󰚛,s])ᴵ|"BFI d *k~0!z^@9^Z^x"$R@ +L[s &ŦHp}CXD%%< mguVg %8(@?{j cfpp]8:ؗmpݡJ'& ;L dS0D0>tvFa`A3MVz mXͰi`75jm1s0_wԖ~0P@44~wbq؋X29 -$itsQ0YV\=T A :irP(Jty|,Zmeok_*?BwD}m#{b^qG>&C&~>z@,TrSDT.\FRA\VLB>,qhK[~܋8./ ~Q:ME3_7B )qpOfm#˩ W\F.l߹=x>È5`G`O2Vfw?YT^Wz_=TR.ݘٯLl֭(nڼ_]&܌ܙKz%--@,A"$3Ma*TLt!zc eJ%T*T|_ }q>mn/~Ѐx 3* }q>5TLA6WBq6]L *77DŮ]sN @Eg!~ss'#w\>sm#t\x{?mi8Z/%JOC s|.] )H\f$R ]!m+84/e T*x 8ܜwu'b!pDO}꽕J׶w]dsn&RFr[q7EsSTNغu+z2]ݰV_U^.w 4{ GU~P>)mzfI*AUAw8 AHmտ _owoo!ȜZ䯺 #%"K>+nYVa+1T4JjKTanf2_~8Hc||>O]W.o-kz&ҟdfH&R9,ES6f=ìv؎m[a8*$r? ڹs9?x"R!`,Kמy~'I@2pd'3،=/l^J'!0)xЭm6;K.BL H&U@'CMt@\`e%TFѮ\6?!%|5A\m{x~&A.im&žL&\SrMM5&EƶرsGֲlΕPCI a55O=S_ 5? ~蛒1'kҙA~ -'.|r^c?3hz;@>R92)t2˶!ku/Yy&,岋/H/HⶒH!p@@]Rr,w4s٬2YU+O7fkxR;Ѿ}h^W?SO9,@]CjNE?l V#PQnJ)釠m @!4>A~P֓g);v ?RH"W>ei·f1Tg m g`q>{phK.(g!zp~cT M奡OX5Ƕ,s]egI?֫Kxil6? `mغe ӂ IDAT2+k>XL9d7eѩ9MGmh]tv&7q_놶OR}R}jynkE{jMF ," Inкg?Mct1X~w%1;<wd IPV˓%몹B IšBU 144tÕ_׿R{`s0vI/}` nY2Zg Okc;d~{oS.:bO.oimQ+hڲ?Tf,2,i/NRu;0߉VMK1}S ?u"Hj#fq AQLS . [3Fl_=|S2b^x.dOcDnST-9,+n`vd}B #>y嗗1Gᱸ߲U}I__57~.h~ ~"FiRۜϣ"ضu~i|}!f|R̹|Sy|,ԍ8׃0C;5m_֓_XŪ>lMG% ~9(LjT3du*Ofefjm߁w _LqkڜTeMvS-MA"O\s5KPz:,~ ϔ\sϟ&Ry2z\x3}u]䛛R ۶mæ_DOo/x+O{dJzk0唓A5Чtzɍ#Hq+aE)\Yud=!%VKJpq%D>f.j! SI2J!r~L&iHa=w'Sr5vlOxk*RfVo]ݽ7UcQ5ͭ5/*xϠNgrw ?C.NEs񅉯^_lbfRt{1sɛ!(D5C;Ӧe|*<>vYuYl͡~]Dl*߸ر3g.{@s RQ\fnX"0ϿnݺO=BK /?"ɘ.ݻ/أz3}Alڼ 188;&~cEh[xBOJ ~ 2ڜR- CkqU#3w\WiD$=S1a- -=e*$$ <˓%ID^~ 5 L zVa#7 '6A'S(:vpDEQu y?}Ϝs% !%}\;EQ›jݕ LcL#N77@6oBM(=nx>vM|>l--sĔŋ@uNx~@Y3#jK u:myj!l@շ"VT'L~ ߃u% o5WNUs8!1V#e% MK  :;_;xUW&}"F1k~/!"Lw޴oeթ}R*~ !(*N*0s pJ( נeAkxZ_k]H[DHKbLhke\]2JQ,K/]L}J4ɏ~tX(cofptQ]n~̲f75NUcҾaeي k~8sۑ? \ C;v$Q/ӯ(wx:SN\ V0B-&~GڅOP޾CM}.j ]@5"HXeM UWF)r,P! 9o'`?[{,?~$#\7kv;Kuql\%600-زEy\|!ܙ3 P`*$^կ ^7yBR;ue#?Cнl7l-W}OB\2}'EUl=V.AvڿDK`XncN vC q&748m[a}-OGۉE̽b}wo(Зڷ`c ;~0?0<$bC/nBr%[R? 5.Alz a}Od ^mP-$/+]=}`xmY-f4C;sh.e6ߙ nU*]7* =<;}:^r" ͉;-WR/[m R6"Ų&){6oF](J۶A$WcX= {c5@!HJ*rjmX)rc1OVޤLm޼ZBM40}]sd6cjd =* :::iS; wbgC;=%:K Aee܀?dpbZ879X.lYBBꁚa`W®.gYb-> HXqd"= ΄R0m 8-c8cM#Ir 4a `O͗DQunyٜzxv&~g-}tw`K"O۟5sߜwt>} Gy''~J8W֏Y]]ظl9<vue ̞?Ǽŋ% #T<Q3 o},#Ej_ٻEt͕5ZgH)U(Rq sC-1Aoy-ܲU͟ A =令ggWm+uUUޫ~Y( 18XĎ;!julOC?Oꉙv%I[JL=}1 cwn.!@P_{Co{;igNVֳpi!<|Pi/0uJ$=V|{"\BEA512^l6/A uT1J8R*ͯcs5RJaX. å˗-{7/Hn=aN7`t/~]]3Ǝ0&ds975їj8ESs3<(!(}NJ%}?k\r-5:3gcL"e[3|QpOWkgTƪO>2U!ꓐR pUW5_RG(? m-?އ_zr8pA 8"zPCīhҒ7aMgBQ؂@roD Aa Cxz@Rϙ3_W0|Ј '* Rz!8h2ත:SlV硧;oCTB} 񢶅C?O3zfK)UアZw-}(Ś{TW72mhjʣPZZp> MI菶Dv3g4p@5I@dt0uuu J#+`A,ٛnBqus6i#M#OS~qP(`;4 i )sΩNwR֓_ߴiQT ~{P6p982m#gY[6,-myBζ,x۶عe!O M- {?}uAF+o0F^C *CAFtQ@7u$fQ&-hZ WOs'G'B{VsΙ;K2<)q]X:0RTѱ;A(GfJO?IM_j `9gnׂ*QoY6(|E_"pڛ9YBRq YBF e%"2܂DzUDAUFJ)}` 0NA' 8Nƌ 4qM3]#+_Td&"F/_JHV7<۶u]?D ߸ xܹa" xl9aUt&~6HYeկ!B9w/O2 ZY˂9-l`SUTPײGs;v: _j-Rb6WHռ PʰPM(!i!`zb$3Fj gNWη}yWyN*oD7 QE::,> صsJC%{~w ŕןǘW;\R 3;:Tgcp-d c :3b|rb:p·¶*_<4k&(Q!?VkRqLeYTl, HP*G>r$Шc7mD8lmһ[ۧ}~s4E1ήn_5<.fTI1_w֬wHPk`/i>cYpzl@LI Ruc({:^3 DEwߜ'h[ ܠ~y)hHqBq| BR&hSn[i'=t]?׃;. ƶK]ǟ^B)fmO4y %i07ৠcF:v+-oSfC[CD)M)zW?(`[VHUπԩ;xbPJrrmǴ֪"U&Me47U4t\]wh hD sǎK(`e`RG Q'874TBGG22=݈|CSą*tFIuO/eJpۺu.ИV5NzxRE4OS Q,wzHFD_ 3O~ ~x'p9-j Gn?^OGOY馢^CL4a8<-Hlj(#t5'vۂ0.NfcYc 8ϱ=g| D;;ӦaE{ ~)eO>{fIk~҄X3CH?.oڌ+1q# Fbή MM8K~o1̿fXs l eO3Rʘ|rt"ZYLW\[=g$U{׮ui8IcY(:agW' Dg=.*5DoVquQ(ݧ*TJU 5ᇦR"(wJ7"N@І_}.Q*wP`Myu{qB(&ݲSېRt̤c ãQTc*+h Q#/HAmnY?kN1(!zQ,|nǴjnvRJψ}_3UJlV?:~]Qнb%jᩞ~`BGrjx`ݽ݅2(I̿_K9)[R'V<uk\R\w`BXVXm[^H(opꚨN鉾ܲ ^Ba}ݐR~|-oZ3f5^w7w $Rֲx"uo \.?%@uCүKH^C6'ǔX I&௾GCGOw/EKĤh`~L{b]gO031Y9Y"!ĂM/x8L_'$_|@$#axARA_n"J1-o?9['?E֭ kѲ,8:ũEO C⣁?eHH mnG򕈆_yG)C{T*(@K _"ۀ|_(҃i IDATHhxej;7<F+ Ժu烐L>6aAOuT:" P(jU7픓G֙:] ~e$ bia}IrUG *aYt"X6B?} [?n/A =rMMr|x# R&$ahE+L]矫j8WZV&0 a sB*E+WP0 F5`?zwgn[kE0_ д_ Y-͘\ck_S5RNjދg1<0uCԄaBE!w|+z }Hc #1Q͝K>Ejuf ɡICxԎO*Ll2kB[ё8rR} iDDH|[R]8UR"j^*4TRـe+!.ܴ׿C ͳll.H1eUI )T }LR <z<:.`Wp*)%2")J30HmͣҬӁJP0ν ގ/g3 /hƤ6 ("xA^a̋\Esg@['̺),JR 7e.q-x: مg"8颋 $t})?S=8 гr 5X.#w- r/%R0];#ݙBg&вnGۖm ͛q`:.@$LVs0aӨ ݶ 53RL$_3_ԝOJJ;6 L!b0Ǻ(Fˠ m.yyG $9F/o= S8Va3kAtm9qYG]!XS |x/8|`؁kK>l6I1beD T  AA}^ Gsv޽ۚg,$M e Aa``༰5 ]c3u~GD5,=Z/kY8a75U{~@ }?g Hu8)zVV *>жx59!U1ċ?>ɵo߁ےTsðCS9۷oF_`Dy3ͯ?,EP0} `jʹ(1JJ28XpHB)r~lr#_;ҋ&߀T*! #z(ɏ#&Pw0 Ygf r1͈q˶eeєcʔVضǶe˵ 5' T j4X f=﭅BjZ_=KJ O"0ONHu:*32 B( Չ56t;)@_a cH0(3^:rkkFoY* ͟BO?cwMws8?3siTZʕɤ$[~<σ̲abMK)!BaOJؖ-, RJQzG5%lHOtWWWWS.IZi)%]^Yx/]yu)7׃?RI&'(tԵ/5/prC߿hb͛JQX5t_z _ dzz |⛿A{x" Is;2se )cf:2uVZz@ljny)$&.N0=}8I0t1u}>AG3M#*ʋf#&?u5y15(bge{S ~] U+UJ"~>Gwǣf ÐjF=`u(:t)dU Pf5"QI]>;&gh{繒2Œ|Ӧ〔Z"ϓ$IS􋁯Ҍ馇zuRwOkDak cE+b3DtA6m23d.+Xᵷy(+LG,Y)2!c(& 3:q"Iʕa!@t]BV6Wq\\wرt)/'/>ͲcrpJxVߠT3aH=+sxQJY~v )2LȜ~qZvp*ʵV,iaO6A: 4RIrԟx q73Xqv5z,7vfRku@7FԦcv`q܂jC 3<2Tuv.(]u%!<;.r>r#K%|Sh'ɺ}}oi㤉B }R!fu'S"Ѯ.ˀRFQPUq|IT E?NΧ|9&ϐyJ'ȴj:z%}\{P>\'I=aZE8{ c391yllj E4ja9c%qqJ??oR2}{d#)J4gVp8M[e.I% PJw׉0 ?ykP>GWgJEV۷|brl_%R#L$a"eKyLKo0<2B~'g:.-YBoAv4RLCCHyO#5D(bI].FXLg}?Ssj4*gy96`>q\̶Wj[lyRj@ MTH=a&[$(oؠ_&{ع u)dv:x؁|Oos{y?(:: JAeBEtlXOqZ"61I'Deϭ_LLNF3tE?RoȜ~jNb~ݶ ^ *g.?xpvT(<෵82~C0y2V+X-?L=/;RQy->r~R<7G09I.Ly:) _Wr?~w]CGby&ioku=}ߠzR&&$1I~)RIGP }kQzFܮ.V}죐3<<ǡC ㄞof'?Iv60ǓpR$>DPqr XMTpaۨ3MU* 8ĝ8 7e|dBhJcUDaH$|j֯;9hW~{:^_|pz\.GggbB!Ov\e/>O0:.Ny_xygz̭P,t:;)tvvl2Ni$fdb VHdR߂_IEZejj Tb/AܮFػw1vnEZpF~cʤ!@(i$. rZNAӖ/eC$q|fxG?jJ]jasShjjLs)W*);Z:ի̎NY@7}7Y 1};G߳'>A7~ɽpMLU3 R1c(|݅R_M6?qL{[%K4Q)_ݝ(xk`j`qFk'Ie[sdhh͸-hz%m\CɎQ(nW;#gNW  RjkCge|\sT1h+f8Bx/lfDA,hL۞CjYz8xQ7A0$IDqDUW]t̐ED?y P(P, \K?u E_u&@LLN^dKza))($"p!"<#ܲ-]puOg-~Fʴv4=OC+82Bwfƶo'm @[{˖-X,Poycm5EA up\MqW 0`ph?GhJ"c15LNNw"q|B7MmB5 I.w B?amg%i&Ef 1q|~6򍧠L2$qD LjC}o'45WA03r|)-_Sq\'HSSO_ѥj*y]XH)SPm=p:׮@)Ơg07[jEB05I 44Lq*Lc:_*V*)eIAE([. ]ZJy?wvM@q<'Zgz +sQ5J)@È+Aɝ+YPflf=({/{v!T:)H@ '\z0oK.,|C<28] $CƬI{r c ua `#sh"u!Le/6ظ.R>a1O-Oo%LWsߡ+( A ~tJ{S.Mi˖8rCw;@c@c?-/sڙ VkL>>7'g$ю.8( q=NS* ( קM{m21ERn()?w-sS$Ѭ?u]ݭ 2+OWҹ%Ou]zz馭L(=(  ۿ·cW IDAT݆јe/VSԈIqrֽ Ƶ/k)vu5d~& =wbr+SԨg$qBGMkgZ'ɟ<,M:Kx|_ԗ'4OZ(8~cNDx!:(ڽ;ק;Z6t^!9}o mmGh0$IџPNm~ϿK?qgzH Dho%^Bׅp32V7Q u>3ptYc}0L0_8I g|BZڈ)_R l'ˁ0 ^0:}[:|Owr O![heފD[>glw ,t]pn5<36a z#(#cT+ƌпG#cwa!P墫n7BPݹO )Zt SS /]Lmf􇾖})("r]u=ĴF /Vxٟ| sm+VmCv*!2E) %?҉廻WeΩU|$ v|:MU4O^R߀:qQVӾ R Tu* hk+R,(t^x!hc0ASS8Ƃ_8|8OרS>ifX=[9,w޽H驩eg9R_w%mQz"'XK'v,:Qǵ:[i|ZYjZj)esյ>G(vuS6kfe{RLNL2>>R\ΧPkJE^'B(<]$#bG?J9S4hb$,"(JޔG=Qc摘:QJ(n 0MmOC'A8VgCQR)3ٿWm=@s. 3 ~*sQJP=x(XܬsƨV;wc z-]ezCu3Ĭ3DqTwŌG܆HI.`kVJ}`rs& M@_4W(Fgy[ovwDj7W*3gJu~ dsnXRSL@ePJuVM샂p@*+HFFZ:!P8mNLRm1d%;EW5/r/qø|_Ab;.8\f٣^,TN%?m() (Fc/9ԥ${#Q*m"md&$H5&ƽJtfBIY_v;pHZp#{:zaة\_ z={nzx" n6RAB>j~_on9n30)sNJ)1w#)kmfLw*@9~. <ݖFqsMS @)զԉ>М0CJnd#Zi鄜4u~Ov{q3јjQ~! 5W (:=tD5Լ?v㦓!2]_UC |ZhRn#t)ѿ+breJYȁ T4)o H  f eNSe.yio\FR֎邀?'G~f3S;vAK%H,8}Vdݺ)(*#>4qjCC(+h_Xsh_rg2QRm$/ \ADZu\EOd%0/4Ȧ9<0wڟ_iz12>-6 mx0L(DŽii9. sGdNСN* VHmcpL3 c{Z:S- ؉x&\ Eoo7k׮>®oȖ-TY*k37n9|o/K%^CeWP< SSLMO4?q ǡr;vQ;<[noZg􈵠E6"dl@hT 4wzJ솪i}vWI23Eg6=c_y?J1cgJkv: RtwuiE5Xv JsnnH3Ҳ !`to~azׯ3#xKWwKzqsoKm3EH $%eɷ:6> Qr~'"_1gB^=b ֯8 c=Bʦ6hYjp2Y3(`}-<=]xuvuՉp=ܫ$P1?NNq{6YD<R l_j74L毮;IH } 3X̦"3~Sw|܋%Sug 4z,`LVHTJfI8`fm%es˯YDHSni'<9E"އz,_N ׯ_KWgՑb'SZdhf8S%(;>a&{ 5rBz{)˗Dv::%݆DsMk'wșG:Xa"% :+ӭgJbtIyÓ3ZrG5Wk?w<԰)%L[fJsv~foM|1f E]:(#V,{%aHM2@:|,DjT/Jpd6qPL)bЊ(Sϼ+[>A됏`fƟAX`u hzڵ;I#l~ |_pDJ\$Oԧp]B^nhhXa@uFZc4yime EƙHs mc[N$"ie/**{A]4sLc':\v;ےOÜ  G,>#yd8R- 33U-gggl&AM@35JJ=[ F)E"e~J@" DCP;tu\Rv\> ^r}^{0ekZOg~ hʑys!Dgя/"bR6 !e[08,ё2H@`)O)8@%ԃפ zzi  _lg@ҥKN˗Q(|ivqG ΜQoH_4́ҕOA*?X<#"#3Z W+<'Fd ik_ccۇF8@Z@ǓIg"* *T\|ɬ@?'ϱbR֮ۘoϧ뼳NfVG(墁_ARE)ltYς+k@`ݥ+8"o|TRA`Lz$i@$t=$a(ݚK K2TlϠ Q^bl{|;cs${ܓNNQ)(۟=Jwc֗Rٺ?qBMzV*ֶ@U%H]dGc gݜ"+dwEDihvR _e3nl'M ; >;[ +UT2 paF MR0oۏO3טoq yՈ8dS35>I8IlqX=3)QfPR.)H86+n't*Rcߙ"$Su'LVB|1?9юD"|-(dl|"Tw 4QuXnC^[ZėjEkTeȈ8NJᥟ9΄?i+3ȁqk( a!qf~$?S~{U]R?JmET,رG6԰D=DZjp6\ޅR8Afxx h| я~gG悈Wӑ'8VA⫯ݍL)ӚfG:ȨHsnsNz&G8:F4>OLu&&& ꢒ*emx*׊#_d?<<¡Ç:C#Hhd{η{{זhȪo^ !L'T@Qi҆ь?2IPơdp` RJ! ?&I~Ju|Yw-cbr?J(&ǛXN}o̢&&@Ig;watLaqO<2PNmh /K_;Oh 2\I0uFQg8&}6i>(KSA&12xK N4=}J{߰U/Vo?(A5f-{, <9DMN2ͯ3v}8RufchBYB ҶnmZ*ۉhH3xCuj83*_% I1I9&2=$Ĥ+%˗tB Xo(ANg=y,y)_"RT*vKh¬ ~)DǮ?"RAvڃR| Z:?M3r< .M_kP')M޳c)Mʽ&W(XP Ćm6c8&C׳"8ivgX 0B!N.w ,Q3/w6Q@ :_W" #'ؿ r%qrFh+s R)%<7J)︃ak-r:zm3f u]:.$}vc'I;9D<= r|xtt8IHX @95I{4f~ ?}Y@^iu meYem@lr"P&׺ u֝$eP?뿙gyͨ_%V\s\i+FwwwbZB@xKoB)d7t3^[~bc;BlyM&|Gf6)(RZ0ۃnde14p ZvRٲmҢAWMNL~o/?q5k4(29܌z@NĝH F~֗lRwHS(ZE{QYmܚʄU֙dD6@Jd8$ ҄ E %Ys\'\`r3 `j3z GE9ET( 㷓Z"2*ɫ*wpk֬㔁߮+tã$ IDATuZʝ7_T ?Œ(B_`f,]V/˟v`wڋcZ0NA!Hv1(qy}ҕ}tj7v- 2(hoo;-:J(~w_%.&  W_pW/ykD[G|e35%7\>6ෳ,%vNf 6W?3^| g^#4WU̗3AJc(gma\rHꁃwz+?Yzq[m0PW]ފ蠭Ĺϡ{|.| qE%xPPXdϾi]Dii`Zz6dqo6ގ,'`Au+8&g bZx&J \u*EE <#*q-9jhj?DU{z9g!`w悋[Ĕ,.v6)qܶ6^:^GDO=IOP##i]ӱʕ8^sЩ|@OgׂN3y@*6X>w V൷#\TB82&'I,Ocw~_|mn܍dddK}?}\}+&''ҥKLzw8o6rgE)跾š;$P oJ( Sm2 ߾ ϞYм^}p7gD!;^7{810bK#%^>(saH%K~M({y46jHId+Up4aM4YiUMרgۀ˃1^3sn!(ЗD)򸞻_. ~,À-s0qLyi:y`YᖵV (<3S)@z% gѬ"}/d`=(> 9/C!>uёMXZs%'QJ"ers=BFT{Pc1hiCz΋/jZWש!q&' A!aA-35[Qw_";Io38֜6qPp;XQbr{GȨB19^Er睋R$۶btd(j#ݝ,]NJ( '̮{I*Գ5K'0}WּM:ϒfT%R}(؞B)J P.VTlEDS@Sǟy:'sa0 K.~[t/ÑN@{eS?zIl&@y8q뺸v vH{)S蚤b_, }pr7(0ÿDۗQDi΄L˴x#k~g۳p:xJ4޺uOfmd 0zY5 ffl0p<2b`,{{{ٷo{dy^8HT q4gPJ,~-mMge%M("3a^M:)mW_O4bLOy'"Uo~?<>DGG;`5So|,' Ʃj:cd7qQ3gPAc7!(IRЇ$$C} i?f3@}+~ѱ~q8I:Ϛ:]uuJ^;Lr;v!L,( w(Q M]}mtĶD3˯?\'ӧ=`ӟ_PsfГP`[Դ. BAffC}af?i?nd7VlkkKJ7ڄ utdq `k2)t%_ R]FNx矏t)q=g2 D!]Ti_fЕzr/F?8'g}KP25&gy/,EMUݖ-=[uJ)wwtth9Z`)~v砥4Ў>Y $!/M]YxVV+0a z2::Z0BP>:"L&/B4j!iE=twh0SGNF'Z$qlx˛Ef^3$qLgAosq,_.20{~ g_һ XJ\=UJ((s9<ףz޹׬w_rLQio\0 0]PCKKV/ յ)3>sL6R*Lʴm.)cmk@;Cx+nuZzFzSu6;0St{3e. %1@u]M)q  YH$DA[~/ ⧈toڔ0d 3]PTv了{JJ眃Zϣ?rt_4<&QFW_T4aRR494ϬM)^fO;9sz_02߹{mݝA IXܐ1bQfoXOAfGDH ,0*3:bq aKXtR{խsS*;$SUkuJ㽒Xf**j5ۡrR`OP f͚x{3Ē ,~h2Z@ ZL G"s̉Z8 ki7 "[bl߱JNӟyR->?[{ MW^up~dy72 a@הzT! V?0u0% 2J5 4}G #bȏa 'lAęGB!y*@dV(B9ZMm!w"pk`dBJ[uمrʫ`3Y}н~pg2ip֔?BX(Pj{GP0MkR)YņcArrYTIIi&_Nw]hTI(y{~nFH"UcM4ŗ ᇡ|䜑\ |NFl̔u%vso॒D1U=DGQ{e l9jg4M&S)nbu-Rf|C8w7+(J|5||@>"c;؟a?JF^~D1`ϩ+ D$o 2N=Q"18!ÒZ oǢ_.ї" Cr%BAqYEJ{Hpk< 3s C&Rk?G\XQ,En_G{e*[5Ш>"+u (306SzDV@QS8i`!N? ^| ^GaUop\ ۶B)@# O?8G_6\>W#<awDx#dKb"GU=>mzCCwO$A Sh$DUg . ,Bpa_  |7܀V P'B\FW/~hŻsxßѹkU=cfcW1F_.P.QU*Sd YE ,&55{0^ q"" L2چ_s%A1Q:ܢP 3vĮ&R ~B>0j}}Y(Ķ[n 6*Y`0CG` -p+5f8/ 1]cR p岂//$}ۧN}O}?0G\DR/=C [y?8̿c~=SFD4u#cI'QbX8LS,c0$>[pFز,D]p_w.2Uu媽^o;Td{GE>_rwǎ!%;6@Iaٍ҅[mEa,K7ۆ8p xT2 u.ǁeY0- alBe!kѺfbq89~-I ;@vVTw s5@YчlVTw0c) 9G5pԸym`m#,_ ;;2ON~q93DG)7|~9FtȤx{Y_:?Kx-Cˣ,$@\Yo'ca-ݻC>HJ9STPTP,PQ(/W*(WޖL$.{͚Pg Ddɒ{׭[8 CD4aZ aͶ,q ˶h410(1g68_>:39a%];PpG[/d7l/Fۢ:1a+:P KVws}^^FfҜ0.ixQ'P{ #Dʹ4 y:dm4-[= sbÆM8`GgvnD]`nۆ{p07>3 ]~Q@!CP@\F➯岘 LcE'~SSLG>ݻwh9m '@:ypm<qi2 48,8F{QmkC<{) N~+/#ܵ[,HHr]1G>ۋbQ' T4_UVk; ̭mmwaԍHwuDn@$rvSK`QؐQam[ bш w JpŪXmW+ IDAT~%M۳7ZѠqޘozkO_389}y!qOv Duvwק u17cقh䍪0Q_Z/n8E>G\FTdk߯PVU=q q[I>1Niqa K @Md\B %Ði0 ۶~`1>S_irzFQ'| lro$R hTyN~4F;K*q|~If۳Fɜ~sX>G>||/Ue }dşV}݁%#VC\sֶ;8rY'Q`ǰm[JN5m oY2v`| zu~!vceG 5"߸|!}c4#[#F16}(J0D@*ʕJK"}s`Ba*;PjO9蘃ӌIsF#S?r$D1G؊ގm2xS0٘'[&c.h:c>JN8+r:ˡϣ_X+OaO~z!{{pEc}ӓO=wj5a&jq,3MDA۲`& y&mBFg|?(-3.` ݰV=s0JԻS?Aɻw4!H?g$e7΃; [o|َh9q6ې)I8Kq_p /z2'/Zy6Jv"Ɖ`@:ߟH&&A7cjőhjV4 Q4a63N%eUKW᦮m E뱺of/osshd7lUJK5]=“/ò L_Gx9;eĤ?Fo?0 ᰦ}==f( (jy?u|U""P״-;{{ x≫ xDuj5QJ"'7 IBC*,Y$Y0o6WY"y׊>h!ѣƭ* h?{ACқ6 m`ۍ|`2k-חozLYxDxg焙&_‘+ANl(("ޟ}ROAZ)Z:G8ַs]k׮ c&*j0mn} qĮA@n$eYjf !c? }fN|=|9L[э^lԻyPCg/P^ڗ/7)h?g d,Hө>tK.ƼX1G_O O~˪Z//kg6].YX,~4MQ3Mؕ L@EzJ fHx`QXA'Vge 9o7|ҶhiF놣s >MXѧMwGW|2Tӿ|ΛY^|!k CUZDAD# q`L-5& LR˾ ^{4Cto]{ߑ"m7OB9ҿy2w )g1_ʟˡR* zUiҏ>j-ӼիoĞH1W~` Їqq&ϟ/WDAƇ%۰|oQԶYJmZ05{m 09i[8a$Y/aws.?э1# ݰu~PҶ`t`oS܋/Xӽ lrOgʊ\F\C@]q G͘qc[[[j $ずl6* ?|Ff7hhgDML4a,À#S \<+UI*DCDc14'Uwl}r} b`ۢ9 c9=5H#+cgim_5{(ݻfQ)PTrWTP-Q4ff2?.515tT8sϚ5Τ7aUB R.Q,z$L@!A\.2 [ÀmM--CspUk[/㑒z' 9A8~N?|[׶hN{e֊8+0{|90;g7nm0TaGߠ\}Fk m2=q?]P=}޽\VW* @ĺT*SR0ەG?_CqLC`~pɒ˫W=ׅyHRHRHhddN&u<0aqDQ4@' @9@]göU6ϖn|tPL`zϩ޸^;d7Y#5C}~ά?,!ZUwk>`MR׏ zgRa%uBR kG @4?b0yB<$ "J!NUDBxӲ&lK`jܐC'C5sa?1L={Am솭۰uHʮY+صcTΕ(džb"eOAG9(~=:wd7lckG1 |uӍbB>/"XKm?jQOFSk1 ø鳟W.]Z017`(kt2Qy?a7nq1WF^"ddiiA:FJL&a(h\O!j~=+W#='>?PJ[)Q2J;wUw^A)Mq h0,[W^~` R--hIڊT:֖elӄ Cp IB&9;ʪ=W Q}sTǙxCx/ =rپ>Xȫ"51d~jo.@P)r!WMy.>6=0yoWgՖe-R B:A2Bk:I'ud2x"MH`xS2@sAӃnA鷿hGZXEԄܾ>{+xfOb7E ˡ yqO +POF bC&O7hާ[@߄;j۲'Ix$ZT= )YS @Tl9-DyHɝ>q4_q҃xjoMD 0)88o#ˡ\~R,p*2쏨Gar(n%ү"AP;T2yk}7or_-kN:AuE7 B-442d2A5.C WMW%'^}+j6Fs 4|Ud |:W|s9ϫ\@V(ɑR "%O,/%kwZ0ҴXR~`S #ҥ+W&i%F*F&F:A&B"D!p\?f۶$p?C{ѻ}Wf,  9s.G^\r,r%WQu O'P#*S_ ~qt\_1ﳼ_}Ν8F@eMkIz&K$݁t&d2t^"϶x2M55$@[Pzw&d䴇P~1]@XD>C>C$q@0TcէO¾x] 4w^HhyQi8 Kpl@\."͢T(WP)>&SRq05qu]ox {9*J;'!d---V [$H(H 8\W3a2V3hXYNQ-ϡsm(lظkB(aiK۾wPO\A$q ժ<}d/j'c(<G2|P-IEݚ5%@Lږ|VvpthC|>%fgz WvD-f,HU.)hX;|: 3n>X2^_{?{wfotLy{p9K;C[jGђ 9zGL=TzZ Y,)CH&ᮻo e5 \qGu p~Q2²K@A:B"B* F-VۉcjM9kM'2rȈj TG/QD`bx2)<S>-  ƫ5omkwp^_#N _}^|Q~s6RtqEmÖ˶h䌈I8vې4t鿶SOmjw# o):`x"s)pfLt 3q5bQQG ƍ3\z߬}P}JEl>|?2sƌۮ& 4$H ^4}0Ů<ض On$<4D[FYpd  o"ӗj<4z7Mean喃Z&!n۠m[ }MꫮsT֔2 Sm4TdId!-<ߐ]$ GDT:PУ6IV,W^ !UeZRxHO 9t 0 e}+W@] [FIRd`c?MگV11F,zӲ0ฮLP])Z$AJoK@aKF eԍ4\E .yQB]]^'8 w{Ma!^Obq{ Gl?=~B !أxɊga~ a(@IB"e$G-IK2M*Nm;R뎼~,=*i?~)2@ ΁L7-]nukkkope##0͏ ի'|OZ}wbק! ms{Y+0%ɊȲNZ™-:DJyCqeT=gLa6^@J+}ZPE=F^ GЬ`YH$gѢE0xx?# 0 Эn![jդM,W*'S@䣪@C{Lu Te L0Rsm0RT A@P OJ ?G`k;a2?: >~Pz ?L0Ð ~8i+ W\qJX< (: ޜ6YЎ2ڈ es0*$[!?4(3ad1U#Ў#jH+atђu0xʎ LH!Ff 8}o͛O,J'QtBqgH1Cgi:Ee🣑@iG C0!S@U)E> NL iz!mc1MϮm?]uU7뇥T& (C x|߽~Ga8/#Ώ:!":2e+Q.zVJ4=~Jd ֞8 9fϙl*zOᇭ{N((d쥌4gs]'xl.wDGA0 an*KB 'n"*߫+@ph(B-Z zinLskk[K .|annBL1Pa|;9W^W*SkAphEGa8%|2xHqS1Ʊi4zHK胱*JX@0^fmfW"9cί]}. ģU g0$0͏|Dm(EBJeC+H{玅DiG\%Jo^{<΂IENDB`(  yy{{{}||}||~ =^\\]WWXTTVTTUSSURRTRRTRRTRRTQQSRRTQQSRRSRRTSSUWWX^= {{|||}}}~ :l[[]VVXVVWXXZZZ\[[]]]_^^aaabbbcbbebbecceccebbdaad``b^^a]]_\\]YY[VVYUUWSSUQQROOQOOQSSTk9zz{}}~ "]\\^XXZYY\\\^``bddfhhillmoorssuuuxxxzzz}||}}~~~~~~}}||~zz}xx{vvyssvpprllnhhjddeaab\\^XXZUUWRRTPPQNNOQQR\! {{|||} c[[\YY[^^`bbdggimmossuyy{zz}ttvmmphhjbbd]]_XXZTTUPPRMMONNOb{{| CaacZZ\^^aeehkknssvzz}||uuwnnoffh__aXXZTTUOOPLLMSSTA {{|^\\^]]`ddgkkouuw~~wwynnqeeg^^_WWXQQSMMNLLMȆ\{{|i\\^``ciikqqt||~~ttwkkmaadYY[SSTNNNLLMրh}}~_\\^bbdllnvvyzz{nnpdde[[\SSTMMNLLMՁ] }}~ @\\^aacllnxxz{{~ooqddfZZ\SSTMMNMMNŪ?{{| eeh]]_iilwwy{y^[@<,(!%!40LIli}{{}nnpccdXXZPPRLLMXXY||}~~ XXXZeegssuwuB>!.)ZWzz{lln``aVVWOOPKKL߂V{{|}}~``b[[]jjm||~QN!40spuuwffi[[]RRSLLMVVW{{|}}~ 8TTW``cqqtWS61~~~nnqaacVVXNNPLLMԨ6{{|~~ fTTWddfwwy1-\XvvxffiZZ[QQSKKM||~e||}}}~jjlUUXggi||~wt% LH}}llo]]^SSTLLNddd||~RRTWWYjjl}{% SOqqrbbcUUWMMOPPR!MMNWWYkkn/+okvvwddgWWYOOPNNO$KKKVVXllnOKKaddOh+&yy{ggiYYZPPQNNO!$HHJTTVkkm#BTKa-3q]Y||}hhkZZ[OOQMMN!!FFGQQSggjUQKa~)-d-(}}iilZZ[PPRNNOFFHNNQccf}}1-)-~m5@ d~~kklYY[OOPOOQ~~JJKJJM^^awwz"-3h\{ da^iikYY[OOQSST~~ ``aGGHYY\rrttqWu~duy-3)-hhmuh$&$&~hWu$&~h\{y1:hh>MdFC||hhjXXYOOPffg}}~ xxygCCETTVkkmfcy5@5@:GdKaBTBTOh:G)-BTOh:Gd`)->M)-y73zz}ffhWWYNNP~~e}}9@@AOOQaad{{~][KaOhdd\{)-$&\{1:hd$&\{d`~Ka)-1,xxzcceTTVNNO6~~??@IIK\\^ttv^[5AOgd m$&hKaKaKa1:u$&hKaKaKa1:d~d~Ka1:1,ttv``bSSTOOP||~ LLNCCEUUWiilda qdd1:1:` \{`Wud1:1:`dqBTKa~$&83ooq\\^QQSYY[~~ }}~X??@NNPaadvvyro)-yd1:BTd5AuF[Ka>M1:BTd)-d$&_9FnTplWuGCjjlXXZOOPV!==@GGIXXZmmo:G`dBTFZ $&1:1:-31:1:-3BTFZ d=LH].6%*7C4?J`-3c_{{}ddgUUWOOP~~ NNOBBDQQRcceuux$Wu$&h1:d:Gmdttu__`RRT\\^ B==?JJL[[]llnyy|73u1:md$&$&d1-kf{uoYT-* {llnYY[PPQ?@@BCCERRUddfqqt||SPu>N1:\{` F[5A:G\{~)-d3.0,~~.)zz}ddfUUVRRT  }}~`>>?KKN\\^kkmuux{{us$&FZKa>N 1:1::GKaKa:G "]Y{|SO{Zyd~*&_[rrt]]_QQR]>>@EEFTTWccfmmpuuwzz|}})%\X}yy#%BTF[.)ZVhhiWWXQQR~~ yy{j??@LLO\\^iikpprssvyy|{{~OL SO |_ZZU,'uux__aSSTh??ADDGTTVbbellnpprrrtuuxzz|wv#$ }~D?rojjmXXZQQR~~ _??@LLN\\^ggjmmoooqqqtttw~~:7ÿy>:&"wwz``bSST\ ??AEEGTTVaackkmmmpooqqqtuuwmk ÿ}yz {#WSkkmXXZTTU  E>>?LLM[[]ffillonnqooqqqs||~3/ÿ }vvx``bSSTA JJLCCERRTaackkmnnqooqpprttvlkÿzROiikXXZZZ[>>@JJLZZ[ggimmppprqqsrru||~74QMÿ4/ |#a\SN zssv^^aRRT eBBCQQS``blloqqsrruttvvvxwvÿ{!{}84oj[V zfc~~eehUUXb DDEHHJXXZggiqqsuuxwwzxx{}}JG~zÿ=9 } mmq\\]UUW %@@ANNP``ammpvvxzz}yy|||!SOÿzxx{``cTTV! _FFGVVWggittw{{}~~kiMIÿTO=9hhjWWZ\ KKLLLM]]`ooq{{>:"~ÿ|ppr\\^YY[DDFRRTeehwwz~z}y~zÿÿ¾¾0,xxzaacUUW::5d`c_b_a^`]_\^[]Z]Z\Y\XC?;7|w&"pps]]_^ __`xxz&!NJead`c_b_a^`]_\^[]Z]Z\XZVSOOJvr {uuw^^a ^^_eeg}}`\fbead`c_b_a^`]_\^[]Z]Y\X73[Wli4/#| |yy|``c\\_ [[]kklgdfcfbead`c_b_a^`]_\^[]Z]YSO#ro\Y*&EA y[X}}cceXXZ \\^ppr)$hegdfcfbead`c_b_a^`]_\^[]Z]Y+&@;b_0,>:z=9eegVVX ]]_uux}y1,ifhegdfcfbead`c_b_a^`]_\^[]ZIF{x ~IDFBz+&gghUUW ``cxx{tq84jgifhegdfcfbead`c_b^a^`]_\^[]Z$¿ zsn~ ggiTTW cce||~pl=9khjgifhegdfcfbead`c_b^a^`]_\^[D@,'B? }¾95hhjUUV ffhol?;likhjgifhegdfcfbead`c_b^a^`]_\]Z 2/¿|eaÿE@ggjSST iikpmB>mjlikhjgifhegdfcfbead`c_b^a^`]_\>:fc|73ÿ95hhjQQS kkm¿pmC?nkmjlikhjgifhegdfcfbead`c_b^a^`]\X} };7ÿffiPPR lln¿qnA=nknkmjlikhjgifhegdfcfbead`c_b^a^`]@<¾+' {mjÿtoeefOOP mmpuq>:olnknkmjlikhjgifhegdfcfbead`c_b^a^^[!$¾]YDA63B>VRÿ($bbdMMO oor솆|y95pmolnknkmjlikhjgifhegdfcfbead`c_b^a^IE51¾ÿ¿51#}}__aKKM qqs߅2-pmpmolnknkmjlikhjgifhegdfcfbead`c_b^a^+&% ¾2.'#0+7283,'1,zz}\\^IIK rrtτ*%qnpmpmolnknkmjlikhjgifhegdfcfbead`c_b^TP¾@<HDuuwXXZHHJ ssv roqnpmpmolnknkmjlikhjgifhegdfcfbead`c_b^;7^[¾HDkhoorTTWGGI zz| njroqnpmpmolnknkmjlijgjgifgdgdfcfbead`c_`\$ ~ }jjlQQSKKL ||73^[sproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_RNkh'##]ZSOol}ddgLLM}} azz|XSNKtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_?:(#QNPL~~]]_GGI^Axx{yv;7urtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_,' {B=74HC"uuxVVYCCE=ttuvvx&"vsurtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`[W&"RO^[ z.*D@llnQQS@@Bttvuuwք okvsurtqsproqnpmoloknknkmjkhjgjgifgdgdfceac_^ZHDlj |LH})&1-@<¾wuddfKKM>>? ttu zz|FATPwtvsurtqsproqnpmoloknknkmjkhjgjgifgdgdea`\da~LI(% zPM}/, zz|\\^EEGDDEssu o{{~tq84wtwtvsurspsproqnpmoloknknkmjkhjgjgiffcc`| }nl:7¾^[+&84 nnpTTVAABlsst =wwyurwtwtvsurspsproqnpmoloknknklikhjgjggdb`0,FC¾QM?;JGeegLLO==>:wwxuuwㅅ61YVxuwtwtvsurspsproqnpmoloknkmjlikhjgifVSRO¾hdmi$ |zuuw[[]FFH;;<rrszz| zz{lh62yvxuwtwtvsurspsproqnpmoloknkmjlikhGC¾WSC?llnSSUAAC@@B rrs `yy|omyvxuwtwtvsurspsproqnpmoloknkmjli30TQGDwwz``bKKM<<=]uuv &uuw􇇋B=IEywyvxuwtwtvstqspsproqnpmoloknkmj }vt[Wyx~~mmoWWZEEF99:"xxy vvx vsywyvxuwtwtvstqspsproqnpmoloknkro x~#*&wwyddeOOP>>@;;= qqr~~ fyy|-)QMzwywyvxuwtwtvstqspsproqnpmoloknkwt(#eb{yifSPPM63\Zyy{mmpZZ\GGI::<cttu!ttvok"wtzwywyvxuwtwtvstqspsproqnpmolnkmjywxv\X:6"LI!~~~~zz}rruddfPPRAAC778oopyyz {{}}}'"OK{xzwywyvxuwtwtvstqspspropmnkliheda}YVa]d`HD% QO||{{~yy|uuxkkm[[^IIK;;>BBD ppr Fvvxkgtq{xzwywyvxuwtwtvstqspropmjhda^\YVRP]Zc_ead`SP jg {{zz|xxzwwzuuxpprddgRRUCCD779Cuuvttwʁ,'@<|y{xzwywyvxuwtwtvstqspmjdasqTR_\ebeaead`]Y0+RP||vvxuuwttvqqtjjl[[^KKL==?::< oop}}~ awwzvsea|y{xzwywyvxuwtwtvsrofdUS_\ebfceaead`c_D@&!{{wwyttvssvqqtmmpcceRRUCCE88:}}~^uuvssvׁ<8'"xu|y{xzwywyvxuwtwt^\TQ^[dagdfbead`d`c_VS*%51^\yy|uuwrruqqtooqhhk[[]JJL==?99:ooq||} lxxzA=|y|y{xzwywyvxuwtrpPN[Xc`fcfcfbead`d`c_`]B>lh85~~wwzuuvrruppsllnbbdRRTDDE88:uuviuuvssuցa^]Y|y|y{xzwywyvxuNLUS_\dafcfcfbead`c_`]kh)%tt{{~xx{uuwrrupprhhiZZ\JJM==?::;||} bvvy72mj|y|y{xywywyvQOPNVT^[b_c`dadac_`\[W }[Y{{}yy{uuwrrullnaabQQSCCE99:yyy_wwxttv~~"(#vs|y|y{xywywyvLJOMTRYV\Y^[^\\YXUz?<zz|vvyppsggiXXZIIJ==><<=sst Dssvqn1,zw|y|y{xywywb`LJOMRPSQSQSQz)%{{~uuxllo__bOOQBBC889@zz{~~zz|XU95{x|y|yzwywywyvxuwtvsur~\[lk+)}}{{}rruffhUUWGGI<<=LLL vvw #rrtC?<9{y|y{xzwywywyvxuwtwttqxvHEB?0+omxxzlln]]_LLO@@B::; }}~ Zssv4084zw|y{xzwywywyvxuvsroIGSPYUYUD@,(`^ttwddfSSUDDF::<||}X{{| }}yyz,(1-ws|y{xzwywywyvvsOLVT[X\X[WZVTP=9% YV||~mmoZZ[JJK>>?JJK yyz rrs||+&+&ro|y{xzwywywyvUR[X\Y\Y\X[WZVXTWTKH0+VSssu``bOOQAAD<8~~ issu50JF{x{xzwTR_\ig]Z_\_\^[]Z]Z\X\X[WYUXTWTWTJFdaoorZZ\JJL>>@vvwf }} uuwC?2-qn{x}zVSa^fchexua]a^a^`]_\^[]Z]Y\X\X[WYUXTWTWTusuux``bNNQAAC^^`  vvxwwzXURN{xzxnlrowtwvXUb_hehegdfcfbead`c_b_a^`]_\^[]Z]Y\X\X[WYUXTSP&"||ffhRRUEEGGGI rruyy{qn",'da|yrotqtqsprp[Ydbififhegdfcfbead`c_b_a^`]_\^[]Z]Y\X\X[WYUC?>:kknXXZIIKEEG $rrsyy|6273li|zvsvsvsurtqmka^hejgjgifhegdfcfbead`c_b_a^`]_\^[]Z]Y\X\XZV%!fcppr]]^KKNEEF! &qqryy|a^73d`ywyvxuwtvsurtqb_gdkhlikhjgifhegdfcfbead`c_b^a^`]_\^[]Z]Y\X2.2-ssv__bPPQGGI$ &rrsxx{<8,(PLrnxuwtvsurjglimjmjlikhjgifhegdfcfbead`c_b^a^`]_\^[[X2.khuuxcceRRTJJL$ $sstwwyvs,(61XUrovsurnkoloknknkmjlikhjgifhegdfcfbead`c_b^a^_\GC"NJxx{eehUUWNNQ! wwyuuwjh'#-(EA]Yqnsproqnpmpmolnknkmjlikhjgifhegdfcfbeac_SO;6C?wwzffiWWYUUW ssunk.)&!3/A=OK[W`]fcifnkmjifc_b^\YQMEA;7-(JFvvyffhXXZmmo irrs||~B>%!eauuwffi[[\톆g  ;rrtwwxli72OKssveeh]]_Բ9  }}ssu~~wsGC!/+a^~~pprddgjjl Zqqsxxz~{[W:6!*%HDrnyy|llpddgߓX  #rru{{}~{{wzw{w{x}zuuxkkmrru!  Dttvttv}}xx{pprllnƸB  bssuuux~~zz|ssunnq֛`  lssuuuv}}yy|ssvppsךj  attussuzz}~~xxzrrurrtɡ_  Fzz|qqtvvx}}zz}ttvqqsxx{E  !fttvrrsvvx{{}~~yy|uuxqqsssve  &`vvxqqtrruwwy||~zz}vvyssurrsvvy_%  =ovvyqqspprssuvvxyy{{{}}}~~{{}yy{vvyttvqqtrruwwyn<  Aaxxzrrtqqsqqsrrsqqsqqsrrtqqsrrsqqtrrsqqtrrtssvyy{a@   ?????????(@ B;[p}}o[;#j~~]]_``bffhjjlnnpppsppsooqllohhjcce]]_WWYTTUvvwj"nllneehqqtyy{lln``aUUW^^_Njm#eeguuxnno]]_QQS~~"hhk~~uuw``bQQSwwxXffi}}]ZB>'"":6ROvtttv]]_RRS㏏V{{}ooqfc($TQkknUUWqqr~~,ddfzz}95*&~yy{]]_ZZ[Ӟ*@[[]邂40'"ddfQQR饥>GXXY񃃆QN/7$&u%(?;iikQQS񥥥E@RRT'"5@hSn~kkmRRS񦦧>,MMOttwywG\^xLcLcDW/7VsPi'+2;4?a-3H^6B,2I`=LPi,2khjjlRRS韟*RRTggifdcPixe>NWuI_]}Wu%( ci"#.5Xv>Nm.5~XTffh[[]ӘiijYY[dbnN^Rm^2;I_,2>NcWu>Nn7D!!XT__attuXKKMqqspnqBTd>NMd\{@QUr+0Pi>MLcARWu>N:GG\Ql%)i[zSnli~~XXZVFFG__a}}m2;d>NCVyWu>N2-FB*&qqrVVW㩩wwyOOQmmp'#Md@QTp*.VsOhFZTpA=>:m>N94bbdzz|$CCE__aqqt{{}FC62gc$'#$|62@<{{~VVX"wwxPPRhhkppsxx{po;651$ ffiCCE]]`lloppr40jfÿYT(#}}WWY񪪫pNNPhhjoorttwmlC>ÿGB]X"ddgmUUV\\^ppsuux<9ÿnj-)vvzeegǠ%JJLjjlzz|}}ÿok]]_"lXXZyy|c`1-tpmjYVHDÿa^iikjrrthhj<8A=PKD?WS:5B=mh*%!wwz}}~ RRTxx{UQ]Z\Y[W;6<8},'pk]]_ߩ[[\:5a^_\]Z\YWSNJ50IDaad>hhjtrTPc_a^_\]Z\X40 ]ZUQc`hhj;^ttw`]daeac_a^_\]ZQMJE;7toC?nnq[rMI"hefceac_a^_\]Z)$pl@<|xea&!ttvoEA)$jghefceac_a^_\IEebspvvy}C?,'lijghefceac_a^_\#a^¿;7ZVÿ)%wwzD@-(mjlijghefceac_a^GCC?^ZÿuuwHD)%olmjlijghefceac_`]&!"¾}¾GBppr}rTP#pmolmjlijghefceac_PM¾GC"(#*%iikp^ifqnpmolmjlijggdfceac_61}{;7IE``b[>earopmolmjkhifgdfcea_["62`]73yvwsc`UUW;SOtqropmolmjkhifgdfceaSO|2-VS(#JJL }}त% <8vstqropmokmjkhifgdfba]JGxu`]" B>@<ooqDDFߧQM!wtvsspropmokmjkhifmk-*`^¾VRSO&"]]_iijm`]wtvsspropmokmjkhA=¾+'jf83TQ{{~MMOjwwy&#:6yvwtvsspropmokmjusif}|ggiAAC# Ȟ]YnkyvwturspropmokkhB?2/-)xxzUUWMMNǦq@񱱲!/*zwzwyvwt{x[Ya_fbd`[W-(nk^\ttwqqteegGGIqqr&~~pmLH{xzwyvlk\Zecfbd`a^TQ95zz}ttvmmoVVX==>#@<b^{xyw~|PN[X`]`]fc!yx{{}ssvcceFFHttt||㠠(#jg{xyw{z[Zom}}nnqRRU@@A㴴Z!jg{xywxvwtsrHD4/a_||~``bCCDX d`{xywxu|zZW\XXTD@*&ZXooqMMOffgԘPL{x[X^[]Y\XYUWTC?`]~~XXZMMOӷ.zz|靝(#61vsljdausheb^`]^[]Y[WYUVStrccfGGI鶶,B{{~񞞡@<VSvturgeheifgdfbd`b_`]^[]Y[WGB,(nnpLLN񳳴@I{{}񜜟qn! HDliwturhelikhifgdfbd`b^`]^[QN[XuuxSSU񳳴GBzz|閖UR/+LHnkurolnkmjkhifgdfbd`TP73DAxx{YY\鷷@.ԍ]Z#)$62=9A=A==973,'QMwwyggiӿ,RN&!IE~rru Z{{}㌌okZVMIIEIELHVRmiqqs㮮X{{~wwy&zz}񊊍wwz񚚜$q~~{{~ȱp &myy{||~||~xx{l% >^rr^> ????(0` %?g}}~g>&yyy{iikuuw~~ssuggi[[]nnoÃx%Cqqtooq[[]nnoB1~~||~yy{^^`ggh/ uux{yIF&"!@M$&>N"#n?P2-wwy^^`ّ ddettw,'p"#d+1ZzgRmFY(-WtRm_6A(+enhn#%]~$ssueeg ^^a+'{u.5Zz[{PjZxenI_NgVrUrdSn=LXvuRmPi$hhj~~~2NNPvvy84ju+0Zzs$&d422-2.^^_/aacaac||~QN =MAR"",3G\?O/795ea*'e:5ZW||kklDNNPllnwwzqpid~)%ddfBiik__annq{{}51+'OJ1,ssu(MMNkkmrrtkj! _[wscce%z]]_vvx@<tp=8yy{xhhiqqsURTQ?;3.uuw•XXZtr:6QMB=jfso:550c_¿C>eegAjjlVS51_\]Z[W.)[W72e`KGrru>j}}95UQb^_\]ZKGmi~zUQ$ g&!ebd`b^_\\Y$50zv~]X$ "hefcd`a^_\B>rmwt'"khhefcd`a^]Za]IF#$ '"mjkhhefcd`a^@<~zSP=9#olmjkhhefcd`_["þnjtoso2-*&qmolmjkhhefcd`MIpm{wwyjB>fcqnolmjkhhefcd`62;7)&WT0,(#oorgBdaTPtqqnolmjkhhefb_[!d``]74zw:6IE\\^?:5vsspqnolmjjggdJGvs~¾$nlLLNĭ% spvsspqnolmjuq.)lhoor^^`Í{[XROxuvsspqnolPM!lili41WWYy)&!wtxuvsspqnnkkh#a_~~mmpDDF&QMOKzwxuvsspb__[0,+'xx|ssuYY\aacF!mjzwxua^fbc_FBhda`ssuhhjFFHCyv,(xtzwUR`]a^xuDA||qqtWWY\\^3PL73yvzx_\1-ggjEEG1=973xuywxuTQKG2.)$zz}QQS}}~ =9.*ol]Z\YZVTP0,+'cce^^` کPMYU\Zomc_a^^[\YZVEA<8ssuUUW٤-ᩩ{x!0,|ywuvsfcjggdebc``]^[[W+'da]]_ഴ*-ڣQN$EAhenklijggdebb^LI)%EAeegڷ+]Y%!&"2-62622-($ TQxxz heE@,')$@N\|PjcDV_NfnkrrsVffhmkSoWtQk"#So6A1:*/-5BT3=DN3;6Cyy{T ZZ\vvyyx%'195@2<rna].7GIkkmߓ h``cvvx51UQ;7geegoorhgokHD|ttv̚&aacFC50<8c_YUQM||~$f~~")%SO=8!IE+&\Wb^dUQ_\[X '#KGjf^Zfbc__\<7$ sn)%HC+'}!jgfcc_ZWhd]Yvr!mjjgfcc_95gdhdLHrmpmmjjgfc_[_\ÿ,(yy{gdpmmjiffcNJ95hepmxv:6QMuuwg)%ROtqpmmjif|yVS{xfbXTKFyyze&^[2.wttqpmmjgeTO@;@=\\^$hewtsppm}MIwtecwwz\\]͔iNJ2.zwwtc`KFSO-)uux]]_yyzg "QMzw[Yc_'"jinnpSSUߔ W\Y~;8 _]YY[URN}da[WHD"^\ttvnnoǻ"83khspb^^[[W3/usjjlƗ ǷPL95ZVliifeb^[@<EAvvxƧb_*%#+'+'$ %![X Wర੩V iͫ͜h &gf&??qdevelop-v0.28/resources/images/CVnamespace.png0000644000175000017500000000046611362261070020602 0ustar jlbrdjlbrdPNG  IHDRabKGD pHYs  d_tIME 1hIDATx!@DP1 E5w@ ^4K* ^L %BMɚ I kRTEr4`9o6 H~s#IZ y~5{o(io?:hg .}39sN$vJ$-9 νnhw_IENDB`qdevelop-v0.28/resources/images/edit.png0000644000175000017500000000206411362261070017336 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<{&&Fl? fO_t/E203<9}gS_c?tuk=?Վ2`€0}1g`A* /.`&FL@? q P-'O~,ĥ  Mf`r^p26gqb?.}D2pl O _>c`pmIKc@x 's0020|eF"!ڌGX+JϜ@001ǩ $v! 0\A4>  ]~7Ͽ@[@I+A`i+tނTf`pٌl&v6kA95 #~ nd`÷o@v gxΦΠ'_!bd@nw` àu <  \~ 6f oAZR@ "+:((=P010|cQ'?~]`FD Е Ϯ=d?`-P?ܑ f??d b`aOڵ r0Ĉ{@X# W~}S0S} @O UcYpWj-=jzՄp H wz*{6 H&T%s%)ƄJ()x -!:Ӑ  Dd?d٩1/SPB$zli|;cs߮o0gZ3Z* Ց>me/8ɢK $'@qvQ P@^s-D7YP8` X/ Wyf޻~]U7iYdLhe*L3YQ裐 hI Ց():74Gǵi NKzb?5D>nyᛚ"ۦyTWlX9 ^II_Mȗ[}`э#]ݦs3v UqB :֨nICO6㾳I0"}qqMj*/챬S@`QWmԨt"sAAp|Q0|Jʕ2g$KёlEc){x?x s4_UӐEH{~jrK4FKZR%{c_m{1JvdIz2v}?O%uW )+k1˚`p }}t+(8ް+[ L^s]H[ ԃmmdcP7 $_Z00Ϸ鳵i%,3&ZdB 9o%XA GĠ6slCNFC!e b(D7~N/<=bhWNk5x.;PSkZ]uʂ }_\0-q: 85`1C‹W󺚓[AY/WEt8u5\ʕ6ݗ+/\⸱CYh%( <.*_$lԵ1)=䯽)ޢЉC93y9ZZ]pg\_Hk)!!dSɦ9Rp W<8VK?Li&sIENDB`qdevelop-v0.28/resources/images/CVprotected_slot.png0000644000175000017500000000054111362261070021672 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxڥ 0Dopq0G &pR%r/8k jöTA"%M_@jB\s GשɚTx06f'dMP>cz:@0LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex376H23K361N3N425142H5K20LM5LL2UNVIENDB`qdevelop-v0.28/resources/images/qmessagebox-warn.png0000644000175000017500000000051111362261070021667 0ustar jlbrdjlbrdPNG  IHDR('Jv pHYsBB PLTE7^IDAT8 ePfJʥ8eDY, X $l $YYKyu/'7JtEXtsignature57bcaaf72a148878a375e91916d3b154c4913d0bb45253ed921719c5d9bfbdb7IENDB`qdevelop-v0.28/resources/images/editpaste.png0000644000175000017500000000156111362261070020374 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd:;)d.TT͘?c`5kkG7 k cmPR 0o&.8zB\ o?u4c?Ó'*c8v詁t"×7vi;]5Ħ X _ _2pIr3p3<9w:b/1=o8&qwd{]}W̙ ɞb?L- ϟ _|c`bz  offF fc07`aa7'O^Dˏ`WǏ_>}p@Żf`@}&͵@L`6  6 b߿203sb-0s2oXvvV8 I rϟ?lVVf?A@ kDt\/f! a0@z߯D 2?`0(e\ ?e3@ hZ|&_1N "Ԑ] e-/p` [@, emF|.xQ 1!n8@I%yAqMIENDB`qdevelop-v0.28/resources/images/desindente.png0000644000175000017500000000151511362261070020533 0ustar jlbrdjlbrdPNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe< PLTEȌ̧~x_BeGТڲ߳gnjʥ}kyW^ҬУ]fHy_Cʦ}ө{ܶoO컆ޭӢϩڭ{֞ᲀ淃ʕ{aDĠxȟs]qQۣċjK]轎dۤiƟt߷—z`CҨ{]oONJmMڭ|mMšyرʐۦȒjϞ}Yױ渆Р칃gIh؎pPo`tRNSsmCGIDATxb'!>/ B&A D"h@!)   Ⱊ@pqM 0c&TAv NA&  YSP݇!b3H03@@qz\:VN| L&C|p /##_x 24X][6FBNU*9P(P<U׌[CW(p XHJz*cIDže Dl*a7 "`  @M &A scoIENDB`qdevelop-v0.28/resources/images/filesaveas.png0000644000175000017500000000216111362261070020531 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME.*'#IDATxՓk]Us97KiK+Z:+ gӂ8с R,RŖU֛>ҤI{9g~8HL &koq>d< js}=u飹Ǐ8ܝ~q7vՑW5ogN;Nց>~H\'x$#M*Xk1b׎׸)Q] vʋ? /wi5}wĕcys<0k/ d_^'1@ӳxu҃77MPRN&4kd[?JudZ v/1;tF,Fa02yh7 # ;좹Ph ]HDrs:>̆ޕfq .nzc4 u F,{/>AmpWT{`v^rm/KC忁-"VVr::uXxv4A Ը8-|-yRkUiq:<6vo\BpRk`6\ba}UŦ˝jmG6m `zMKhmpR &Z0"tGpS5l64 mFpȖ93q|1B!b*'XV?"K\#E@7!n5"Tih2@k-8BS/07FR @!lS=13Ac ;>1b)CDIP݅2۱"OƄ#_;^'Z Zɲf@ұ4O64@TD\>S̃,%La#Mch@=LD)M+| bq# w$Pݛb#Y|R ei{7r Ww3!ՑBG[k婢$[ja/ 4 `D$$leXDAฬ +ǒ5D_ ; wP$/!v3{wP~'J/P<*LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ1zTXtSignaturex321M4M106H412456L50J476H"  IENDB`qdevelop-v0.28/resources/images/dbgparam.png0000644000175000017500000000023211362261070020161 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըOIDATxc``PL8E%DW;8tq h7Q DP#j%7"\EQaVuIENDB`qdevelop-v0.28/resources/images/CVprotected_enum.png0000644000175000017500000000052111362261070021653 0ustar jlbrdjlbrdPNG  IHDRhtIME  \ pHYsN N }gAMA aIDATxڍR 0 Q݁T E%8;I\^Ԅ<(vll|e"ȕH`v<9 *04Hk>ePdG87`!PT/B}ǰq2n, TR5J"o\I;J@r:=Rwgdn m?iUSZ3J%s*:LD b J4IENDB`qdevelop-v0.28/resources/images/warning.png0000755000175000017500000000147511362261070020066 0ustar jlbrdjlbrdPNG  IHDRasRGBbKGD pHYsN N }tIME .IDAT8˅]kew>v7d;I?nMccD* AX BBEz#AATT$Ub̼ASCÛII5ϽO/vji6q&IojǭgWV7>EWjkt&y5ϋG 8iry/Y r;Aᴿ "ҬwFGjq4n/G^Ϲ>T\c_M෵ڵ!N Vv ҄󮫧 EG"<3XN Z@z| f2Wqy|PptZ:9 rAYarŅΆ;E95?fYY{kf-‰_HRFc2@E< wS+NV݄u9L_;oUz/!A߿MwuYw`t6FG3]ZѱW^`]T@GwP"ilH͌[qy{ {B#Z ɡ!v" kx6!6J=0VzҢ%0r̎Xr+~܎H #qf{+XԳT̘ ݐ0~l\=v}K#2DŽ@:aA.xtX KGmBTwWюIMscZwv߂!hn n5¹L)T-9̜2Qz ǂc`0O Q[S KU ''ek|ݎN"||ýҝۚV\C'kGKJ\Kʣylh$ɰN"U+ bR򑶢; J q!L=j~;NG/7uďo \E[IENDB`qdevelop-v0.28/resources/images/doc.png0000644000175000017500000000265611362261070017165 0ustar jlbrdjlbrdPNG  IHDR pHYs  gAMA|Q cHRMz%u0`:o_FPLTEf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3¾tyftZwuq~zָg_RΣܸǬն¾۷M$^!tRNSS% IDATxb8+Elb{߯& Aj|e 3f &g+3TͿ yk:@?#3?^QyR(@P]30@P̏ALa`XD  XJD?12 ">2T@s>:_  j69f`FjZRIENDB`qdevelop-v0.28/resources/images/undo.png0000644000175000017500000000177211362261070017363 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGD pHYs ?@"tIME 85G _ wIDATxKlUvxAB-CESDixURTV *U."Ab .*  RBB MidIOa1wm=|sÛth'$60`T4̌e`My$kϿ1F7r̦ b`K-^yIhj ;3"ܾܶ0g_~MSHfk@ I:d&*5ESs\ջ?PCIhJgM]qn5O{ A MbW'aT8A ')\ ɋjx7ynixh z {^8Q,qHp Xnc=QK2?M4 ”8*?"|A;Αʅ 1RN7io-t _ =E9xv#lDݮ{8,-q9lIJG}/;k$><2 ][u8;1-uF:RϗTsFJWױҫ !x#/c>7R@]bui{ejQn; [DCNĘ&".Q`yjm;"M{4@<)R% W ^7z@}b+zeqmg[xL?\)b灀W=P'NxL;peDڭ#IDATxb?0222[kk]`i`` S yr[M`2A|"`&&|A5x ï_> Y(5HÇpq" ߾}[ 0| `j;0| ʐҖb:Dɓ 7XS @$ŷo?[WWgx%üy/{1++L-@o~0=zdÃ/Vs(8iRd}2쬌l l, ; ?J0xxX ]l`~p\b,>V "@SYg`>A./SL V 6d{Ʌ:n$H[k6o%<afΜ6cx,Ý @pg̏vp ëOs6`ϩ _ J7?n0@S?\e2$ ?2AґABAݗ_ŝs>M. ?޽0_ssa75?.pf`/;U7VN<@I.)y)} a?gq?3/o _awLk 0n<$:DZ`d(`de%0L{\)31~e`ï? k?}`CzW'y~^V?3Lsp03ԴOťQ mWh0 bre01/`><҆W .9< @,PSOx`g=Ϡ&`k(ۅ{/1  x >. rx#? 7d:n[34)P X]'+SI~,,u _ab^IZjs  0l@[Ocg``8l0;y hB {^3(2I0p1|} ~gÏ j ?YYN݃wWeE @+[Kt޾/g7@9×@O ݇ o^d ><c޿ L˟?C` +[Dn=a`^ w |+o X-|d-@Wbcq`1?k1L@@?`|pp`a`xdx/@~  h·^𗅝50g˰ ps3?Ë/ <@H*$Y>A?x1( 03߷ 7`'W U*;&HI]7)w+eԸJNFvrn{U1?qdevelop-v0.28/resources/images/breakpoint.png0000644000175000017500000000045211362261070020546 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME!$+IDATx CEn:RS"uR!?X:>e&0Jo*0|"8 ƨz k( @^{)gB\4GʜNsJ4 GjW8֓ymn1-g\ֵc _^nA-p <^i*vǿ;OҠlIENDB`qdevelop-v0.28/resources/images/fileprint.png0000644000175000017500000000175111362261070020407 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME G?+vIDATxڝK#WǿoEЎ]j!n]TY<RxѓCٿR(=C!K=UC!b!֚D7L{uBq?̏y}?%h񙙙ƺRJpAA&IOA[u]CCCZcsu8!8>>`Bȭ`qj5B9#Z)7JqwŝVJczs~Ce3 Z1b듑H$Fijjmm{gX,pt:ު뫾wvvUU!s0朣Z>issnɳ'ګVAoo###Ju707`08977f2M?}E(~5M#̓!^Ͳ,qttTlll|Gt׵Hkmbeee5|Dcp8 utt%O+pA]]] (Pz-9PJSmeAq+xn+la\ !cs\[BTUV*a_@2vK%wA !PUDxi˿iri8<OH)ϳZ,RS.w Bz<iUU*E|Kχl6LT*k @r\.s XsE]/{'ɗxKwsG;ں'xJBPX0O-IENDB`qdevelop-v0.28/resources/translations/QDevelop_Turkish.ts0000644000175000017500000045502311362261067022774 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Sürüm</span></p></body></html> OK Tamam <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Varolan Dosyaları Ekle Project or Scope : Proje veya Alan : File : Dosya : Copy files here: Dosyaları buraya kopyala: ... ... OK Tamam Cancel İptal AddExistantImpl Enter a filename. Bir dosya adı girin. Cancel İptal Enter a location destination. Bir hedef konum seçin. Choose a directory Bir dizin seçin Choose the file to add Eklenecek dosyayı seçin The file %1 doesn't exist. %1 adlı dosya mevcut değil. Unable to copy %1 %1 kopyalanamıyor Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Yeni Öğe Ekle Files Dosyalar Translation Çeviri Resources Veri Kaynakları Dialog Diyalog Header Başlık Sources Kaynaklar Project or Scope: Proje veya Alan: File Name : Dosya Adı : Location : Konum : newfile.cpp yenidosya.cpp ... ... OK Tamam Cancel İptal AddNewClass Add New Class Yeni Sınıf Ekle OK Tamam Cancel İptal Inheritance Kalıtım Inherits another class Başka bir sınıfı miras alır Ancestor: Ata: Ancestor's include filename: Ataya ait başlık dosyası: Scope: Alan: Filenames Dosya Adları Header filename: Başlık dosyaları: Implementation filename: Tanım dosyaları: Location : Konum: ... ... Project or Scope: Proje veya Alan: Class name: Sınıf adı: Constructor arguments: Yapıcı argümanları: Virtual destructor Sanal yıkıcı AddNewClassImpl Choose the file location Dosya konumunu seçin Cancel İptal Unable to create file. Dosya oluşturulamıyor. The file "%1" already exists. "%1" dosyası zaten var. AddNewClassMethod Add New Method Yeni Metod Ekle Method Name: Metod adı: Return type: Dönüş tipi: Parameters: Parametreler: Scope: Alan: Inline Virtual Static Pure OK Tamam Cancel İptal AddNewClassMethodImpl An implementation file is required. Bir tanım dosyası gerekli. Cancel İptal Add New Method in class %1 %1 sınıfına yeni metod ekle %1 already exists in class %2. %2 sınıfında %1 metodu zaten var. AddNewClassVariable Add New Variable Yeni Değişken Ekle Create get/set methods get/set metodları oluştur inline set method set metodu get method get metodu OK Tamam Cancel İptal Variable Name: Değişken adı: Type: Tip: Scope: Alan: AddNewClassVariableImpl Cancel İptal %1 already exists in class %2. %1 değişkeni %2 sınıfında zaten var. AddNewImpl Choose the file location Dosya konumunu seçin The suffix of the file is not correct. Dosya soneki doğru değil. Cancel İptal header başlık Yes Evet No Hayır Also create the file %1 in same location ? Aynı konumda %1 dosyasını da oluşturmak ister misiniz? source kaynak AddScope Add New Scope Yeni Alan Ekle New Scope Yeni Alan win32 debug unix release mac other Project or Scope : Proje veya Alan: OK Tamam Cancel İptal AddSetGet Add get/set methods get/set metodları ekle OK Tamam Cancel İptal Create get/set methods for get/set metodları oluştur inline set method set metodu get method get metodu AddSetGetImpl Cancel İptal BreakpointCondition Dialog Diyalog Condition : Koşul: is true (breakpoint) doğru olduğunda (kesme noktası) has changed (watchpoint) değiştiğinde (izleme noktası) Build Update project Projeyi güncelle Clean Project Projeyi Temizle Build İnşa Et Build stopped İnşa durdu Compilation of %1... %1 derleniyor... Debug Running... Çalıştırılıyor... Exited normally Normal bir şekilde sonlandı Debug... Hata Ayıkla... Debug exited Hata ayıklama bitti Error: Unable to evaluate value Hata: Değer değerlendirilemiyor Exited with error code %1 Editor Refresh classes and methods lists Sınıf ve metod listelerini yenile What do you want to do? Ne yapmak istiyorsunuz? Overwrite Üzerine Yaz Reload File Dosyayı Yeniden Yükle The file "%1" was modified outside editor. "%1" dosyası editör dışında bir yerde değiştirilmiş. Open %1 %1 dosyasını aç %1 replacement(s) made. %1 değiştirme yapıldı. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Tamam Cancel İptal Choose program to Debug : Hatası ayıklanacak programı seçin : Don't ask question anymore Daha fazla soru sorma FindFile Find in Files Dosyalarda Bul Pattern: Desen: Case Sensitive Büyük/küçük harf duyarlı Whole words Tam sözcükler Recursive Özyinelemeli *.cpp; *.h *.ui; *.qrc; *.txt Files: Dosyalar: ... ... Find in: Burada bul: &Find &Bul &Close &Kapat Replace found text Replace with: FindFileImpl Choose a directory Bir dizin seçin &Find &Bul &Stop &Dur Line Satır File Dosya Cannot open temporary file %1 FindWidget Form Previous Önceki Next Sonraki Case Sensitive Büyük/Küçük harf duyarlı Whole words Tam sözcükler Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor GotoLine Goto Line Satıra Git <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Satıra Git:</span></p></body></html> OK Tamam Cancel İptal InitCompletion Unable to launch %1 %1 çalıştırılamadı Unable to open %1 %1 açılamadı LineNumbers Toogle Bookmark Yer İmi Ekle/Kaldır Toogle Breakpoint Kesme Noktası Ekle/Kaldır Breakpoint Condition... Kesme Noktası Koşulu... LogBuild error hata warning uyarı error Compiler message hata undefined reference to Linker message warning Compiler message uyarı Main QDevelop &? &? &Debug &Hata Ayıkla &Build &İnşa Et &Edit &Düzen Plugins Eklentiler &View &Görünüm &File &Dosya &Project &Proje Outputs Çıktılar Build İnşa Et Name Ad Type Tip Address Adres Value Değer ... ... Project Explorer Proje Gezgini Files Dosyalar Classes Sınıflar Files toolbar Dosya Araç Çubuğu Edit Toolbar Düzen Araç Çubuğu &New Project... &Yeni Proje... &New File... &Yeni Dosya... New File Yeni Dosya &File... &Dosya... &Open Project... Proje &Aç... &Close All Files &Tüm Dosyaları Kapat &Save File Dosyayı &Kaydet Ctrl+S &Quit &Çık Undo Geri Al Ctrl+Z Redo Yinele Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Tümünü Seç Ctrl+A Ctrl+F Ctrl+R Ctrl+Shift+F Add New Item Yeni Öğe Ekle Ctrl+N Add Existing Files Varolan Dosyaları Ekle New Folder Yeni Klasör Project Properties Proje Özellikleri Clean Temizle Rebuild Yeniden İnşa Et Compile File Dosyayı Derle Shift+F7 Start Program Programı Başlat Shift+F5 Step Into İçeri adım at F11 Step Over Adım at F10 Calls Stack Çağrı Yığını &Open... &Aç... Ctrl+O F3 Stop Dur F6 Breakpoints... Kesme Noktaları... Indent selection Seçimi Girintile Tab Unindent selection Seçim Girintisini Azalt Shift+Tab F1 F7 Save Project As... Projeyi Farklı Kaydet... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Yorum İşareti Ekle Uncomment Yorum İşaretini Kaldır Complete Code Kodu Tamamla Ctrl+Space Toggle &Bookmark &Yer İmi Ekle/Kaldır Toggle Bookmark Yer İmi Ekle/Kaldır Ctrl+B Clear &All Bookmarks &Tüm Yer İmlerini Sil Ctrl+F2 F2 Shift+F2 Shift+F3 Goto matching bracket Eşleşen paranteze git Ctrl+[ Foo Hede &Print... &Yazdır... Alt+Shift+O &Bookmarks Yer İ&mleri &Last Projects &Son Projeler B&uild &Derle Las&t Files &Son Dosyalar &Tools &Araçlar &Plugins settings &Eklenti ayarları Ed&itors D&üzenleyiciler 1 Build and Debug Toolbar Derleme ve Hata Ayıklama Araç Çubuğu Call Stacks Çağrı Yığınları Registers Yazmaçlar Save File &as... Dosyayı &Farklı Kaydet... Save A&ll &Tümünü Kaydet &Undo &Geri Al &Redo &Yinele Cu&t &Kes &Copy &Kopyala &Paste Ya&pıştır &Find... &Bul... &Replace... &Değiştir... &Find in Files... Dosyalarda &Bul... Add New &Item... Yeni Öğe &Ekle... Add Existing &Files... Mevcut Dosyaları &Ekle... Project &Properties... Proje &Özellikleri... &Clean &Temizle &Rebuild &Yeniden Derle S&tart Program Programı &Başlat Step &Into İ&çeri Adım At Step O&ver &Adım At &Calls Stack &Çağrı Yığınları &Options... &Seçenekler... &Parameters... &Parametreler... &About... &Hakkında... About &Qt... &Qt Hakkında... Find &Next &Sonrakini Bul &Stop &Dur &Stop Build İnşayı &Durdur &Help Current Qt Word &Geçerli Qt Sözcüğü Hakkında Yardım &Reset Executables List Yürütülebilir Dosya Listesini &Sıfırla &Save Project Projeyi &Kaydet C&lose Project Projeyi Ka&pat Add &Scope... &Alan Ekle... Step &Out D&ışarı Adım At &Close Current Editor Geçerli Düzenleyiciyi &Kapat &Next Tab &Sonraki Sekme &Previous Tab &Önceki Sekme &Switch to Header/Sources Başlık/Kaynak Dosyasına &Geç Set &Focus to Editor Düzenleyiciye &Odaklan Toggle &breakpoint &Kesme noktası ekle/kaldır Goto &Methods List &Metod Listesine Git Configure &Shortcuts... Kısa&yolları Yapılandır... &Goto Line... &Satıra Git... Toggle Co&mments Yoru&mları Ekle/Kaldır E&xternal Tools... &Harici Araçlar... &Next Bookmark &Sonraki Yer İmi &Previous Bookmark &Önceki Yer İmi Find Pr&evious &Öncekini Bul Goto matching &bracket E&şleşen Paranteze Git Add New &Class... Yeni &Sınıf Ekle... Open F&ile in project... Proje İçindeki Bir Dosyayı A&ç... Goto &Implementation &Tanıma Git Goto &Declaration &Duyuruya Git &Rebuild Qt classes database Qt Sınıfları &Veritabanını Yeniden Oluştur Execute &qmake &qmake'i Çalıştır Show Maximized B&üyütülmüş Göster &Editor mode &Düzenleyici Kipi Ctrl+E Next Warning/Error &Sonraki Uyarı/Hata F4 Previous Warning/Error &Önceki Uyarı/Hata Shift+F4 Clear all Warnings/Errors Tüm Uyarı ve Hataları Temi&zle &Toolbars Araç &Çubukları Dock windows Yüzen pencereler Local Variables Yerel Değişkenler Other Variables Diğer Değişkenler Find in files Dosyalarda bul Full view Tam görünüm Minimal view Minimal görünüm DocksWindow Dock Windows Yüzen Pencereler New submenu > Yeni altmenü a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Oluşturulacak dosyayı seçin Files Dosyalar Cancel İptal Do you want to quit QDevelop ? QDevelop'tan çıkmak istiyor musunuz? Yes Evet No Hayır Choose a file to open Açmak için bir dosya seçin Sources Kaynaklar Projects Projeler Texts Metinler All Files Tüm Dosyalar Choose a project to open Açmak için bir proje seçin Files (*.cpp *.h *.txt *.* *) Dosyalar (*.cpp *.h *.txt *.* *) Stop Dur Build finished without error İnşa hatasız bitti Build finished with İnşa sonuçları error(s) hata and ve warning(s) uyarı Start Başla The project has been modified, do you want to save your changes ? Proje değiştirildi. Değişiklikleri kaydetmek istiyor musunuz? Stop debugging ? Hata ayıklama sonlansın mı? run Build. İnşayı başlat. Ok Tamam Shift+F5 F5 Abort Durdur Stopping is not possible under Windows. Put breakpoints. Windows altında durdurmak mümkün değil. Kesme noktaları koyun. Continue Devam &%1 %2 &%1 %2 New Variable: Yeni Değişken: The file "%1" already exists in directory. "%1" dosyası dizin içinde zaten mevcut. Unable to create %1 %1 oluşturulamadı The project %1 doesn't exist. %1 projesi mevcut değil. Properties of %1... %1 Özellikleri... The program doesn't exist, Program mevcut değil, The variable "%1" already exists. "%1" değişkeni zaten mevcut. The Qt include directory doesn't exist, You can change in Options dialog. Qt include dizini mevcut değil. Seçenekler penceresinden dizin yolunu değiştirebilirsiniz. The Qt database building is already in progress. Qt veritabanı şu an zaten oluşturulmakta. The Qt classes database build is ended. Qt veritabanı oluşturma işlemi bitti. Version %1 Sürüm %1 Cannot launch Linguist NewImplementation New Implementation Yeni Tanım Class Name : Sınıf Adı : File Name : Dosya Adı : Location : Konum : ... ... &Ok &Tamam C&ancel &İptal NewProject New project creation Yeni proje oluşturma Template Şablon Application with Dialog Diyaloglu Uygulama Application with Main Window Ana Pencereli Uygulama Properties Özellikler Parent project : Üst proje : Project name : Proje adı : Location : Konum : ... ... Project creation on : Projenin oluşturulacağı yer: Version Sürüm Debug Version Hata Ayıklama Sürümü Release Version Yayımlanma Sürümü OK Tamam Cancel İptal Sub-directories Alt dizinler Dialogs: Diyaloglar: Executable: Çalışabilir dosya: ui bin sources: kaynaklar: Objects: Nesneler: src build Inheritance subclassing Kalıtım alt sınıflama Object name: Nesne adı: File name: Dosya adı: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diyalog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Alt Sınıf:</span></p></body></html> Empty or master project Boş ya da temel proje NewProjectImpl Choose the project directory Proje dizinini seçin The directory "%1" cannot be created "%1" dizini oluşturulamadı Cancel İptal The project cannot be created Proje oluşturulamıyor Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Diyalog OK Tamam Cancel İptal Qt Variables Qt Değişkenleri User Variable Kullanıcı değişkeni Variable : Değişken : New Variable : Yeni Değişken : Operator : İşleç: = += -= *= ~= OpenFile Open File in Project Projedeki Bir Dosyayı Aç OK Tamam Cancel İptal Options Options Seçenekler General Genel Prompt before quit Çıkmadan önce sor Show classes explorer Sınıf gezginini göster Interval between updates: Güncelleme sıklığı: seconds saniye Default projects directory: Öntanımlı proje dizini: User plugins directory: Kullanıcı eklentileri dizini: ... ... Editor Düzenleyici options seçenekler Matching ( and { Eşleşen ( ve { Complete Code Kodu Tamamla Selection border Seçim kenarlığı Line numbers Satır numaraları Syntax highlighting Söz dizimi renklendirmesi Autoindent Otomatik girintileme Auto-Brackets Oto-Parantezler Font: Yazı tipi: End of line Satır sonu Tab size Sekme boyutu Current line background Geçerli satır arkaplanı Text background Metin arkaplanı Default Öntanımlı Unix Dos/Windows Replace Tab by spaces Sekmeleri boşlukla değiştir Function/method names : İşlev/metod adları : Preprocessor : Önişlemci : Qt words : Qt sözcükleri : Keywords : Anahtar sözcükler : Single comments : Tek satırlık yorumlar : Multiline comments : Çok satırlı yorumlar : Quotation strings : Tırnakla kapalı dizgiler : Save all before build Derleme öncesi tümünü kaydet Automatic compilation Otomatik derleme Qt include directory: Qt include dizini: Qt documentation directory: Qt belgeleri dizini: Make extra parameters: Make ek parametreleri: Reload last project when the application starts Uygulama başladığında son projeyi yükle Close button in each tab (does not work with all styles) Her sekmede kapatma düğmesi (tüm stillerde çalışmaz) Display editor toolbars Düzenleyici araç çubuklarını göster Display white spaces Görünmez karakterleri belirt Files encoding: Dosya kodlaması: Text color Metin rengi Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Proje dizinini seçin Param Program parameters Program parametreleri Run with these arguments: Bu argümanlarla çalıştır: Working directory (leave empty to use project directory): Çalışma dizini (proje dizini için boş bırakın): ... ... Environment variables (NAME=value): Çevre değişkenleri (İSİM=değer): Name İsim Value Değer &Edit &Düzenle &Add &Ekle &Delete &Sil &Sort Sı&rala &Default &Öntanımlı &OK &Tamam &Cancel &İptal ParametersImpl Choose the project location Proje konumunu seçin Cancel İptal The variable "%1" already exists. "%1" değişkeni zaten mevcut. ProjectManager Project parsing Proje ayrıştırma Save project changes ? Proje değişiklikleri kaydedilsin mi? Yes Evet No Hayır Cancel İptal Forms: Formlar: Unable to create file. Dosya oluşturulamıyor. Ok Tamam Sub-project creation Alt-proje oluşturma Sub-Projects Alt-Projeler New name: Yeni ad: The kind of the new and the old filename is different ! Yeni ve eski dosya adları değişik türdeler! Rename Yeniden adlandır Sub-projects Alt-projeler Headers Başlıklar Sources Kaynaklar Dialogs Diyaloglar Translations Çeviriler Resources Veri Kaynakları The file already exists in directory. Dosya zaten dizinde mevcut. The file already exists. Dosya zaten var. This file is not permitted. Bu dosya için yetki yetersiz. Unable to rename the file to "%1" Dosya "%1" olarak yeniden adlandırılamadı The only available version for "%1" is %2 "%1" için tek uygun sürüm %2 Run on %1 %1 üzerinde çalıştır Cannot remove the main project. Ana proje silinemez. Do you want to remove "%1" from the project ? "%1" adlı öğeyi projeden silmek istiyor musunuz? File not found: "%1" ProjectPropertie Dialog Diyalog Project Template Proje Şablonu app lib subdirs Project or Scope : Proje veya Alan: Default directories Öntanımlı dizinler Dialogs: Diyaloglar: ... ... Sources: Kaynaklar: Configuration Yapılandırma General : Genel : Version Sürüm build_all debug release debug_and_release Warnings Uyarılar warn_off warn_on Qt Libraries Qt Kitaplıkları core network sql xml gui opengl svg qt3support Advanced Options Gelişmiş Seçenekler app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qtestlib resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Değişkenler Variable : Değişken : Values : Değerler : OK Tamam Cancel İptal Advanced options Gelişmiş seçenekler Free CONFIG variables : Serbest CONFIG değişkenleri: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Yeni Değer: delete spaces or put quotes. boşlukları silin ya da tırnak kullanın. Modify Değiştir Cancel İptal Choose the sources location Kaynakların konumunu seçin Choose the dialogs location Diyalogların konumunu seçin Properties of %1 %1 Özellikleri The spaces aren't correctly parsed by qmake Boşluklar qmake tarafından düzgün bir şekilde ayrıştırılamıyor A new variable can not be "QT", "CONFIG" or "TEMPLATE" Yeni değişken "QT", "CONFIG" veya "TEMPLATE" olamaz QObject Unable to start Assistant ! Asistan başlatılamıyor! Unable to start Designer ! Tasarımcı başlatılamıyor! Loading: Yükleniyor: Interface translation Arayüz çevirisi Environment control Çevre denetimi Files on editor Düzenleyicideki dosyalar Plugins Eklentiler Main Window creation Ana Pencerenin Oluşturulması Unable to establish a database connection. Veritabanı bağlantısı kurulamıyor. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop SQLite desteğine ihtiyaç duyar. Lütfen nasıl inşa edileceğini öğrenmek için Qt SQL sürücüsü belgesini okuyun. Current project parsing Geçerli proje ayrıştırılıyor Registers Form Name İsim Value Değer Apply Uygula ReplaceWidget Form find: Bul: Replacement: Değiştir: &Replace &Değiştir Previous Önceki Next Sonraki Case Sensitive Büyük/küçük harf duyarlı Whole words Tam sözcükler Prompt Önce Sor Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor Shortcuts Configure Shortcuts Kısayolları Yapılandır Action Eylem Shortcut Kısayol Default Öntanımlı OK Tamam Cancel İptal Subclassing Qt Designer Form Subclassing Qt Tasarımcı Formu Alt Sınıf Oluşturma Class Na&me: Sınıf A&dı: &New... &Yeni... &File Name: &Dosya Adı: &Location: &Konum: Filter &by: &Süzme ölçütü: &Create &Oluştur C&ancel &İptal SubclassingImpl &Update &Güncelle C&reate &Oluştur (.h and .cpp) (.h ve .cpp) Choose the file location Dosya konumunu seçin TabWidget Close Tab Sekmeyi Kapat Close Other Tabs Diğer Sekmeleri Kapat Close All Tabs Tüm Sekmeleri Kapat TextEdit Cancel İptal Yes Evet No Hayır Goto Implementation Tanıma Git Goto Declaration Duyuruya Git Cut Kes Copy Kopyala Paste Yapıştır Selection Indent Seçimi Girintile Selection Unindent Seçim Girintisini Azalt Select All Tümünü Seç Find... Bul... Toggle Bookmark Yer İmi Ekle/Kaldır Toggle Breakpoint Kesme Noktası Ekle/Kaldır The file "%1" could not be loaded. "%1" dosyası yüklenemedi. Save "%1" "%1" Dosyasını Kaydet Unable to save %1 %1 kaydedilemiyor The Qt database building is in progress. Try to complete code later. Qt veritabanı oluşturma işlemi şu an sürüyor. Kod tamamlamayı sonra deneyin. Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor ToolsControl External Tools Harici Araçlar Check environment on start Açılışta çevreyi denetle &Test &Sına Please enter the path to the external programs: Lütfen harici programların yollarını girin: ctags: ctags: ... ... linguist: linguist: assistant: assistant: gdb: gdb: designer: designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: ToolsControlImpl Ok Tamam Ctags was detected in path %1, but this version is too old. Ctags %1 dizininde algılandı; fakat bu sürüm çok eski. Please select the program TreeClasses Open Declaration Duyuruyu Aç Open Implementation Tanımı Aç Add Method... Metod Ekle... Add Variable... Değişken Ekle... Add get/set Methods... get/set Metodları Ekle... Refresh contents İçeriği yenile TreeProject Add sub-project... Alt-proje ekle... Add New Item... Yeni Öğe Ekle... Add Scope... Alan Ekle... Add New Class... Yeni Sınıf Ekle... Add Existing Files... Varolan Dosyaları Ekle... Open in Linguist Dilcide Aç Refresh translation files Çeviri dosyalarını yenile Build release translation files Sürüm çeviri dosyalarını inşa et Open in Designer Tasarımcıda Aç Dialog Subclassing... Diyalog için Alt Sınıf Oluşturma... Dialog Preview Diyalog Önizleme Open Rename... Yeniden Adlandır... Show As Gösterim Normal Krawek Properties of %1... %1 Özellikleri... Remove from project Projeden sil Warning Dialog Diyalog TextLabel OK Tamam Don't show anymore Bir daha gösterme qdevelop-v0.28/resources/translations/QDevelop_German.ts0000644000175000017500000047662011362261067022562 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Version - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Hauptentwickler: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code-Vervollständigung: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Entwickler: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Entwickler: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Entwickler: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Entwickler: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Entwickler: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Paket-Ersteller: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Bestehende Dateien hinzufügen OK Cancel Abbrechen Project or Scope : Projekt oder Gültigkeitsbereich: File : Datei: ... Copy files here: Dateien hierher kopieren: AddExistantImpl Choose the file to add Hinzuzufügende Datei auswählen Enter a filename. Geben Sie einen Dateinamen an. Cancel Abbrechen Enter a location destination. Geben Sie ein Zielverzeichnis an. Choose a directory Wählen Sie ein Verzeichnis aus The file %1 doesn't exist. Die Datei %1 existiert nicht. Unable to copy %1 Kann %1 nicht kopieren Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Dateien (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Neues Element hinzufügen Files Dateityp Translation Übersetzung Resources Ressource Dialog Dialog Header Header-Datei Sources Quell-Datei Project or Scope: Projekt oder Gültigkeitsbereich: File Name : Dateiname: Location : Ort: ... OK Cancel Abbrechen newfile.cpp AddNewClass OK Cancel Abbrechen Inheritance Vererbung Inherits another class Beerbt eine andere Klasse Ancestor: Vorfahr: Ancestor's include filename: Include-Datei des Vorfahrs: Scope: Gültigkeitsbereich: Filenames Dateinamen Header filename: Dateiname des Headers: Implementation filename: Dateiname der Implementierung: Location : Ort: ... ... Project or Scope: Projekt oder Gültigkeitsbereich: Class name: Name der Klasse: Constructor arguments: Argumente des Konstruktors: Virtual destructor Virtueller Destructor Add New Class Neue Klasse hinzufügen AddNewClassImpl Choose the file location Wählen Sie einen Speicherort aus Cancel Abbrechen Unable to create file. Datei kann nicht erzeugt werden. The file "%1" already exists. Die Datei "%1" existiert bereits. AddNewClassMethod Add New Method Neue Methode hinzufügen Method Name: Name der Methode: Return type: Rückgabetyp: Parameters: Parameter: Scope: Gültigkeitsbereich: Inline Virtual Static Pure OK Cancel Abbrechen AddNewClassMethodImpl An implementation file is required. Es wird eine Implementierungs-Datei benötigt. Cancel Abbrechen Add New Method in class %1 Füge neue Methode zur Klasse %1 hinzu %1 already exists in class %2. %1 existiert bereits in Klasse %2. AddNewClassVariable Add New Variable Neue Variable hinzufügen Create get/set methods Erstelle get/set-Methoden inline set method set-Methode get method get-Methode OK Cancel Abbrechen Variable Name: Variablenname: Type: Typ: Scope: Gültigkeitsbereich: AddNewClassVariableImpl Cancel Abbrechen %1 already exists in class %2. %1 existiert bereits in Klasse %2. AddNewImpl Choose the file location Wählen Sie einen Speicherort aus The suffix of the file is not correct. Die Dateiendung ist nicht korrekt. Cancel Abbrechen header header Yes Ja No Nein Also create the file %1 in same location ? Auch die Datei %1 am selben Ort erstellen? source Quell-Datei AddScope Add New Scope Neuen Gültigkeitsbereich hinzufügen New Scope Neuer Gültigkeitsbereich win32 debug unix release mac other anderer Project or Scope : Projekt oder Gültigkeitsbereich: OK Cancel Abbrechen AddSetGet Add get/set methods Füge get/set-Methoden hinzu OK Cancel Abbrechen Create get/set methods for Erstelle get/set-Methoden für inline set method set-Methode get method get-Methode AddSetGetImpl Cancel Abbrechen BreakpointCondition Dialog Condition : Bedingung: is true (breakpoint) ist wahr (Haltepunkt) has changed (watchpoint) hat sich geändert (Beobachtungspunkt) Build Update project Projekt aktualisieren Clean Project Projekt bereinigen Build Erstellen Build stopped Erstellen gestoppt Compilation of %1... Kompiliere %1... Debug Running... Läuft... Exited normally Normal beendet Debug... Debug... Debug exited Debug verlassen Error: Unable to evaluate value Fehler: Kann Eigeschaft nicht auswerten Exited with error code %1 Beendet mit Fehler-Code %1 Editor Refresh classes and methods lists Klassen- und Methodenlisten aktualisieren What do you want to do? Was möchten Sie tun? Overwrite Überschreiben Reload File Datei neu laden The file "%1" was modified outside editor. Die Datei "%1" wurde außerhalb des Editor verändert. Open %1 Öffne %1 %1 replacement(s) made. %1 Ersetzung(en) vorgenommen. The file "%1" disappeared from fisk. Die Datei "%1" wurde von der Festplatte entfernt. Recreate Wiederherstellen Close Schließen ExeChoice QDevelop QDevelop OK Cancel Abbrechen Choose program to Debug : Programm zum Debuggen auswählen: Don't ask question anymore Nicht mehr fragen FindFile Find in Files In Dateien suchen Pattern: Muster: Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Recursive Rekursiv *.cpp; *.h *.ui; *.qrc; *.txt Files: Dateien: ... ... Find in: Suchen in: &Find &Suchen &Close &Schließen Replace found text Ersetze gefundenen Text Replace with: Ersetze durch: FindFileImpl Choose a directory Wähle das Projektverzeichnis aus Line Zeile File Datei &Find &Suchen &Stop &Stopp Cannot open temporary file %1 Kann temporäre Datei %1 nicht öffnen FindWidget Form Formular Previous Vorheriger Next Nächster Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt GotoLine Goto Line Zur Zeile gehen <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Zur Zeile gehen:</span></p></body></html> OK Cancel Abbrechen InitCompletion Unable to launch %1 Kann %1 nicht starten Unable to open %1 Kann %1 nicht öffnen LineNumbers Toogle Bookmark Lesezeichen ein/-ausschalten Toogle Breakpoint Haltepunkt ein-/ausschalten Breakpoint Condition... Haltepunktbedingung... LogBuild error Fehler warning Warnung error Compiler message Fehler undefined reference to Linker message warning Compiler message Warnung Main QDevelop QDevelop &? &? Build Erstellen &Edit &Bearbeiten &File &Datei Outputs Ausgaben Files Dateien Classes Klassen Files toolbar Datei-Werkzeugleiste Edit Toolbar Bearbeiten-Werkzeugleiste &New Project... &Neues Projekt... &File... &Datei... &Close All Files A&lle Dateien schließen &Save File Datei &speichern Ctrl+S &Quit &Beenden Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Alles markieren Ctrl+F Add New Item Neues Element hinzufügen Add Existing Files Bestehende Dateien hinzufügen New Folder Neuer Ordner Project Properties Projekteigenschaften F7 Clean Bereinigen Rebuild Neu erstellen Compile File Datei kompilieren Shift+F7 Start Program Programm starten Shift+F5 Step Into In Anweisung gehen F11 Step Over Anweisung übergehen F10 &Open... &Öffnen... F3 Stop Stopp F6 Breakpoints... Haltepunkte... Indent selection Markierten Bereich einrücken Tab Unindent selection Markierten Teil ausrücken Shift+Tab F1 Project Explorer Projekt-Explorer Save Project As... Projekt speichern unter... Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Undo Rückgängig Redo Wiederholen F9 &View &Ansicht &Project &Projekt &Build &Erstellen &Debug &Debug Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Code vervollständigen Ctrl+Space Ctrl+D &New File... &Neue Datei... New File Neue Datei Comment Kommentieren Uncomment Auskommentieren Calls Stack Aufruf-Stack Local Variables Lokale Variablen Name Name Type Typ Address Adresse Value Wert Other Variables Andere Variablen ... ... Toggle &Bookmark Lesezeichen &ein-/ ausschalten Toggle Bookmark Lesezeichen ein-/ ausschalten Ctrl+B Clear &All Bookmarks &Alle Lesezeichen löschen &Open Project... Projekt &öffnen... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Erweiterungen Ctrl+N Goto matching bracket Zu passender Klammer gehen Ctrl+[ Foo &Print... &Drucken... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Lesezeichen Ed&itors Ed&itoren &Tools &Werkzeuge &Plugins settings Er&weiterungs-Einstellungen &Last Projects &Zuletzt geöffnete Projekte B&uild &Erstellen Las&t Files &Zuletzt geöffnete Dateien Save File &as... Datei speichern &unter... Save A&ll &Alle speichern &Undo &Rückgängig &Redo &Wiederherstellen Cu&t &Ausschneiden &Copy &Kopieren &Paste &Einfügen &Find... &Suchen... &Replace... &Ersetzen... &Find in Files... In &Dateien suchen... Add New &Item... Neues &Element hinzufügen... Add Existing &Files... &Bestehende Dateien hinzufügen... Project &Properties... &Projekteigenschaften... &Clean &Bereinigen &Rebuild &Neu erstellen S&tart Program &Programm starten Step &Into In &Anweisung gehen Step O&ver Anweisung &übergehen &Calls Stack Aufruf-&Stack &Options... &Optionen... &Parameters... P&arameter... &About... &Über... About &Qt... Über &Qt... Find &Next &Nächsten finden &Stop &Stopp &Stop Build Erstellung &stoppen &Help Current Qt Word &Hilfe für momentane Qt-Phrase &Reset Executables List Liste ausführbarer Dateien &zurücksetzen &Save Project Projekt &speichern C&lose Project Projekt s&chließen Add &Scope... &Gültigkeitsbereich hinzufügen... Step &Out Anweisung &verlassen &Close Current Editor Aktiven Editor &schließen &Next Tab &Nächster Reiter &Previous Tab &Vorheriger Reiter &Switch to Header/Sources Zu Header-/Quelldateien &wechseln Set &Focus to Editor &Fokus auf Editor setzen Toggle &breakpoint &Haltepunkt ein-/ausschalten Goto &Methods List Zeige &Methodenliste Configure &Shortcuts... &Tastaturkürzel konfigurieren... &Goto Line... Zur &Zeile gehen... Toggle Co&mments Ko&mmentare ein-/ ausschalten E&xternal Tools... &Externe Werkzeuge... &Next Bookmark &Nächstes Lesezeichen &Previous Bookmark &Vorheriges Lesezeichen Find Pr&evious &Vorheriges finden Goto matching &bracket Zu &passender Klammer gehen Add New &Class... Neue &Klasse hinzufügen... Open F&ile in project... Öffne Datei des &Projekts... Goto &Implementation Gehe zur &Implementierung Goto &Declaration Gehe zur &Deklaration &Rebuild Qt classes database Datenbank für Qt-Klassen &neu erstellen 1 Build and Debug Toolbar Erstellen- und Debug-Werkzeugleiste Call Stacks Aufruf-Stacks Registers Register Execute &qmake &qmake ausführen Show Maximized Maximieren &Editor mode &Editor-Modus Ctrl+E Next Warning/Error Nächste(r) Warnung/Fehler F4 Previous Warning/Error Vorherige(r) Warnung/Fehler Shift+F4 Clear all Warnings/Errors Entferne alle Warnungen und Fehler &Toolbars &Toolbars Dock windows Docks Find in files In Dateien suchen Full view Voll-Ansicht Minimal view Minimal-Ansicht DocksWindow Docks Dock Windows Docks New submenu > Neues Untermenü > a a En&force qmake mode Er&zwinge qmake-Modus &Debug mode &Debug-Modus &Release mode &Release-Modus &Forget last used mode Zuletzt benutzten Modus &vergessen MainImpl Cancel Abbrechen Choose a file to open Zu öffnende Datei auswählen Choose the file to create Zu erstellende Datei auswählen Files (*.cpp *.h *.txt *.* *) Dateien (*.cpp *.h *.txt *.* *) Stop Stopp Start Start The project has been modified, do you want to save your changes ? Das Projekt wurde verändert. Möchten Sie die Änderungen speichern ? Yes Ja No Nein run Build. starte Erstellen. Ok OK Stop debugging ? Debugging beenden? Abort Abbrechen Continue Fortsetzen &%1 %2 &%1 %2 Do you want to quit QDevelop ? Möchten Sie QDevelop beenden? Shift+F5 F5 Files Dateien Sources Quell-Dateien Projects Projekte Texts Texte All Files Alle Dateien Stopping is not possible under Windows. Put breakpoints. Stoppen ist unter Windows nicht möglich. Setze Haltepunkte. New Variable: Neue Variable: Choose a project to open Wählen Sie ein Projekt aus, das geöffnet werden soll Build finished without error Erstellung ohne Fehler abgeschlossen Build finished with Erstellung abgeschlossen mit error(s) Fehler(n) and und warning(s) Warnung(en) The file "%1" already exists in directory. Die Datei "%1" existiert bereits in diesem Verzeichnis. Unable to create %1 Kann %1 nicht erstellen The project %1 doesn't exist. Das Projekt %1 existiert nicht. Properties of %1... Eigenschaften von %1... The program doesn't exist, Das Programm existiert nicht, The variable "%1" already exists. Die Variable "%1" existiert bereits. The Qt database building is already in progress. Die Qt-Datenbank wird bereits neu gebaut. The Qt classes database build is ended. Das Erstellen der Qt-Datenbank ist beendet. The Qt include directory doesn't exist, You can change in Options dialog. Das Qt-Include-Verzeichnis existiert nicht, du kannst es in den Optionen ändern. Version %1 Version %1 Cannot launch Linguist Kann Linguist nicht starten NewImplementation New Implementation Neue Implementierung &Ok &OK C&ancel &Abbrechen File Name : Dateiname: Class Name : Name der Klasse: Location : Ort: ... ... NewProject New project creation Neues Projekt erstellen Parent project : Elternprojekt: Project name : Projektname: Location : Ort: ... ... Project creation on : Projekterzeugung in: OK Cancel Abbrechen Template Vorlage Application with Dialog Anwendung mit Dialog Application with Main Window Anwendung mit Hauptfenster Properties Eigenschaften Version Version Debug Version Debug-Version Release Version Release-Version Sub-directories Unterverzeichnisse Dialogs: Dialoge: Executable: Ausführbare Datei: ui bin sources: Quellen: Objects: Objekte: src build Inheritance subclassing Klassen und Dateien des Dialogs Object name: Objektname: File name: Dateiname: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog (ui-Datei):</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Abgeleitete Klasse:</span><br />(eigentl. Implementierung)</p></body></html> Empty or master project Leeres oder Meta-Projekt NewProjectImpl Choose the project directory Wählen Sie das Projektverzeichnis aus The directory "%1" cannot be created Das Verzeichnis "%1" kann nicht erstellt werden Cancel Abbrechen The project cannot be created Das Projekt kann nicht erzeugt werden Project file "%1" already exists Projekt-Datei "%1" existiert bereits The directory "%1" already exists. Do you want to create project anyway? Das Verzeichnis "%1" existiert bereits. Willst du das Porjekt trotzdem erstellen? NewVariable Dialog Dialog OK OK Cancel Abbrechen Qt Variables Qt-Variablen User Variable Benutzer-Variablen Variable : Variable: New Variable : Neue Variable: Operator : Operator: = += -= *= ~= OpenFile Open File in Project Öffne Datei des Projekts OK Cancel Abbrechen Options Options Optionen General Allgemein Editor Line numbers Zeilennummern Selection border Auswahlrand Autoindent automatisches Einrücken Syntax highlighting Syntaxhervorhebung Function/method names : Funktions-/Methodennamen: Preprocessor : Preprozessor: Qt words : Qt-Ausdrücke (Klassen etc.): Keywords : Schlüsselwörter: Single comments : Einzeilige Kommentare: Multiline comments : Mehrzeilige Kommentare: Quotation strings : Zeichenketten: ... Default Standard Replace Tab by spaces Tabulatoren durch Leerzeichen ersetzen Unix Dos/Windows Complete Code Code vervollständigen Prompt before quit Vorm Beenden nachfragen Font: Schriftart: End of line Zeilenende options Optionen Auto-Brackets Automatische Klammern Tab size Tabulator-Größe Current line background Hintergrundfarbe der aktiven Zeile Text background Texthintergrund Show classes explorer Klassenexplorer zeigen Interval between updates: Intervall zwischen Aktualisierungen: seconds Sekunden Default projects directory: Standardprojektverzeichnis: Matching ( and { Übereinstimmende ( und { User plugins directory: Pluginverzeichnis: Make extra parameters: Parameter für make: Qt include directory: Qt Include-Verzeichnis: Files encoding: Zeichensatz: Save all before build Vor dem Erstellen alles speichern Automatic compilation Automatisch kompilieren Qt documentation directory: Qt Dokumentations-Verzeichnis: Reload last project when the application starts Zuletzt geöffnetes Projekt beim Start laden Close button in each tab (does not work with all styles) Schließen-Button in jedem Tab (funktioniert nicht bei allen Styles) Display editor toolbars Editor-Werkzeugleiste anzeigen Display white spaces Leerzeichen und Tabs darstellen Text color Textfarbe Right margin line Rechter Rand Column: Spalte: Auto-Comments Automatische Kommentare <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Mehrzeiliger</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Kommentar </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Einzeiliger Kommentar </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Zeilenumbruch Hide Find/Replace panels after Verstecke Suchen/Ersetzen-Leiste nach sec. Sekunden. Ctrl+click = Go to implementation, Meta+click = Go to declaration Strg+klick = Gehe zur Implementierung, Meta+klick = Gehe zur Deklaration OptionsImpl Choose the project directory Wähle Sie das Projektverzeichnis aus Param Program parameters Programm-Parameter Run with these arguments: Mit diesen Parametern ausführen: Working directory (leave empty to use project directory): Arbeitsverzeichnis (leer lassen, um Projektverzeichnis zu nutzen): ... ... Environment variables (NAME=value): Umgebungsvariablen (NAME=Wert): Name Name Value Wert &Edit &Bearbeiten &Add &Hinzufügen &Delete &Löschen &Sort &Sortieren &Default &Standard &OK &Cancel &Abbrechen ParametersImpl Choose the project location Wählen Sie das Projektverzeichnis aus Cancel Abbrechen The variable "%1" already exists. Die Variable "%1" existiert bereits. ProjectManager Save project changes ? Projektänderungen speichern? Yes Ja No Nein Cancel Abbrechen Forms: Formulare: Unable to create file. Datei kann nicht erzeugt werden. Ok OK Sub-project creation Unterprojekterstellung Sub-Projects Unterprojekte Sub-projects Unterprojekte Headers Header-Dateien Sources Quell-Dateien Dialogs Dialoge Translations Übersetzungen Resources Ressourcen Project parsing Projekt analysieren New name: Neuer Name: The kind of the new and the old filename is different ! Die Endung von dem alten und dem neuen Dateinamen ist verschieden! Rename Umbennen The file already exists in directory. Die Datei existiert bereits im Verzeichnis. The file already exists. Die Datei existiert bereits. This file is not permitted. Diese Datei ist nicht erlaubt. Unable to rename the file to "%1" Kann die Datei "%1" nicht umbenennen The only available version for "%1" is %2 Die einzige verfügbare Version von "%1" ist %2 Run on %1 Starte als %1 Cannot remove the main project. Das Hauptprojekt kann nicht entfernt werden. Do you want to remove "%1" from the project ? Willst du "%1" aus dem Projekt entfernen? File not found: "%1" Datei nicht gefunden: "%1" ProjectPropertie Dialog Dialog Configuration Konfigurationen General : Allgemein: Version Version build_all debug release debug_and_release Warnings Warnungen warn_off warn_on Qt Libraries Qt-Bibliotheken core network sql xml gui opengl svg qt3support Advanced Options Erweiterte Optionen app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variablen Variable : Variable: ... ... Values : Werte: Project Template Projektvorlage subdirs lib app Project or Scope : Projekt oder Gültigkeitsbereich: OK Cancel Abbrechen Default directories Default Verzeichnisse Dialogs: Dialoge: Sources: Quelltexte: qtestlib Advanced options Erweiterte Optionen Free CONFIG variables : Eigene CONFIG-Variablen: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Neuer Wert: delete spaces or put quotes. Leerzeichen löschen oder Anführungszeichen setzen. Modify Ändern Cancel Abbrechen Choose the sources location Wähle das Sourceverzeichnis Choose the dialogs location Wähle das Dialogverzeichnis Properties of %1 Eigenschaften von %1 The spaces aren't correctly parsed by qmake Die Leerzeichen werden von qmake nicht korrekt interpretiert A new variable can not be "QT", "CONFIG" or "TEMPLATE" Die neue Variable kann nicht "QT", "CONFIG" oder "TEMPLATE" heißen QObject Unable to start Assistant ! Kann "Assistant" nicht starten! Loading: Lade: Interface translation Interface-Übersetzung Environment control Umgebungskontrolle Files on editor Dateien im Editor Main Window creation Hauptfenster-Erstellung Unable to establish a database connection. Kann keine Verbindung zur Datenbank aufbauen. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop benötigt SQLite-Unterstützung. Bitte lesen Sie dafür die Qt SQL Treiber Dokumentation. Current project parsing Aktuelles Projekt wird analysiert Plugins Erweiterungen Unable to start Designer ! Kann Designer nicht starten! Registers Form Formular Name Name Value Wert Apply Anwenden ReplaceWidget Form Formular find: Suchen: Replacement: Ersetzen durch: &Replace &Ersetzen Previous Vorheriger Next Nächster Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Prompt Bestätigung erfragen Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt Shortcuts Configure Shortcuts Tastaturkürzel konfigurieren Action Aktion Shortcut Kürzel Default Standard OK OK Cancel Abbrechen Subclassing Qt Designer Form Subclassing Ableiten von Qt-Designer-Formularen &Create &Erstellen C&ancel &Abbrechen &New... &Neu... Class Na&me: Klassenna&me: &File Name: &Dateiname: &Location: &Ort: Filter &by: Filtere &mit: SubclassingImpl Choose the file location Wählen Sie einen Speicherort aus &Update &Aktualisieren C&reate &Erstellen (.h and .cpp) (.h und .cpp) TabWidget Close Tab Reiter schließen Close Other Tabs Andere Reiter schließen Close All Tabs Alle Reiter schließen TextEdit Cancel Abbrechen Yes Ja No Nein Cut Ausschneiden Copy Kopieren Paste Einfügen Selection Indent Markierten Bereich einrücken Selection Unindent Markierten Bereich ausrücken Select All Alles markieren Find... Suchen... Toggle Bookmark Lesezeichen ein-/ ausschalten Toggle Breakpoint Haltepunkt ein-/ausschalten Goto Implementation Gehe zur Implementierung Goto Declaration Gehe zur Deklaration The file "%1" could not be loaded. Die Datei "%1" konnte nicht geladen werden. Save "%1" Speichere "%1" Unable to save %1 Kann %1 nicht speichern The Qt database building is in progress. Try to complete code later. Die Qt-Datenbank wird gerade neu aufgebaut. Bitte versuche es später erneut. Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt ToolsControl External Tools Externe Werkzeuge qmake: make: gdb: ctags: linguist: lupdate: lrelease: designer: ... &Test &Test Please enter the path to the external programs: Bitte geben Sie den Pfad zu den externen Programmen an: Check environment on start Umgebung beim Start überprüfen assistant: ToolsControlImpl Ok Ctags was detected in path %1, but this version is too old. Ctags wurde in %1 gefunden, allerdings in einer zu alten Version. Please select the program Bitte wähle das Programm aus TreeClasses Open Declaration Deklaration öffnen Open Implementation Implementierung öffnen Refresh contents Inhalte neu laden Add Method... Methode hinzufügen... Add Variable... Variable hinzufügen... Add get/set Methods... get/set-Methoden hinzufügen... TreeProject Add sub-project... Unterprojekt hinzufügen... Add New Item... Neues Element hinzufügen... Add Scope... Gültigkeitsbereich hinzufügen... Add Existing Files... Bestehende Dateien hinzufügen... Open in Linguist Mit Linguist öffnen Refresh translation files Übersetzungsdateien aktualisieren Build release translation files Erstelle fertige Übersetzungsdateien Open in Designer Im Designer öffnen Dialog Subclassing... Dialog-Implementierung... Dialog Preview Dialog-Vorschau Open Öffnen Show As Zeige als Normal Normal Krawek Add New Class... Neue Klasse hinzufügen... Rename... Umbennen... Properties of %1... Eigenschaften von %1... Remove from project Aus dem Projekt entfernen Warning Dialog TextLabel OK Don't show anymore Nicht mehr zeigen qdevelop-v0.28/resources/translations/QDevelop_Dutch.ts0000644000175000017500000045436711362261067022424 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versie</span></p></body></html> OK Akkoord <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Voeg bestaande bestanden toe OK Akkoord Cancel Annuleren Project or Scope : Project of Bereik : File : Bestand : ... Copy files here: Kopieer bestanden naar: AddExistantImpl Choose the file to add Selecteer toe te voegen bestand Enter a filename. Geef een bestandsnaam. Cancel Annuleren Enter a location destination. Geef een bestemmingslocatie. Choose a directory Kies een map The file %1 doesn't exist. Unable to copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Voeg nieuw Item toe Files Bestanden Translation Vertaling Resources Bronnen Dialog Venster Header Sources Project or Scope: Project of Bereik: File Name : Bestandsnaam : Location : Locatie : ... OK Akkoord Cancel Annuleren newfile.cpp AddNewClass OK Akkoord Cancel Annuleren Inheritance Inherits another class Ancestor: Ancestor's include filename: Scope: Filenames Header filename: Implementation filename: Location : Locatie : ... ... Project or Scope: Project of Bereik: Class name: Constructor arguments: Virtual destructor Add New Class AddNewClassImpl Choose the file location Kies de bestandslocatie Cancel Annuleren Unable to create file. Onmogelijk bestand te creëeren. The file "%1" already exists. AddNewClassMethod Add New Method Method Name: Return type: Parameters: Scope: Inline Virtual Static Pure OK Akkoord Cancel Annuleren AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Annuleren %1 already exists in class %2. AddNewClassVariable Add New Variable Create get/set methods inline set method get method OK Akkoord Cancel Annuleren Variable Name: Type: Scope: AddNewClassVariableImpl Cancel Annuleren %1 already exists in class %2. AddNewImpl Choose the file location Kies de bestandslocatie The suffix of the file is not correct. De extensie van de file is incorrect. Cancel Annuleren header Yes Ja No Nee Also create the file %1 in same location ? source AddScope Add New Scope Voeg nieuw Bereik toe New Scope Nieuw Bereik win32 debug unix release mac other anders Project or Scope : Project of Bereik : OK Akkoord Cancel Annuleren AddSetGet Add get/set methods OK Akkoord Cancel Annuleren Create get/set methods for inline set method get method AddSetGetImpl Cancel Annuleren BreakpointCondition Dialog Venster Condition : is true (breakpoint) has changed (watchpoint) Build Update project Clean Project Schoon Project op Build Compileren Build stopped Compileren beëindigd Compilation of %1... Debug Running... Gestart... Exited normally Beëindigd zonder fouten Debug... Debuggen... Debug exited Debuggen Beëindigd Error: Unable to evaluate value Fout: Onmogelijk waarde te evalueren Exited with error code %1 Editor Refresh classes and methods lists Vernieuw klassen en methoden lijst What do you want to do? Wat wilt u doen? Overwrite Overschrijven Reload File Bestand Herladen The file "%1" was modified outside editor. Open %1 %1 replacement(s) made. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Akkoord Cancel Annuleren Choose program to Debug : Kies programma om te Debuggen : Don't ask question anymore Deze vraag niet meer stellen FindFile Find in Files Zoek in Bestanden Pattern: Patroon: Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Recursive Recursief Files: Bestanden: ... ... Find in: Zoek in: &Find &Zoek &Close &Afsluiten *.cpp; *.h *.ui; *.qrc; *.txt Replace found text Replace with: FindFileImpl Choose a directory Kies een map &Find &Zoek Line Regel File Bestand &Stop &Stop Cannot open temporary file %1 FindWidget Form Scherm Previous Vorige Next Volgende Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin GotoLine Goto Line Ga naar Regel <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ga naar Regel:</span></p></body></html> OK Akkoord Cancel Annuleren InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Toon Markeringen Toogle Breakpoint Toon Onderbrekingspunt Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main QDevelop QDevelop &? &File &Bestand &Project &Build &Compileer &Debug &View &Beeld &Edit &Bewerken Outputs Uitvoer Build Compileren Project Explorer Project Verkenner Files toolbar Bestanden werkbalk Edit Toolbar Bewerken werkbalk &New Project... &Nieuw Project... &File... &Bestand... &Close All Files &Alle Bestanden Sluiten &Save File &Bestand Opslaan Ctrl+S &Quit &Afsluiten Undo Ongedaan maken Ctrl+Z Redo Herhalen Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Alles Selecteren Ctrl+A Ctrl+F Ctrl+R Add New Item Voeg nieuw Item toe Add Existing Files Voeg bestaande bestanden toe New Folder Nieuwe Map Project Properties Project Eigenschappen F7 Clean Opschonen Rebuild Hercompileren Compile File Compileer Bestand Shift+F7 Start Program Start Programma Shift+F5 Step Into Stap in F11 Step Over Stap over F10 &Open... &Open... Ctrl+O F3 Stop F6 Breakpoints... Onderbrekingspunten... Indent selection Selectie inspringen Tab Unindent selection Selecte uitspringen Shift+Tab F1 Files Bestanden Save Project As... Project Opslaan Als... Shift+F11 Ctrl+W Alt+Right Alt+Rechts Alt+Left Alt+Links Shift+F12 Esc F9 Ctrl+G Complete Code Complementeer Code Ctrl+Space &New File... &New File... New File Ctrl+D Comment Maak Commentaar Uncomment Maak code Classes Klassen Calls Stack Name Naam Type Address Adres Value Waarde ... Toggle &Bookmark Toon &Markeringen Toggle Bookmark Toon Markering Ctrl+B Clear &All Bookmarks &Verwijder Alle Markeringen &Open Project... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Ctrl+N Goto matching bracket Ctrl+[ Foo &Print... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Last Projects B&uild Las&t Files &Tools &Plugins settings Ed&itors 1 Build and Debug Toolbar Call Stacks Registers Save File &as... Save A&ll &Undo &Redo Cu&t &Copy &Paste &Find... &Replace... &Find in Files... Add New &Item... Add Existing &Files... Project &Properties... &Clean &Rebuild S&tart Program Step &Into Step O&ver &Calls Stack &Options... &Parameters... &About... About &Qt... Find &Next &Stop &Stop &Stop Build &Help Current Qt Word &Reset Executables List &Save Project C&lose Project Add &Scope... Step &Out &Close Current Editor &Next Tab &Previous Tab &Switch to Header/Sources Set &Focus to Editor Toggle &breakpoint Goto &Methods List Configure &Shortcuts... &Goto Line... Toggle Co&mments E&xternal Tools... &Next Bookmark &Previous Bookmark Find Pr&evious Goto matching &bracket Add New &Class... Open F&ile in project... Goto &Implementation Goto &Declaration &Rebuild Qt classes database Execute &qmake Show Maximized &Editor mode Ctrl+E Next Warning/Error F4 Previous Warning/Error Shift+F4 Clear all Warnings/Errors &Toolbars Dock windows Local Variables Other Variables Find in files Full view Minimal view DocksWindow Dock Windows New submenu > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Cancel Annuleren Do you want to quit QDevelop ? Wilt u QDevelop afsluiten? Yes Ja No Nee Choose a file to open Kies een te openen bestand Choose the file to create Kies het te creëeren bestand Files (*.cpp *.h *.txt *.* *) Bestanden (*.cpp *.h *.txt *.* *) Stop Start The project has been modified, do you want to save your changes ? Het project is gewijzigd, de wijziginen opslaan? Stop debugging ? Stop debuggen? run Build. start Compileren. Ok Akkoord Shift+F5 F5 Abort Afbreken Continue Doorgaan &%1 %2 &%1 %2 Files Bestanden Sources Projects Texts All Files Stopping is not possible under Windows. Put breakpoints. Stopping is not possible under Windows. Put breakpoints. New Variable: Nieuwe Variabele: Choose a project to open Build finished without error Build finished with error(s) and warning(s) The file "%1" already exists in directory. Unable to create %1 The project %1 doesn't exist. Properties of %1... The program doesn't exist, The variable "%1" already exists. The Qt include directory doesn't exist, You can change in Options dialog. The Qt database building is already in progress. The Qt classes database build is ended. Version %1 Cannot launch Linguist NewImplementation New Implementation Nieuwe Implementatie Class Name : Klassenaam : Location : Locatie : File Name : Bestandsnaam : ... &Ok &Akkoord C&ancel &Annuleren NewProject New project creation Nieuw project creëeren Parent project : Onderdeel van project : Project name : Project naam : Location : Locatie : ... Project creation on : Project creatie in : OK Akkoord Cancel Annuleren Template Voorbeeld Application with Dialog Applicatie met Venster Application with Main Window Applicatie met Hoofd Venster Properties Eigenschappen Version Versie Debug Version Debug Versie Release Version Release Versie Sub-directories Sub-mappen Dialogs: Vensters: Executable: Uitvoerbaar: ui bin sources: Objects: Objecten: src build Inheritance subclassing Overervende subklassering Object name: Object naam: File name: Bestandsnaam: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Venster:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subklasse:</span></p></body></html> Empty or master project NewProjectImpl Choose the project directory Kies de project map The directory "%1" cannot be created Cancel Annuleren The project cannot be created Het project kan niet gecreëerd worden Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Venster OK Akkoord Cancel Annuleren Qt Variables Qt Variabelen User Variable Gebruikers Variabelen Variable : Variabelen : New Variable : Nieuwe Variabele : Operator : = += -= *= ~= OpenFile Open File in Project OK Akkoord Cancel Annuleren Options Options Opties General Algemeen Prompt before quit Vragen voor afsluiten Editor Tekstvenster ... Font: Lettertype: Replace Tab by spaces Vervang Tab door spaties Default Standaard Unix Dos/Windows Line numbers Regelnummers Autoindent Automatisch inspringen Selection border Selectie rand Syntax highlighting Syntax accentuering Complete Code Complementeer Code Function/method names : Functie/methode namen : Preprocessor : Preprocessor : Qt words : Qt woorden : Keywords : Sleutelwoorden : Single comments : Enkele regel commentaar : Multiline comments : Meerdere regels commentaar : Quotation strings : Tekst strings : End of line options Auto-Brackets Automatische haakjes Tab size Tab grootte Current line background Achtergrond huidige regel Text background Achtergrond tekst Show classes explorer Toon klassen verkenner Interval between updates: Interval tussen updates: seconds seconden Default projects directory: Standaard projecten map: Matching ( and { User plugins directory: Save all before build Automatic compilation Qt include directory: Qt documentation directory: Make extra parameters: Reload last project when the application starts Close button in each tab (does not work with all styles) Display editor toolbars Display white spaces Files encoding: Text color Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Kies de project map Param Program parameters Programma parameters Run with these arguments: start met deze argumenten: Working directory (leave empty to use project directory): Werkmap (laat leeg om project map te gebruiken): ... Environment variables (NAME=value): Omgevings Variabelen (NAAM=waarde): Name Naam Value Waarde &Add &Toevoegen &Delete &Verwijderen &Sort &Sorteren &Default Stan&daard &OK &Akkoord &Cancel A&nnuleren &Edit &Bewerken ParametersImpl Choose the project location Kies de project locatie Cancel Annuleren The variable "%1" already exists. ProjectManager Save project changes ? Wijzigingen in project opslaan? Yes Ja No Nee Cancel Annuleren Forms: Schermen: Unable to create file. Onmogelijk bestand te creëeren. Ok Akkoord Sub-project creation Sub-project creatie Sub-Projects Sub-Projecten Sub-projects Sub-projecten Headers Sources Dialogs Vensters Translations Vertalingen Resources Bronnen Project parsing New name: The kind of the new and the old filename is different ! Rename The file already exists in directory. The file already exists. This file is not permitted. Unable to rename the file to "%1" The only available version for "%1" is %2 Run on %1 Cannot remove the main project. Do you want to remove "%1" from the project ? File not found: "%1" ProjectPropertie Dialog Venster Configuration Configuratie General : Algemeen : Version Versie build_all debug release debug_and_release Warnings Waarschuwingen warn_off warn_on Qt Libraries Qt Bibliotheken core network sql xml gui opengl svg qt3support Advanced Options Geavanceerde Opties app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variabelen Variable : Variabelen : ... Values : Waarden : Project Template Project Voorbeeld subdirs lib app Project or Scope : Project of Bereik : OK Akkoord Cancel Annuleren Default directories Dialogs: Vensters: Sources: qtestlib Advanced options Free CONFIG variables : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nieuwe Waarde: delete spaces or put quotes. verwijder spaties of zet aanhalingstekens neer. Modify Aanpassen Cancel Annuleren Choose the sources location Choose the dialogs location Properties of %1 The spaces aren't correctly parsed by qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" QObject Unable to start Assistant ! Onmogelijk Assitant te starten ! Loading: Loading: Interface translation Environment control Files on editor Main Window creation Unable to establish a database connection. Onmogelijk een database connectie te maken. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDeveleop heeft SQLite nodig. Lees alstublieft de Qt SQL driver documentatie voor informatie hoe deze te compileren. Current project parsing Plugins Unable to start Designer ! Registers Form Scherm Name Naam Value Waarde Apply ReplaceWidget Form Scherm find: Replacement: &Replace Previous Vorige Next Volgende Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Prompt Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin Shortcuts Configure Shortcuts Snelkoppelingen Instellen Action Actie Shortcut Snelkoppeling Default Standaard OK Akkoord Cancel Annuleren Subclassing Qt Designer Form Subclassing Qt Designer Scherm Subklassering &New... &Nieuw... &Create &Creëeren C&ancel &Annuleren Class Na&me: &File Name: &Location: Filter &by: SubclassingImpl Choose the file location Kies de bestandslocatie &Update C&reate &Creëer (.h and .cpp) (.h en .cpp) TabWidget Close Tab Sluit Tab Close Other Tabs Sluit Overige Tabs Close All Tabs Sluit Alle Tabs TextEdit Cancel Annuleren Yes Ja No Nee Cut Knippen Copy Kopiëren Paste Plakken Selection Indent Inspringen vergroten Selection Unindent Inspringing verkleinen Select All Alles Selecteren Find... Zoeken... Toggle Bookmark Toon Markering Toggle Breakpoint Toon Onderbrekingspunt The file "%1" could not be loaded. Save "%1" Unable to save %1 Goto Implementation Goto Declaration The Qt database building is in progress. Try to complete code later. Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin ToolsControl External Tools Externe Hulpmiddelen qmake: make: gdb: ctags: linguist: lupdate: lrelease: designer: ... &Test Please enter the path to the external programs: Geef alstublieft het pad in naar de externe programma's: Check environment on start assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ok Akkoord Please select the program TreeClasses Open Declaration Open Declaratie Open Implementation Open Implementatie Refresh contents Herlaad inhoud Add Method... Add Variable... Add get/set Methods... TreeProject Add sub-project... Voeg sub-project toe... Add New Item... Voeg nieuw Item toe... Add Scope... Bereik Toevoegen... Add Existing Files... Voeg bestaande bestanden toe... Open in Linguist Refresh translation files Herlaad vertalings bestanden Build release translation files Creëer release vertalings bestanden Open in Designer Dialog Subclassing... Venster Subclassing... Dialog Preview Venster Voorbeeld Open Openen Show As Toon als Normal Normaal Krawek Add New Class... Rename... Properties of %1... Remove from project Warning Dialog Venster TextLabel Tekstlabel OK Akkoord Don't show anymore Niet meer tonen qdevelop-v0.28/resources/translations/QDevelop_Japanese.ts0000644000175000017500000046445111362261067023076 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">バージョン</span></p></body></html> OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files 既存ファイルの追加 OK OK Cancel キャンセル Project or Scope : プロジェクトまたはスコープ : File : ファイル : ... ... Copy files here: ここにファイルをコピー: AddExistantImpl Choose the file to add ファイルを選択してください Enter a filename. ファイル名を入力してください。 Cancel キャンセル Enter a location destination. 場所を入力してください。 Choose a directory ディレクトリを選択してください The file %1 doesn't exist. ファイル %1 は存在しません。 Unable to copy %1 %1 をコピーできません Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item 新しいアイテムの追加 Files ファイル Translation 翻訳 Resources リソース Dialog ダイアログ Header ヘッダファイル Sources ソースファイル Project or Scope: プロジェクトまたはスコープ: File Name : ファイル名 : Location : 場所 : ... ... OK OK Cancel キャンセル newfile.cpp AddNewClass OK OK Cancel キャンセル Inheritance 継承 Inherits another class 継承した別のクラス Ancestor: 祖先: Ancestor's include filename: 祖先のインクルードファイル名: Scope: スコープ: Filenames ファイル名 Header filename: ヘッダファイル名: Implementation filename: 実装ファイル名: Location : 場所: ... ... Project or Scope: プロジェクトまたはスコープ: Class name: クラス名: Constructor arguments: コンストラクタ引数: Virtual destructor Virtual デストラクタ Add New Class 新しいクラスの追加 AddNewClassImpl Choose the file location ファイルの場所を選択してください Cancel キャンセル Unable to create file. ファイルを作成できません。 The file "%1" already exists. ファイル "%1" は既に存在します。 AddNewClassMethod Add New Method 新しいメソッドの追加 Method Name: メソッド名: Return type: 戻り型: Parameters: 引数: Scope: スコープ: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel キャンセル AddNewClassMethodImpl Add New Method in class %1 クラス %1 に新しいメソッドを追加 An implementation file is required. 実装ファイルが要求されている。 Cancel キャンセル %1 already exists in class %2. %1 は既にクラス %2 に存在します。 AddNewClassVariable Add New Variable 新しい変数の追加 Create get/set methods get/set メソッドの追加 inline inline set method set メソッド get method get メソッド OK OK Cancel キャンセル Variable Name: 変数名: Type: 型: Scope: スコープ: AddNewClassVariableImpl Cancel キャンセル %1 already exists in class %2. %1 は既にクラス %2 に存在します。 AddNewImpl Choose the file location ファイルの場所を選択してください The suffix of the file is not correct. ファイルのサフィックスが正しくありません。 Cancel キャンセル header ヘッダファイル Yes はい No いいえ Also create the file %1 in same location ? 同じ場所にあるファイル %1 も作成しますか? source ソースファイル AddScope Add New Scope 新しいスコープの追加 New Scope 新しいスコープ win32 win32 debug debug unix unix release release mac mac other その他 Project or Scope : プロジェクトまたはスコープ : OK OK Cancel キャンセル AddSetGet Add get/set methods get/set メソッドの追加 OK OK Cancel キャンセル Create get/set methods for get/set メソッドの作成 inline inline set method set メソッド get method get メソッド AddSetGetImpl Cancel キャンセル BreakpointCondition Dialog ダイアログ Condition : 条件: is true (breakpoint) は真 (ブレークポイント) has changed (watchpoint) は変化した (ウォッチポイント) Build Update project プロジェクトの更新 Clean Project プロジェクトのクリーン Build ビルド Build stopped ビルドの停止 Compilation of %1... %1 のコンパイル... Debug Running... 実行... Exited normally 正常終了 Debug... デバッグ... Debug exited デバッグ終了 Error: Unable to evaluate value エラー: 値を評価できません Exited with error code %1 Editor Refresh classes and methods lists クラスとメソッドリストの更新 What do you want to do? あなたは何をしたいのですか? Overwrite 上書き Reload File ファイルのリロード The file "%1" was modified outside editor. ファイル "%1" は外部エディタで更新されました。 Open %1 %1 を開く %1 replacement(s) made. %1 の置換が完了しました。 The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK OK Cancel キャンセル Choose program to Debug : デバッグするプログラムを選択してください : Don't ask question anymore これ以上質問しないでください FindFile Find in Files ファイルから検索 Pattern: パターン: Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Recursive 再帰 *.cpp; *.h *.ui; *.qrc; *.txt Files: ファイル: ... ... Find in: 検索: &Find 検索(&F) &Close 閉じる(&C) Replace found text Replace with: FindFileImpl Choose a directory ディレクトリを選択してください &Find 検索(&F) &Stop 停止(&S) Line File ファイル Cannot open temporary file %1 FindWidget Form フォーム Previous 前へ Next 次へ Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました GotoLine Goto Line 行へジャンプ <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">行へジャンプ:</span></p></body></html> OK OK Cancel キャンセル InitCompletion Unable to launch %1 %1 を起動できません Unable to open %1 %1 を開けません LineNumbers Toogle Bookmark ブックマークの設定/解除 Toogle Breakpoint ブレークポイントの設定/解除 Breakpoint Condition... ブレークポイント条件... LogBuild error エラー warning 警告 error Compiler message エラー undefined reference to Linker message warning Compiler message 警告 Main QDevelop QDevelop &? &? &Project プロジェクト(&P) &View 表示(&V) &Debug デバッグ(&D) &Build ビルド(&B) &File ファイル(&F) &Edit 編集(&E) Outputs 出力 Build ビルド Name 名前 Type Address アドレス Value ... ... Project Explorer プロジェクト一覧 Files ファイル Classes クラス Files toolbar ファイルのツールバー Edit Toolbar 編集のツールバー &New Project... 新しいプロジェクト(&N)... &New File... 新しいファイル(&N)... New File 新しいファイル &File... ファイル(&F)... &Close All Files すべてのファイルを閉じる(&C) &Save File ファイルを保存(&S) Ctrl+S Ctrl+S &Quit 閉じる(&Q) Undo 元に戻す Ctrl+Z Ctrl+Z Redo やり直す Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All すべて選択 Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item 新しいアイテムの追加 Add Existing Files 既存ファイルの追加 New Folder 新しいフォルダ Project Properties プロジェクトのプロパティ Clean クリーン Rebuild リビルド Compile File ファイルのコンパイル Shift+F7 Shift+F7 Start Program プログラム開始 Shift+F5 Shift+F5 Step Into ステップイン F11 F11 Step Over ステップオーバー F10 F10 Calls Stack コールスタック &Open... 開く(&O)... Ctrl+O Ctrl+O F3 F3 Stop 停止 F6 F6 Breakpoints... ブレークポイント... Indent selection 選択範囲のインデント設定 Tab Tab Unindent selection 選択範囲のインデント解除 Shift+Tab Shift+Tab F1 F1 Save Project As... 名前を付けてプロジェクトを保存... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment コメント設定 Uncomment コメント解除 Complete Code 完全コード Ctrl+Space Ctrl+Space Toggle &Bookmark ブックマークの設定/解除(&B) Toggle Bookmark ブックマークの設定/解除 Ctrl+B Ctrl+B Clear &All Bookmarks すべてのブックマークをクリア(&A) &Open Project... プロジェクトを開く(&O)... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Ctrl+N Ctrl+N Goto matching bracket 対応する括弧へジャンプ Ctrl+[ Ctrl+[ Plugins プラグイン F7 F7 Foo Foo &Print... 印刷(&P)... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks ブックマーク(&B) &Last Projects 最近開いたプロジェクト(&L) B&uild ビルド(&B) Las&t Files 最近開いたファイル(&T) &Tools ツール(&T) &Plugins settings プラグイン設定(&P) Ed&itors エディタ(&I) 1 1 Build and Debug Toolbar ビルドとデバッグのツールバー Call Stacks コールスタック Registers レジスタ Save File &as... 名前を付けてファイルを保存(&A)... Save A&ll すべてを保存(&L) &Undo 元に戻す(&U) &Redo 元に戻す(&R) Cu&t 切り取り(&T) &Copy コピー(&C) &Paste 貼り付け(&P) &Find... 検索(&F)... &Replace... 置換(&R)... &Find in Files... ファイルから検索(&F)... Add New &Item... 新しいアイテムの追加(&I)... Add Existing &Files... 既存ファイルの追加(&F)... Project &Properties... プロジェクトのプロパティ(&P)... &Clean クリーン(&C) &Rebuild リビルド(&R) S&tart Program プログラム開始(&T) Step &Into ステップイン(&I) Step O&ver ステップオーバー(&V) &Calls Stack コールスタック(&C) &Options... オプション(&O)... &Parameters... 引数(&P)... &About... QDevelop について(&A)... About &Qt... Qt について(&Q)... Find &Next 次を検索(&N) &Stop 停止(&S) &Stop Build ビルドの停止(&S) &Help Current Qt Word カレント Qt ワードのヘルプ(&H) &Reset Executables List 実行可能リストのリセット(&R) &Save Project プロジェクトを保存(&S) C&lose Project プロジェクトを閉じる(&L) Add &Scope... スコープの追加(&S)... Step &Out ステップアウト(&O) &Close Current Editor カレントエディタを閉じる(&C) &Next Tab 次のタブ(&N) &Previous Tab 前のタブ(&P) &Switch to Header/Sources ヘッダ/ソースファイルの切り替え(&S) Set &Focus to Editor エディタにフォーカスを設定(&F) Toggle &breakpoint ブレークポイントの設定/解除(&B) Goto &Methods List メソッドリストへジャンプ(&M) Configure &Shortcuts... ショートカットの割り当て(&S)... &Goto Line... 行へジャンプ(&G)... Toggle Co&mments コメントの設定/解除(&M) E&xternal Tools... 外部ツール(&X)... &Next Bookmark 次のブックマーク(&N) &Previous Bookmark 前のブックマーク(&P) Find Pr&evious 前を検索(&E) Goto matching &bracket 対応する括弧へジャンプ(&B) Add New &Class... 新しいクラスの追加(&C)... Open F&ile in project... プロジェクトのファイルを開く(&I)... Goto &Implementation 実装へジャンプ(&I) Goto &Declaration 宣言へジャンプ(&D) &Rebuild Qt classes database クラスデータベースのリビルド(&R) Execute &qmake qmake の実行(&Q) Show Maximized 最大化で表示 &Editor mode エディタモード(&E) Ctrl+E Ctrl+E Next Warning/Error 次の警告/エラー F4 F4 Previous Warning/Error 前の警告/エラー Shift+F4 Shift+F4 Clear all Warnings/Errors すべての警告/エラーのクリア &Toolbars ツールバー(&T) Dock windows ドックウィンドウ Local Variables ローカル変数 Other Variables 他の変数 Find in files ファイルから検索 Full view すべてのウィンドウを表示 Minimal view 最小限のウィンドウで表示 DocksWindow ドックウィンドウ Dock Windows ドックウィンドウ New submenu > 新しいサブメニュー > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create ファイルを選択してください Files ファイル Cancel キャンセル Do you want to quit QDevelop ? QDevelop を終了しますか? Yes はい No いいえ Choose a file to open ファイルを選択してください Sources ソースファイル Projects プロジェクト Texts テキスト All Files すべてのファイル Files (*.cpp *.h *.txt *.* *) ファイル (*.cpp *.h *.txt *.* *) Stop 停止 Start 開始 The project has been modified, do you want to save your changes ? プロジェクトが更新されています。更新を保存しますか? Stop debugging ? デバッグを停止しますか? run Build. ビルドを開始します。 Ok Ok Shift+F5 Shift+F5 F5 F5 Abort 中止 Stopping is not possible under Windows. Put breakpoints. Windows では停止できません。ブレークポイントを解除してください。 Continue 継続 &%1 %2 &%1 %2 New Variable: 新しい変数: Choose a project to open プロジェクトを選択してください Build finished without error エラー無しでビルド終了 Build finished with でビルド終了 error(s) エラー and warning(s) 警告 The file "%1" already exists in directory. ファイル "%1" は既にディレクトリに存在します。 Unable to create %1 %1 を作成できません The project %1 doesn't exist. プロジェクト %1 は存在しません。 Properties of %1... %1 のプロパティ... The program doesn't exist, プログラムは存在しません。 The variable "%1" already exists. 変数 "%1" は既に存在します。 The Qt include directory doesn't exist, You can change in Options dialog. Qt インクルードディレクトリが存在しません。 オプションダイアログで変更することができます。 The Qt database building is already in progress. Qt データベースのビルドは既に処理中です。 The Qt classes database build is ended. Qt クラスデータベースのビルドが終了しました。 Version %1 Cannot launch Linguist NewImplementation New Implementation 新しい実装 Class Name : クラス名: File Name : ファイル名: Location : 場所: ... ... &Ok &OK C&ancel キャンセル(&A) NewProject New project creation 新しいプロジェクトの作成 Template テンプレート Application with Dialog ダイアログによるアプリケーション Application with Main Window メインウィンドウによるアプリケーション Properties プロパティ Parent project : 親プロジェクト: Project name : プロジェクト名: Location : 場所: ... ... Project creation on : プロジェクト作成: Version バージョン Debug Version Debug バージョン Release Version Release バージョン OK OK Cancel キャンセル Sub-directories サブディレクトリ Dialogs: ダイアログ: Executable: 実行ファイル: ui ui bin bin sources: ソースファイル: Objects: オブジェクト: src src build build Inheritance subclassing 継承クラス Object name: オブジェクト名: File name: ファイル名: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project 空またはマスタープロジェクト NewProjectImpl Choose the project directory プロジェクトディレクトリを選択してください The directory "%1" cannot be created ディレクトリ "%1" は作成できません Cancel キャンセル The project cannot be created プロジェクトは作成できません Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog ダイアログ OK OK Cancel キャンセル Qt Variables Qt 変数 User Variable ユーザ変数 Variable : 変数 : New Variable : 新しい変数 : Operator : Operator : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project プロジェクトのファイルを開く OK OK Cancel キャンセル Options Options オプション General 全般 Prompt before quit 終了する前に確認 Show classes explorer クラス一覧の表示 Interval between updates: 更新の間隔: seconds Editor エディタ Font: フォント: End of line 改行コード Tab size タブのサイズ Current line background カレント行の背景色 Text background 背景色 Default デフォルト Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces タブをスペースに置き換える ... ... options オプション Line numbers 行番号 Syntax highlighting 文法ハイライト Auto-Brackets 自動括弧 Selection border 選択境界 Complete Code 完全コード Autoindent オートインデント Function/method names : 関数/メソッド名: Preprocessor : プリプロセッサ: Qt words : Qt ワード: Keywords : キーワード: Single comments : シングル行コメント: Multiline comments : マルチ行コメント: Quotation strings : 引用文字列: Default projects directory: デフォルトプロジェクトディレクトリ: Matching ( and { ( と { のマッチング User plugins directory: ユーザプラグインディレクトリ: Save all before build ビルド前にすべてを保存 Automatic compilation 自動コンパイル Qt include directory: Qt インクルードディレクトリ: Qt documentation directory: Qt ドキュメントディレクトリ: Make extra parameters: 付加引数の生成: Reload last project when the application starts アプリケーション開始時に直前のプロジェクトをリロードする Close button in each tab (does not work with all styles) タブ毎にボタンを閉じる (すべてのスタイルで動作する訳ではない) Display editor toolbars エディタツールバーの表示 Display white spaces 空白文字を表示 Files encoding: エンコーディング: Text color 文字色 Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory プロジェクトディレクトリを選択してください Param Program parameters プログラム引数 Run with these arguments: 実行時の引数: Working directory (leave empty to use project directory): ワーキングディレクトリ (プロジェクトディレクトリを使用するため空にしておいてください): ... Environment variables (NAME=value): 環境変数 (NAME=value): Name 名前 Value &Edit 編集(&E) &Add 追加(&A) &Delete 削除(&D) &Sort ソート(&S) &Default デフォルト(&D) &OK &OK &Cancel キャンセル(&C) ParametersImpl Choose the project location プロジェクトの場所を選択してください Cancel キャンセル The variable "%1" already exists. 変数 "%1" は既に存在します。 ProjectManager Save project changes ? プロジェクトの変更を保存しますか? Yes はい No いいえ Cancel キャンセル Forms: フォーム: Unable to create file. ファイルを作成できません。 Ok Ok Sub-project creation サブプロジェクトの作成 Sub-Projects サブプロジェクト Sub-projects サブプロジェクト Headers ヘッダファイル Sources ソースファイル Dialogs ダイアログ Translations 翻訳 Resources リソース Project parsing プロジェクト解析 New name: 新しい名前: The kind of the new and the old filename is different ! 新しいファイルと古いファイルの種類が違います! Rename 名前の変更 The file already exists in directory. ファイルは既にディレクトリに存在します。 The file already exists. ファイルは既に存在します。 This file is not permitted. ファイルは許可されていません。 Unable to rename the file to "%1" "%1" へのファイル名の変更ができません The only available version for "%1" is %2 利用可能な "%1" のバージョンは %2 です Run on %1 %1 を実行 Cannot remove the main project. メインプロジェクトは削除できません。 Do you want to remove "%1" from the project ? プロジェクトから "%1" を削除しますか ? File not found: "%1" ProjectPropertie Dialog ダイアログ Configuration 構成 General : 全般: Version バージョン build_all build_all debug debug release release debug_and_release debug_and_releas Warnings 警告 warn_off warn_off warn_on warn_on Qt Libraries Qt ライブラリ core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options 詳細オプション app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables 変数 Variable : 変数: ... ... Values : 値: Project Template プロジェクトのテンプレート subdirs subdirs lib lib app app Project or Scope : プロジェクトまたはスコープ: OK OK Cancel キャンセル Default directories デフォルトディレクトリ Dialogs: ダイアログ: Sources: ソースファイル: qtestlib qtestlib Advanced options 詳細オプション Free CONFIG variables : その他の CONFIG 変数 : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: 新しい値: delete spaces or put quotes. スペースを削除するか引用記号を入れる。 Modify 更新 Cancel キャンセル Choose the sources location ソースファイルの場所を選択してください Choose the dialogs location ダイアログの場所を選択してください Properties of %1 %1 のプロパティ The spaces aren't correctly parsed by qmake スペースは qmake で正しく解析されません A new variable can not be "QT", "CONFIG" or "TEMPLATE" 新しい変数は "QT", "CONFIG", "TEMPLATE" にすることができません QObject Unable to start Assistant ! Assistant を開始できません! Loading: ロード: Interface translation インタフェース解釈 Environment control 環境制御 Files on editor エディタ上のファイル Main Window creation メインウィンドウ作成 Unable to establish a database connection. データベース接続を確立できません。 QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop は SQLite を必要とします。ビルドするための情報は Qt SQL ドライバのドキュメントを参照してください。 Current project parsing カレントオブジェクト解析 Plugins プラグイン Unable to start Designer ! Designer を開始できません! Registers Form フォーム Name 名前 Value Apply 適用 ReplaceWidget Form フォーム find: 検索: Replacement: 置換: &Replace 置換(&R) Previous 前へ Next 次へ Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Prompt プロンプト Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました Shortcuts Configure Shortcuts ショートカットの割り当て Action アクション Shortcut ショートカット Default デフォルト OK OK Cancel キャンセル Subclassing Qt Designer Form Subclassing Qt Designer フォームのサブクラス化 &New... 新規(&N)... &Create 作成(&C) C&ancel キャンセル(&A) Class Na&me: クラス名(&M): &File Name: ファイル名(&F): &Location: 場所(&L): Filter &by: フィルタ(&B): SubclassingImpl Choose the file location ファイルの場所を選択してください &Update 更新(&U) C&reate 作成(&R) (.h and .cpp) TabWidget Close Tab タブを閉じる Close Other Tabs 他のタブを閉じる Close All Tabs すべてのタブを閉じる TextEdit Cancel キャンセル Yes はい No いいえ Cut 切り取り Copy コピー Paste 貼り付け Selection Indent 選択範囲のインデント設定 Selection Unindent 選択範囲のインデント解除 Select All すべて選択 Find... 検索... Toggle Bookmark ブックマークの設定/解除 Toggle Breakpoint ブレークポイントの設定/解除 The file "%1" could not be loaded. ファイル "%1" はロードできません。 Save "%1" "%1" を保存しますか? Unable to save %1 %1 を保存できません Goto Implementation 実装へジャンプ Goto Declaration 宣言へジャンプ The Qt database building is in progress. Try to complete code later. Qt データベースのビルドが処理中です。 後から完全コードで試してください。 Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました ToolsControl External Tools 外部ツール qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: irelease: designer: designer: ... ... &Test テスト(&T) Please enter the path to the external programs: 外部プログラムのパスを入力してください: Check environment on start 開始環境をチェックする assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags はパス %1 を検出しましたが,このバージョンは古過ぎます。 Ok Ok Please select the program TreeClasses Open Declaration 宣言を開く Open Implementation 実装を開く Refresh contents コンテンツの更新 Add Method... メソッドの追加... Add Variable... 変数の追加... Add get/set Methods... get/set メソッドの追加... TreeProject Add sub-project... サブプロジェクトの追加... Add New Item... 新しいアイテムの追加... Add Scope... スコープの追加... Add Existing Files... 既存ファイルの追加... Open in Linguist Linguist で開く Refresh translation files 翻訳ファイルを更新 Build release translation files 翻訳ファイルをリリース Open in Designer Designer で開く Dialog Subclassing... ダイアログのサブクラス化... Dialog Preview ダイアログのプレビュー Open 開く Show As 強調表示 Normal 通常 Krawek Krawek Add New Class... 新しいクラスの追加... Rename... 名前の変更... Properties of %1... %1 のプロパティ... Remove from project プロジェクトから削除 Warning Dialog TextLabel OK OK Don't show anymore これ以上見せないでください qdevelop-v0.28/resources/translations/QDevelop_Spanish.ts0000644000175000017500000045703311362261067022753 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versión</span></p></body></html> OK Aceptar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Agregar Archivos Existentes OK Aceptar Cancel Cancelar Project or Scope : Proyecto o Alcance : File : Archivo : ... ... Copy files here: Copiar archivos aquí: AddExistantImpl Choose the file to add Elija el archivo a agregar Enter a filename. Introduzca un nombre de archivo. Cancel Cancelar Enter a location destination. Introduzca lugar de destino. Choose a directory Elegir un directorio The file %1 doesn't exist. El archivo %1 no existe. Unable to copy %1 Imposible copiar %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Agregar Nuevo Elemento Files Archivos Translation Traducción Resources Recursos Dialog Diálogo Header Cabecera Sources Fuentes Project or Scope: Proyecto o Alcance: File Name : Nombre del archivo : Location : Ruta : ... ... OK Aceptar Cancel Cancelar newfile.cpp archivonuevo.cpp AddNewClass Add New Class Agregar Nueva Clase OK Aceptar Cancel Cancelar Inheritance Herencia Inherits another class Hereda otra clase Ancestor: Padre: Ancestor's include filename: Archivo .h del padre: Scope: Ámbito: Filenames Archivos Header filename: Archivo de cabecera: Implementation filename: Archivo de implementación: Location : Ubicación : ... ... Project or Scope: Proyecto o Alcance: Class name: Nombre de la clase: Constructor arguments: Argumentos del constructor: Virtual destructor Destructor virtual AddNewClassImpl Choose the file location Elija la ruta del archivo Cancel Cancelar Unable to create file. Imposible crear archivo. The file "%1" already exists. El archivo "%1" ya existe. AddNewClassMethod Add New Method Agregar Nuevo Método Method Name: Nombre del Método: Return type: Tipo de Retorno: Parameters: Parámetros: Scope: Ámbito: Inline Virtual Static Pure OK Aceptar Cancel Cancelar AddNewClassMethodImpl Add New Method in class %1 Agregar Nuevo Método en la clase %1 An implementation file is required. Un archivo de implementación es requerido. Cancel Cancelar %1 already exists in class %2. %1 ya existe en la clase %2. AddNewClassVariable Add New Variable Agregar Nueva Variable Create get/set methods Crear geters/seters inline set method método set get method método get OK Aceptar Cancel Cancelar Variable Name: Nombre de la Variable: Type: Tipo: Scope: Ámbito: AddNewClassVariableImpl Cancel Cancelar %1 already exists in class %2. %1 ya existe en la clase %2. AddNewImpl Choose the file location Elija una ruta para el archivo The suffix of the file is not correct. El sufijo del archivo no es correcto. Cancel Cancelar header cabecera Yes No No Also create the file %1 in same location ? ¿Crear el archivo %1 en la misma ubicación? source fuente AddScope Add New Scope Agregar Nuevo Alcance New Scope Nuevo Alcance win32 debug depuración unix release lanzamiento mac other otro Project or Scope : Proyecto o Alcance : OK Aceptar Cancel Cancelar AddSetGet Add get/set methods Agregar geters/seters OK Aceptar Cancel Cancelar Create get/set methods for Crear geters/seters para inline set method método set get method método get AddSetGetImpl Cancel Cancelar BreakpointCondition Dialog Diálogo Condition : Condición : is true (breakpoint) es verdadero (punto de ruptura) has changed (watchpoint) a cambiado (punto de observación) Build Update project Actualizar Proyecto Clean Project Limpiar Proyecto Build Compilar Build stopped Compilación detenida Compilation of %1... Compilación de %1... Debug Running... Ejecutando... Exited normally Finalizado normalmente Debug... Depurando... Debug exited Depuración finalizada Error: Unable to evaluate value Error: Imposible evaluar el valor Exited with error code %1 Editor Refresh classes and methods lists Actualizar listas de clases y métodos What do you want to do? ¿Qué desea hacer? Overwrite Sobreescribir Reload File Recargar Archivo The file "%1" was modified outside editor. El archivo "%1" fué modificado externamente. Open %1 Abrir %1 %1 replacement(s) made. %1 reemplazo(s) hechos. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Aceptar Cancel Cancelar Choose program to Debug : Elija el programa a Depurar : Don't ask question anymore No preguntar más FindFile Find in Files Encontrar en Archivos Pattern: Patrón de búsqueda: Case Sensitive Distinguir entre mayúsculas y minúsculas Whole words Palabras completas Recursive Recursivo *.cpp; *.h *.ui; *.qrc; *.txt Files: Archivos: ... ... Find in: Buscar en: &Find &Buscar &Close &Cerrar Replace found text Replace with: FindFileImpl Choose a directory Elegir un directorio &Find &Buscar &Stop &Detener Line Línea File Archivo Cannot open temporary file %1 FindWidget Form Forma Previous Anterior Next Siguiente Case Sensitive Distinguir mayúsculas y minúsculas Whole words Palabras completas Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio GotoLine Goto Line Ir a la Línea <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ir a la Línea:</span></p></body></html> OK Aceptar Cancel Cancelar InitCompletion Unable to launch %1 Imposible ejecutar %1 Unable to open %1 Imposible abrir %1 LineNumbers Toogle Bookmark Alternar Marcador Toogle Breakpoint Alternar Punto de Ruptura Breakpoint Condition... Condición de Punto de Ruptura... LogBuild error warning advertencia error Compiler message undefined reference to Linker message warning Compiler message advertencia Main QDevelop &? &? &Project &Proyecto &View &Ver &Debug &Depurar &Build &Compilar &File &Archivo &Edit &Edición Outputs Salidas Build Compilar Name Nombre Type Tipo Address Dirección Value Valor ... ... Project Explorer Explorador de Proyecto Files Archivos Classes Clases Files toolbar Barra de Herramientas de Archivos Edit Toolbar Barra de Herramientas de Edición &New Project... &Nuevo Proyecto... &New File... &Nuevo Archivo... New File Nuevo Archivo &File... &Archivo... &Close All Files &Cerrar Todos los Archivos &Save File &Guardar Archivo Ctrl+S &Quit &Salir Undo Deshacer Ctrl+Z Redo Rehacer Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Seleccionar Todo Ctrl+A Ctrl+F Ctrl+R Add New Item Agregar Nuevo Elemento Add Existing Files Agregar Archivos Existentes New Folder Nuevo Directorio Project Properties Propiedades del Proyecto F7 Clean Limpiar Rebuild Recompilar Compile File Compilar Archivo Shift+F7 Start Program Iniciar Programa Shift+F5 Step Into Paso Dentro F11 Step Over Paso Sobre F10 Calls Stack Pila de Llamadas &Open... &Abrir... Ctrl+O F3 Stop Detener F6 Breakpoints... Puntos de Ruptura... Indent selection Indentar selección Tab Unindent selection Desindentar selección Shift+Tab F1 Save Project As... Guardar Proyecto Como... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Comentar Uncomment Descomentar Complete Code Completar Código Ctrl+Space Toggle &Bookmark Alternar &Marcador Toggle Bookmark Alternar Marcador Ctrl+B Clear &All Bookmarks Limpiar &Todos los Marcadores &Open Project... &Abrir Proyecto... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Agregados Ctrl+N Goto matching bracket Ir a la llave correspondiente Ctrl+[ Foo &Print... Im&primir... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Marcadores &Last Projects &Últimos Proyectos B&uild &Compilar Las&t Files Úl&timos Archivos &Tools &Herramientas &Plugins settings Configuración de &Agregados Ed&itors Ed&itores 1 Build and Debug Toolbar Barra de Herramientas de Compilación y Depuración Call Stacks Pilas de Llamada Registers Registros Save File &as... Guardar &Archivo como... Save A&ll Guardar &Todo &Undo &Deshacer &Redo &Rehacer Cu&t Cor&tar &Copy &Copiar &Paste &Pegar &Find... &Buscar... &Replace... &Reemplazar... &Find in Files... &Buscar en Archivos... Add New &Item... Agregar Nuevo &Elemento... Add Existing &Files... Agregar &Archivos Existentes... Project &Properties... &Propiedades del Proyecto... &Clean &Limpiar &Rebuild &Recompilar S&tart Program &Iniciar Programa Step &Into Paso &Dentro Step O&ver Paso &Sobre &Calls Stack &Pila de Llamadas &Options... &Opciones... &Parameters... &Parámetros... &About... &Acerca de... About &Qt... Acerca de &Qt... Find &Next Buscar &Siguiente &Stop &Detener &Stop Build &Detener Compilación &Help Current Qt Word &Ayuda con la palabra Qt actual &Reset Executables List &Limpiar Lista de Ejecutables &Save Project &Guardar Proyecto C&lose Project &Cerrar Proyecto Add &Scope... Agregar &Alcance... Step &Out Paso &Fuera &Close Current Editor &Cerrar Editor Actual &Next Tab Pestaña &Siguiente &Previous Tab Pestaña &Anterior &Switch to Header/Sources &Cambiar a Cabecera/Fuentes Set &Focus to Editor Asignar &Foco al Editor Toggle &breakpoint Alternar &Punto de Ruptura Goto &Methods List Ir a la Lista de &Métodos Configure &Shortcuts... Configurar &Accesos Rápidos... &Goto Line... &Ir a la Línea... Toggle Co&mments Alternar Co&mentarios E&xternal Tools... Herramientas E&xternas... &Next Bookmark Marcador &Siguiente &Previous Bookmark Marcador &Anterior Find Pr&evious Buscar An&terior Goto matching &bracket Ir a la &llave correspondiente Add New &Class... Agregar Nueva &Clase... Open F&ile in project... Abrir A&rchivo en proyecto... Goto &Implementation Ir a la &Implementación Goto &Declaration Ir a la &Declaración &Rebuild Qt classes database &Recompilar BD de Clases de QT Execute &qmake Ejecutar &qmake Show Maximized Mostrar Maximizado &Editor mode Modo &Editor Ctrl+E Next Warning/Error Advertencia/Error Siguiente F4 Previous Warning/Error Advertencia/Error Anterior Shift+F4 Clear all Warnings/Errors Limpiar todas las Advertencias/Errores &Toolbars &Barras de Herramientas Dock windows Ventanas Acoplables Local Variables Variables Locales Other Variables Otras Variables Find in files Buscar en archivos Full view Vista completa Minimal view Vista mínima DocksWindow VentanasAcoplables Dock Windows Ventanas Acoplables New submenu > Nuevo submenú > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Elija el archivo a crear Files Archivos Cancel Cancelar Do you want to quit QDevelop ? ¿Desea salir de QDevelop? Yes No No Choose a file to open Elija un archivo a abrir Sources Fuentes Projects Proyectos Texts Textos All Files Todos los Archivos Files (*.cpp *.h *.txt *.* *) Archivos (*.cpp *.h *.txt *.* *) Stop Detener Start Iniciar The project has been modified, do you want to save your changes ? El proyecto ha sido modificado, ¿desea guardar los cambios? Stop debugging ? ¿Detener depuración? run Build. ejecute Compilación. Ok Aceptar Shift+F5 F5 Abort Abortar Stopping is not possible under Windows. Put breakpoints. No es posible detenerse sobre Windows. Ponga puntos de ruptura. Continue Continuar &%1 %2 &%1 %2 New Variable: Nueva Variable: Choose a project to open Elija un proyecto para abrir Build finished without error Compilación finalizada sin errores Build finished with Compilación finalizada con error(s) error(es) and y warning(s) advertencia(s) The file "%1" already exists in directory. El archivo "%1" ya existe en el directorio. Unable to create %1 Imposible crear %1 The project %1 doesn't exist. El proyecto %1 no existe. Properties of %1... Propiedades de %1... The program doesn't exist, El programa no existe, The variable "%1" already exists. La variable "%1" ya existe. The Qt include directory doesn't exist, You can change in Options dialog. El directorio "include" de QT no existe, puede cambiarlo en el diálogo de Opciones. The Qt database building is already in progress. La compilación de la BD de QT está en progreso. The Qt classes database build is ended. La compilación de la BD de clases de Qt ha terminado. Version %1 Versión %1 Cannot launch Linguist NewImplementation New Implementation Nueva Implementación Class Name : Nombre de la Clase : File Name : Nombre del Archivo : Location : Ubicación : ... ... &Ok &Aceptar C&ancel &Cancelar NewProject New project creation Nuevo proyecto Template Plantilla Application with Dialog Aplicación con Diálogo Application with Main Window Aplicación con Ventana Principal Properties Propiedades Parent project : Proyecto padre : Project name : Nombre del proyecto : Location : Ubicación : ... ... Project creation on : Crear proyecto en : Version Versión Debug Version Versión de Depuración Release Version Versión de Lanzamiento OK Aceptar Cancel Cancelar Sub-directories Subdirectorios Dialogs: Diálogos: Executable: Ejecutable: ui bin sources: fuentes: Objects: Objetos: src build compilar Inheritance subclassing Heredar subclase Object name: Nombre del objeto: File name: Nombre del archivo: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diálogo:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclase:</span></p></body></html> Empty or master project Proyecto vacío o maestro NewProjectImpl Choose the project directory Elija el directorio para el proyecto The directory "%1" cannot be created Imposible crear directorio "%1" Cancel Cancelar The project cannot be created Imposible crear proyecto Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Diálogo OK Aceptar Cancel Cancelar Qt Variables Variables de Qt User Variable Variable de Usuario Variable : Variable : New Variable : Nueva Variable: Operator : Operador : = += -= *= ~= OpenFile Open File in Project Abrir Archivo en el Proyecto OK Aceptar Cancel Cancelar Options Options Opciones General Prompt before quit Preguntar antes de salir Show classes explorer Mostrar explorador de clases Interval between updates: Intervalo entre actualizaciones: seconds segundos Editor Font: Fuente: End of line Fin de línea Tab size Tamaño de tabulador Current line background Fondo de línea en edición Text background Fondo de texto Default Por defecto Unix Dos/Windows Replace Tab by spaces Reemplazar Tabulador por espacios ... ... options opciones Line numbers Números de línea Syntax highlighting Resaltar sintaxis Auto-Brackets Cerrar llaves automáticamente Selection border Borde de selección Complete Code Completar Código Autoindent Indentar automáticamente Function/method names : Nombres de función/método : Preprocessor : Preprocesador : Qt words : Palabras Qt : Keywords : Palabras clave : Single comments : Comentarios simples : Multiline comments : Comentarios multilínea : Quotation strings : Cadenas entre comillas : Default projects directory: Directorio de proyectos por defecto: Matching ( and { ( y { correspondientes User plugins directory: Directorio de agregados de usuario: Save all before build Guardar todo antes de compilar Automatic compilation Compilación automática Qt include directory: Directorio "include" de QT: Qt documentation directory: Directorio de documentación de Qt: Make extra parameters: Parámetros extra para "make": Reload last project when the application starts Recargar el último proyecto cuando la aplicación empiece Close button in each tab (does not work with all styles) Botón de cerrar en cada pestaña (no funciona con todos los estilos) Display editor toolbars Desplegar Barras de Herramientas del Editor Display white spaces Desplegar espacios en blanco Files encoding: Archivos codificando: Text color Color de Texto Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Elija el directorio del proyecto Param Program parameters Parámetros del programa Run with these arguments: Ejecutar con estos argumentos: Working directory (leave empty to use project directory): Directorio de trabajo (dejar vacío para usar el directorio del proyecto): ... ... Environment variables (NAME=value): Variables de entorno (NOMBRE=valor): Name Nombre Value Valor &Edit &Editar &Add &Agregar &Delete &Eliminar &Sort &Ordenar &Default Por &defecto &OK &Aceptar &Cancel &Cancelar ParametersImpl Choose the project location Elija la ubicación del proyecto Cancel Cancelar The variable "%1" already exists. La variable "%1" ya existe. ProjectManager Save project changes ? ¿Deseas guardar los cambios del proyecto? Yes No No Cancel Cancelar Forms: Formularios: Unable to create file. Imposible crear archivo. Ok Aceptar Sub-project creation Creación de sub-proyecto Sub-Projects Sub-Proyectos Sub-projects Sub-proyectos Headers Cabeceras Sources Fuentes Dialogs Diálogos Translations Traducciones Resources Recursos Project parsing Comprobando proyecto New name: Nuevo nombre: The kind of the new and the old filename is different ! El tipo del nuevo y del viejo archivo es diferente ! Rename Renombrar The file already exists in directory. El archivo ya existe en el directorio. The file already exists. El archivo ya existe. This file is not permitted. El archivo no está permitido. Unable to rename the file to "%1" Imposible renombrar el archivo a "%1" The only available version for "%1" is %2 La única versión disponible para "%1" es %2 Run on %1 Ejecutar en %1 Cannot remove the main project. Imposible quitar el proyecto principal. Do you want to remove "%1" from the project ? Deseas quitar "%1" del proyecto ? File not found: "%1" ProjectPropertie Dialog Diálogo Configuration Configuración General : General : Version Versión build_all compilar todas debug depuración release lanzamiento debug_and_release depuración y lanzamiento Warnings Advertencias warn_off apagadas warn_on encendidas Qt Libraries Bibliotecas Qt core network sql xml gui opengl svg qt3support Advanced Options Opciones Avanzadas app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variable : Variable : ... ... Values : Valores : Project Template Plantilla de Proyecto subdirs lib app Project or Scope : Proyecto o Alcance : OK Aceptar Cancel Cancelar Default directories Directorios por defecto Dialogs: Diálogos: Sources: Fuentes: qtestlib Advanced options Opciones avanzadas Free CONFIG variables : Variables CONFIG libres : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nuevo Valor: delete spaces or put quotes. elimine espacios o ponga comillas. Modify Modificar Cancel Cancelar Choose the sources location Elija la ubicación de los archivos fuente Choose the dialogs location Elija la ubicación de los diálogos Properties of %1 Propiedades de %1 The spaces aren't correctly parsed by qmake Los espacios no son analizados correctamente por qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Una nueva variable no puede ser "QT", "CONFIG" o "TEMPLATE" QObject Unable to start Assistant ! Imposible ejecutar Assistant ! Loading: Cargando: Interface translation Traducción de la interfaz Environment control Control del entorno Files on editor Archivos en el editor Main Window creation Creación de Ventana Principal Unable to establish a database connection. Imposible establecer una conexión con la base de datos. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop necesita soporte de SQLite. Por favor, lea la documentación sobre el driver Qt SQL para información de como compilarlo. Current project parsing Comprobando proyecto actual Plugins Agregados Unable to start Designer ! Imposible ejecutar Designer ! Registers Form Formulario Name Nombre Value Valor Apply Aplicar ReplaceWidget Form Forma find: buscar: Replacement: Reemplazo: &Replace &Reemplazar Previous Anterior Next Siguiente Case Sensitive Sensible a Mayúsculas Whole words Palabras completas Prompt Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio Shortcuts Configure Shortcuts Configurar Accesos rápidos Action Acción Shortcut Acceso rápido Default Por defecto OK Aceptar Cancel Cancelar Subclassing Qt Designer Form Subclassing Heredando del Formulario de Qt Designer &New... &Nuevo... &Create &Crear C&ancel C&ancelar Class Na&me: &Nombre de la clase: &File Name: Nombre del &archivo: &Location: &Ubicación: Filter &by: F&iltrar por: SubclassingImpl Choose the file location Elija la ubicación del archivo &Update &Actualizar C&reate C&rear (.h and .cpp) (.h y .cpp) TabWidget Close Tab Cerrar Pestaña Close Other Tabs Cerrar las Otras Pestañas Close All Tabs Cerrar Todas las Pestañas TextEdit Cancel Cancelar Yes No No Cut Cortar Copy Copiar Paste Pegar Selection Indent Indentar Selección Selection Unindent Desindentar Selección Select All Seleccionar Todo Find... Buscar... Toggle Bookmark Alternar Marcador Toggle Breakpoint Alternar Punto de ruptura The file "%1" could not be loaded. Imposible cargar el archivo "%1". Save "%1" Guardar "%1" Unable to save %1 Imposible guardar %1 Goto Implementation Ir a la Implementación Goto Declaration Ir a la Declaración The Qt database building is in progress. Try to complete code later. La Compilación de la BD de QT está en progreso. Intenta Completar Código después. Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio ToolsControl External Tools Herramientas Externas qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Probar Please enter the path to the external programs: Por favor introduzca la ubicación hacia los programas externos: Check environment on start Comprobar entorno al iniciar assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Se detecto ctags en la ubicación %1, pero esa versión es muy vieja. Ok Aceptar Please select the program TreeClasses Open Declaration Abrir Declaración Open Implementation Abrir Implementación Refresh contents Actualizar contenidos Add Method... Agregar Método... Add Variable... Agregar Variable... Add get/set Methods... Agregar geters/seters... TreeProject Add sub-project... Agregar sub-proyecto... Add New Item... Agregar Nuevo Elemento... Add Scope... Agregar Nuevo Alcance... Add Existing Files... Agregar Archivos Existentes... Open in Linguist Abrir en Linguist Refresh translation files Actualizar archivos de tradución Build release translation files Compilar archivos de tradución de lanzamiento Open in Designer Abrir en Designer Dialog Subclassing... Heredar Diálogo... Dialog Preview Previsualizar Diálogo Open Abrir Show As Mostrar Como Normal Krawek Add New Class... Agregar Nueva Clase... Rename... Renombrar... Properties of %1... Propiedades de %1... Remove from project Quitar del proyecto Warning Dialog Diálogo TextLabel OK Aceptar Don't show anymore No mostrar más qdevelop-v0.28/resources/translations/QDevelop_French.ts0000644000175000017500000045515611362261067022557 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Ajouter des fichiers existants OK Cancel Annuler Project or Scope : Projet ou portée : File : Fichier : ... ... Copy files here: Copier les fichiers ici: AddExistantImpl Choose the file to add Choisissez le fichier à ajouter Enter a filename. Entrez un nom de fichier. Cancel Annuler Enter a location destination. Entrez un emplacement de destination. Choose a directory Choisissez un répertoire The file %1 doesn't exist. Le fichier %1 n'existe pas. Unable to copy %1 Impossible de copier %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Ajouter un nouvel élément Files Type de fichier Translation Traduction Resources Ressource Dialog Dialogue Header Entête Sources Project or Scope: Projet ou portée : File Name : Nom du fichier : Location : Emplacement : ... ... OK Cancel Annuler newfile.cpp AddNewClass OK Cancel Annuler Inheritance Héritage Inherits another class Hérite d'une autre classe Ancestor: Classe héritée: Ancestor's include filename: Fichier d'entête de la classe héritée: Scope: Portée: Filenames Fichiers Header filename: Fichier d'entête: Implementation filename: Fichier d'implémentation: Location : Emplacement : ... ... Project or Scope: Projet ou portée : Class name: Nom de classe: Constructor arguments: Arguments du constructeur: Virtual destructor Destructeur virtuel Add New Class Ajouter une nouvelle classe AddNewClassImpl Choose the file location Choisissez le répertoire du fichier Cancel Annuler Unable to create file. Impossible de créer le fichier. The file "%1" already exists. Le fichier "%1" existe déjà. AddNewClassMethod Add New Method Ajouter une nouvelle méthode Method Name: Nom de la méthode: Return type: Type de retour: Parameters: Paramètres: Scope: Portée: Inline Virtual Static Pure OK Cancel Annuler AddNewClassMethodImpl Add New Method in class %1 Ajouter une nouvelle méthode dans la classe %1 An implementation file is required. Un fichier d'implémentation est nécessaire. Cancel Annuler %1 already exists in class %2. %1 existe déjà dans la classe %2. AddNewClassVariable Add New Variable Ajouter une nouvelle variable Create get/set methods Créer get/set méthodes inline set method get method OK Cancel Annuler Variable Name: Nom de variable: Type: Type: Scope: Portée: AddNewClassVariableImpl Cancel Annuler %1 already exists in class %2. %1 existe déjà dans la classe %2. AddNewImpl Choose the file location Choisissez le répertoire du fichier The suffix of the file is not correct. Le suffixe du nom saisi ne correspond pas à son type. Cancel Annuler header entête Yes Oui No Non Also create the file %1 in same location ? Créer également le fichier %1 au même emplacement? source source AddScope Add New Scope Ajouter une nouvelle portée New Scope Nouvelle portée win32 debug unix release mac other autre Project or Scope : Project or Scope : OK Cancel Annuler AddSetGet Add get/set methods Ajouter get/set méthodes OK Cancel Annuler Create get/set methods for Créer get/set méthodes pour inline set method get method AddSetGetImpl Cancel Annuler BreakpointCondition Dialog Dialogue Condition : Condition : is true (breakpoint) Est True (breakpoint) has changed (watchpoint) a changé (watchpoint) Build Update project Mise à jour du projet Clean Project Nettoyage du projet Build Génération Build stopped Génération interrompue Compilation of %1... Compilation de %1... Debug Running... Exécution... Exited normally Exécution terminée Debug... Débogage... Debug exited Débogage terminé Error: Unable to evaluate value Erreur: Impossible d'évaluer la valeur Exited with error code %1 Terminé avec le code erreur %1 Editor Refresh classes and methods lists Actualiser les listes classes et méthodes What do you want to do? Que voulez-vous faire? Overwrite Ecraser Reload File Recharger The file "%1" was modified outside editor. Le fichier "%1" a été modifié en dehors de l'éditeur. Open %1 Ouvrir %1 %1 replacement(s) made. %1 remplacement(s) effectué(s). The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Cancel Annuler Choose program to Debug : Choisissez l'exécutable à déboguer : Don't ask question anymore Ne plus poser la question FindFile Find in Files Chercher dans des fichiers Pattern: Motif: Case Sensitive Tenir compte de la casse Whole words Mots entiers Recursive Récursif *.cpp; *.h *.ui; *.qrc; *.txt Files: Fichiers: ... ... Find in: Chercher dans: &Find &Chercher &Close &Fermer Replace found text Remplacer le texte trouvé Replace with: Remplacer par: FindFileImpl Choose a directory Choisissez un répertoire Line Ligne File Fichier &Find &Chercher &Stop &Arrêter Cannot open temporary file %1 Impossible d'ouvrir le fichier temporaire %1 FindWidget Form Forme Previous Précédent Next Suivant Case Sensitive Tenir compte de la casse Whole words Mots entiers Reached end of page, continued from top Bas de la page atteint, poursuite au début GotoLine Goto Line Aller à la ligne <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Aller à la ligne:</span></p></body></html> OK Cancel Annuler InitCompletion Unable to launch %1 Impossible de lancer %1 Unable to open %1 Impossible d'ouvrir %1 LineNumbers Toogle Bookmark Basculer le signet Toogle Breakpoint Basculer le point d'arrêt Breakpoint Condition... Condition du point d'arrêt... LogBuild error erreur warning attention error Compiler message erreur undefined reference to Linker message référence indéfinie vers warning Compiler message attention Main QDevelop &? &? Build Génération &Edit &Edition &File &Fichier Outputs Sorties Files Fichiers Files toolbar Barre d'outils fichiers Edit Toolbar Barre d'outils édition &New Project... &Nouveau projet... &File... &Fichier... &Close All Files &Fermer tous les fichiers &Save File &Enregistrer fichier Ctrl+S &Quit &Quitter Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Sélectionner tout Ctrl+F Add New Item Ajouter un nouvel élément Add Existing Files Ajouter des fichiers existants New Folder Nouveau dossier Project Properties Propriété du projet F7 Clean Nettoyer Rebuild Regénérer Shift+F7 Start Program Exécuter le programme Shift+F5 Step Into Pas à pas détaillé F11 Step Over Pas à pas principal F10 &Open... &Ouvrir... F3 Stop Interrompre F6 Breakpoints... Points d'arrêt... Indent selection Indenter la sélection Tab Unindent selection Désindenter la sélection Shift+Tab F1 Project Explorer Explorateur de projet Save Project As... Enregistrer projet sous... Compile File Compiler le fichier Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Undo Annuler Redo Refaire F9 &View &Affichage &Project &Projet &Build &Générer &Debug &Déboguer Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Compléter le code Ctrl+Space Ctrl+D &New File... &Nouveau Fichier... New File Nouveau Fichier Comment Commenter Uncomment Décommenter Classes Calls Stack Pile d'appels Name Nom Type Type Address Adresse Value Valeur ... ... Toggle &Bookmark &Basculer le signet Toggle Bookmark Basculer le signet Ctrl+B Clear &All Bookmarks &Effacer tous les signets &Open Project... &Ouvrir projet... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Greffons Ctrl+N Goto matching bracket Aller à l'autre symbole Ctrl+[ Foo &Print... Im&primer... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Signets &Last Projects &Derniers projets B&uild &Générer Las&t Files &Derniers fichiers &Tools &Outils &Plugins settings &Configuration des greffons Ed&itors Ed&iteurs Build and Debug Toolbar Barre d'outils génération et débogage Save File &as... &Enregistrer fichier sous... Save A&ll Enregistrer t&out &Undo &Annuler &Redo &Refaire Cu&t Cou&per &Copy &Copier &Paste &Coller &Find... &Rechercher... &Replace... &Remplacer... &Find in Files... &Chercher dans des fichiers... Add New &Item... &Ajouter un nouvel élément... Add Existing &Files... &Ajouter des fichiers existants... Project &Properties... &Propriété du projet... &Clean &Nettoyer &Rebuild &Regénérer S&tart Program &Exécuter le programme Step &Into &Pas à pas détaillé Step O&ver &Pas à pas principal &Calls Stack &Pile d'appels &Options... &Options... &Parameters... &Paramètres... &About... &A propos... About &Qt... A propos de &Qt... Find &Next &Poursuivre la recherche &Stop &Arrêter &Stop Build &Arrêter la génération &Help Current Qt Word &Aide Qt du mot courant &Reset Executables List &Réinitialiser la liste des exécutables &Save Project &Enregistrer projet C&lose Project &Fermer le projet Add &Scope... &Ajouter une portée... Step &Out Sortir de la f&onction &Close Current Editor Fermer l'éditeur &courant &Next Tab O&nglet suivant &Previous Tab Onglet &précédent &Switch to Header/Sources &Basculer entre Entête/Sources Set &Focus to Editor &Placer le curseur dans l'éditeur Toggle &breakpoint &Basculer point d'arrêt Goto &Methods List Afficher la liste des &méthodes Configure &Shortcuts... Configurer les raccourcis &clavier... &Goto Line... &Aller à la ligne... Toggle Co&mments Basculer les co&mmentaires E&xternal Tools... Outils e&xternes... &Next Bookmark &Signet suivant &Previous Bookmark &Signet précédent Find Pr&evious Rechercher précéd&ent Goto matching &bracket Aller à &l'autre symbole Add New &Class... Ajouter une nouvelle &classe... Open F&ile in project... Ouvrir un f&ichier du projet... Goto &Implementation Aller à l'&implémentation Goto &Declaration Aller à la &déclaration &Rebuild Qt classes database &Reconstruire la base de données des classes Qt Show Maximized 1 Call Stacks Pile d'appels Registers Registres &Editor mode Mod&e édition Ctrl+E Execute &qmake Lancer &qmake Next Warning/Error Avertissement/Erreur suivant F4 Previous Warning/Error Avertissement/Erreur précédent Shift+F4 Clear all Warnings/Errors Effacer tous les Avertissements/Erreurs &Toolbars Barre d'ou&tils Dock windows Fenêtres dockées Local Variables Variables locales Other Variables Autres variables Find in files Rechercher dans les fichiers Full view Vue complête Minimal view Vue minimale DocksWindow Dock Windows Fenêtres dockées New submenu > Nouveau sous-menu > a a En&force qmake mode &Appliquer le mode qmake &Debug mode Mode &Debug &Release mode Mode &Release &Forget last used mode &Ne pas utiliser de mode qmake MainImpl Cancel Annuler Choose a file to open Choisissez le fichier à ouvrir Choose the file to create Choisissez le fichier à créer Files (*.cpp *.h *.txt *.* *) Fichiers (*.cpp *.h *.txt *.* *) Stop Arrêter Start Démarrer The project has been modified, do you want to save your changes ? Le projet a été modifié, voulez-vous le générer ? Yes Oui No Non run Build. veuillez relancer la génération. Ok Stop debugging ? Arrêter le débogage ? Abort Interrompre Continue Reprendre &%1 %2 &%1 %2 Do you want to quit QDevelop ? Voulez-vous quitter QDevelop ? Shift+F5 F5 Files Fichiers Sources Projects Projets Texts Textes All Files Tous les fichiers Stopping is not possible under Windows. Put breakpoints. Stopper n'est pas possible sous Windows. Mettez des points d'arrêts. New Variable: Nouvelle Variable: Choose a project to open Choisissez un projet à ouvrir Build finished without error Génération terminée sans erreur Build finished with Génération terminée avec error(s) erreur(s) and et warning(s) avertissement(s) The file "%1" already exists in directory. Le fichier "%1" existe déjà dans le répertoire. Unable to create %1 Impossible de créer %1 The project %1 doesn't exist. Le projet %1 n'existe pas. Properties of %1... Propriétés de %1... The program doesn't exist, Le programme n'existe pas, The variable "%1" already exists. La variable "%1" existe déjà. The Qt database building is already in progress. La construction de la base de données Qt est en cours. The Qt classes database build is ended. La construction de la base de données des classes Qt est terminée. The Qt include directory doesn't exist, You can change in Options dialog. Le répertoire include de Qt n'existe pas. Vous pouvez le modifier dans le dialogue Options. Version %1 Version %1 Cannot launch Linguist NewImplementation New Implementation Nouvelle Implémentation &Ok &Ok C&ancel &Annuler File Name : Nom du fichier : Class Name : Nom de classe : Location : Emplacement : ... ... NewProject New project creation Création d'un nouveau projet Parent project : Projet parent : Project name : Nom du projet : Location : Emplacement : ... ... Project creation on : Le projet va être créé dans : OK Cancel Annuler Template Modèle Application with Dialog Application avec Dialogue Application with Main Window Application avec Fenêtre principale Properties Propriétés Version Debug Version Version Debug Release Version Version Release Sub-directories Sous-répertoires Dialogs: Dialogues: Executable: Exécutable: ui bin sources: sources: Objects: Objets: src build Inheritance subclassing Sous-classage Object name: Nom d'objet: File name: Nom de fichier: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Projet maître ou vide NewProjectImpl Choose the project directory Choisissez le répertoire du projet The directory "%1" cannot be created Le répertoire "%1" ne peut pas être créé Cancel Annuler The project cannot be created Le projet ne peut être créé Project file "%1" already exists Le fichier projet "%1" existe déjà The directory "%1" already exists. Do you want to create project anyway? Le répertoire "%1" existe déjà. Désirez-vous créer le projet quand même? NewVariable Dialog OK Cancel Annuler Qt Variables User Variable Variable : Variable : New Variable : Nouvelle variable : Operator : Opérateur : = += -= *= ~= OpenFile Open File in Project Ouvrir un fichier du projet OK Cancel Annuler Options Options General Général Editor Editeur Line numbers Numérotation des lignes Selection border Marge de sélection Autoindent Indentation automatique Syntax highlighting Coloration syntaxique Function/method names : Noms fonctions et méthodes : Preprocessor : Commandes préprocesseur : Qt words : Mots Qt : Keywords : Mots clés : Single comments : Commentaires simples : Multiline comments : Commentaires multi-lignes : Quotation strings : Chaînes entre guillemets : ... ... Default Valeurs par défaut Replace Tab by spaces Remplacer les tabulations par des espaces Unix Dos/Windows Complete Code Compléter le code Prompt before quit Confirmer avant de quitter Font: Police: End of line Fin de ligne options Auto-Brackets Accolades automatiques Tab size Taille des tabulations Current line background Couleur ligne courante Text background Couleur de fond Show classes explorer Afficher l'explorateur de classes Interval between updates: Intervale de mise à jour: seconds secondes Default projects directory: Répertoire par défaut des projets: Matching ( and { Appairer ( et { User plugins directory: Répertoire des greffons de l'utilisateur: Qt include directory: Répertoire include de Qt: Qt documentation directory: Répertoire de la documentation Qt: Make extra parameters: Paramètres supplémentaires de Make: Display editor toolbars Afficher la barre d'outils dans les éditeurs Display white spaces Afficher les espaces Files encoding: Encodage des fichiers: Text color Couleur du texte Save all before build Enregistrer tout avant la construction Automatic compilation Compilation automatique Reload last project when the application starts Ouvrir le dernier projet quand l'application démarre Close button in each tab (does not work with all styles) Bouton de fermeture sur chaque onglet (ne fonctionne pas avec tous les styles) Right margin line Ligne de marge droite Column: Colonne: Auto-Comments Commentaires automatiques <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Retour à la ligne Hide Find/Replace panels after Cacher la panneau Chercher/Remplacer après sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Aller à l'implémentation, Meta+click = Aller à la déclaration OptionsImpl Choose the project directory Choisissez le répertoire du projet Param Program parameters Paramètres du programme Run with these arguments: Démarrer avec ces arguments: Working directory (leave empty to use project directory): Répertoire de travail (laisser vide pour utiliser le répertoire du projet): ... ... Environment variables (NAME=value): Variables d'environnements (NOM=valeur): Name Nom Value Valeur &Add &Ajouter &Delete &Supprimer &Sort &Trier &Default &Défaut &OK &OK &Cancel &Annuler &Edit &Edition ParametersImpl Choose the project location Choisissez le répertoire du projet Cancel Annuler The variable "%1" already exists. La variable "%1" existe déjà. ProjectManager Save project changes ? Enregistrer les modifications du projet ? Yes Oui No Non Cancel Annuler Forms: Type de dialogue: Unable to create file. Impossible de créer le fichier. Ok Sub-project creation Création d'un sous-projet Sub-Projects Sous-projets Sub-projects Sous-projets Headers Entêtes Sources Dialogs Dialogues Translations Traductions Resources Project parsing Analyse du projet New name: Nouveau nom: The kind of the new and the old filename is different ! Le genre du nouveau et de l'ancien fichier sont différents ! Rename Renommer The file already exists in directory. Le fichier exite déjà dans le répertoire. The file already exists. Le fichier existe déjà. This file is not permitted. Le fichier n'est pas autorisé. Unable to rename the file to "%1" Impossible de renommer le fichier pour "%1" The only available version for "%1" is %2 La seule version disponible pour "%1" est %2 Run on %1 Lancer sur %1 Cannot remove the main project. Impossible de supprimer le projet principal. Do you want to remove "%1" from the project ? Voulez-vous supprimer "%1" du projet ? File not found: "%1" Fichier "%1" non trouvé ProjectPropertie Dialog Configuration General : Configuration générale : Version build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Bibliothèques Qt core network sql xml gui opengl svg qt3support Advanced Options app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variable : Variable : ... ... Values : Valeurs : Project Template Type de projet subdirs lib app Project or Scope : Projet ou portée : OK Cancel Annuler Default directories Répertoires par défaut Dialogs: Dialogues: Sources: Sources: qtestlib Advanced options Options avancées Free CONFIG variables : Variables CONFIG libres : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nouvelle valeur: delete spaces or put quotes. il faut supprimer les espaces ou mettre des guillemets. Modify Corriger Cancel Annuler Choose the sources location Choisissez l'emplacement des sources Choose the dialogs location Choisissez l'emplacement des dialogues Properties of %1 Propriétés de %1 The spaces aren't correctly parsed by qmake Les espaces ne sont pas bien interprétés par qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Une nouvelle variable ne peut pas être "QT", "CONFIG" ou "TEMPLATE" QObject Unable to start Assistant ! Impossible de lancer assistant ! Loading: Chargement: Interface translation Traduction de l'interface Environment control Contrôle de l'environnement Files on editor Fichiers dans l'éditeur Main Window creation Création de la fenêtre principale Unable to establish a database connection. Impossible d'établir la connexion à la base de données. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop a besoin du support de SQLite. Lisez la documentation traitant du pilote Qt SQL afin d'obtenir des informations sur la manière de le construire. Current project parsing Analyse du projet courant Plugins Greffons Unable to start Designer ! Impossible de lancer Designer ! Registers Form Forme Name Nom Value Valeur Apply Appliquer ReplaceWidget Form Forme find: chercher: Replacement: Remplacer: &Replace &Remplacer Previous Précédent Next Suivant Case Sensitive Tenir compte de la casse Whole words Mots entiers Prompt Demander Reached end of page, continued from top Bas de la page atteint, poursuite au début Shortcuts Configure Shortcuts Configurer les raccourcis clavier Action Shortcut Raccourci Default Valeurs par défaut OK Cancel Annuler Subclassing Qt Designer Form Subclassing Sous-classage de Dialogue Qt Designer &Create &Créer C&ancel &Annuler &New... &Nouveau... Class Na&me: No&m de classe: &File Name: Nom de &fichier: &Location: Emp&lacement: Filter &by: Filtrer &par: SubclassingImpl Choose the file location Choisissez le répertoire du fichier &Update &Mettre à jour C&reate C&réer (.h and .cpp) (.h et .cpp) TabWidget Close Tab Fermer l'onglet Close Other Tabs Fermer les autres onglets Close All Tabs Fermer tous les onglets TextEdit Cancel Annuler Yes Oui No Non Cut Couper Copy Copier Paste Coller Selection Indent Indenter la sélection Selection Unindent Désindenter la sélection Select All Sélectionner tout Find... Rechercher... Toggle Bookmark Basculer le signet Toggle Breakpoint Basculer le point d'arrêt The file "%1" could not be loaded. Le fichier "%1" ne peut pas être chargé. Save "%1" Sauver "%1" Unable to save %1 Impossible de sauver %1 Goto Implementation Aller à l'implémentation Goto Declaration Aller à la déclaration The Qt database building is in progress. Try to complete code later. La construction de la base de données des classes Qt est en cours. Lancez la complétion ultérieurement. Reached end of page, continued from top Bas de la page atteint, poursuite au début ToolsControl External Tools Outils externes qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Tester Please enter the path to the external programs: Entrez le chemin vers les programmes externes: Check environment on start Vérifier l'environnement au lancement assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags a été détecté à l'emplacement %1, mais cette version est trop ancienne. Ok Please select the program Sélectionnez le programme svp TreeClasses Open Declaration Ouvrir la déclaration Open Implementation Ouvrir l'implémentation Refresh contents Rafraichir le contenu Add Method... Ajouter une méthode... Add Variable... Ajouter une variable... Add get/set Methods... Ajouter une méthode get/set... TreeProject Add sub-project... Ajouter un sous-projet... Add New Item... Ajouter un nouvel élément... Add Scope... Ajouter une portée... Add Existing Files... Ajouter des fichiers existants... Open in Linguist Ouvrir dans Linguist Refresh translation files Actualiser les fichiers de traductions Build release translation files Générer les fichiers de traductions définitifs Open in Designer Ouvrir dans Designer Dialog Subclassing... Sous-classage du Dialogue... Dialog Preview Aperçu du dialogue Open Ouvrir Show As Afficher comme Normal Krawek Add New Class... Ajouter une nouvelle classe... Rename... Renommer... Properties of %1... Propriétés de %1... Remove from project Supprimer du projet Warning Dialog TextLabel OK Don't show anymore Ne plus afficher qdevelop-v0.28/resources/translations/QDevelop_Russian.ts0000644000175000017500000051040211362261067022760 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt; font-style:italic;">Версия</span></p></body></html> OK OK <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Редакция с открытым исходным кодом (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Ведущий разработчик: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Автодополнение кода: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Разработчик: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Разработчик: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Разработчик: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Разработчик: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Разработчик: Дмитрий "Divius" Танцур &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Создание пакетов: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Добавить существующие файлы Project or Scope : Проект или папка: File : Файл: Copy files here: Скопировать файлы сюда: ... ... OK OK Cancel Отмена AddExistantImpl Enter a filename. Введите имя файла. Cancel Отмена Enter a location destination. Введите место назначения. Choose a directory Укажите папку Choose the file to add Укажите файл для добавления The file %1 doesn't exist. Файл %1 не существует. Unable to copy %1 Не могу скопировать %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Файлы (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Добавить новый файл Files Файлы Translation Переводы Resources Ресурсы Dialog Диалог Header Заголовок Sources Исходники Project or Scope: Проект или Папка: File Name : Имя файла: Location : Путь: ... ... OK ОК Cancel Отмена newfile.cpp newfile.cpp AddNewClass OK OK Cancel Отмена Inheritance Наследование Inherits another class Наследование другого класса Ancestor: Родительский класс: Ancestor's include filename: Имя файла родительского класса: Scope: Тип наследования: Filenames Имена файлов Header filename: Имя файла заголовка: Implementation filename: Имя файла реализации: Location : Путь: ... ... Project or Scope: Проект или Папка: Class name: Имя класса: Constructor arguments: Параметры конструктора: Virtual destructor Виртуальный деструктор Add New Class Добавить новый класс AddNewClassImpl Choose the file location Укажите расположение файла Cancel Отмена Unable to create file. Не могу создать файл. The file "%1" already exists. Файл "%1" уже существует. AddNewClassMethod Add New Method Добавить Новый Метод Method Name: Имя Метода: Return type: Возвращаемый тип: Parameters: Параметры: Scope: Тип наследования: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel Отмена AddNewClassMethodImpl Add New Method in class %1 Добавить Новый Метод в класс %1 An implementation file is required. Нужен файл реализации(cpp). Cancel Отмена %1 already exists in class %2. %1 уже существует в классе %2. AddNewClassVariable Add New Variable Добавить Новую Переменную Create get/set methods Создать get/set методы inline inline set method метод set get method метод get OK OK Cancel Отмена Variable Name: Имя Переменной: Type: Тип: Scope: Тип наследования: AddNewClassVariableImpl Cancel Отмена %1 already exists in class %2. %1 уже существует в классе %2. AddNewImpl Choose the file location Укажите расположение файла The suffix of the file is not correct. Некорректное расширение файла. Cancel Отмена header заголовка Yes Да No Нет Also create the file %1 in same location ? Создать также файл "%1" в том же месте? source исходник AddScope Add New Scope Добавить новую папку New Scope Новая папка win32 win32 debug debug unix unix release release mac mac other другие Project or Scope : Проект или папка: OK ОК Cancel Отмена AddSetGet Add get/set methods Добавить get/set методы OK OK Cancel Отмена Create get/set methods for Создать get/set методы для inline inline set method метод set get method метод get AddSetGetImpl Cancel Отмена BreakpointCondition Dialog Диалог Condition : Состояние : is true (breakpoint) если Истина (точка останова) has changed (watchpoint) изменился (точка наблюдения) Build Update project Обновить проект Clean Project Очистить проект Build Сборка Build stopped Сборка остановлена Compilation of %1... Компиляция "%1"... Debug Running... Запуск... Exited normally Нормальное завершение Debug... Отладка... Debug exited Отладка завершена Error: Unable to evaluate value Ошибка: невозможно вычислить значение Exited with error code %1 Завершение с кодом ошибки %1 Editor Refresh classes and methods lists Обновить списки классов и методов What do you want to do? Что вы хотите сделать? Overwrite Перезаписать Reload File Перезагрузить файл The file "%1" was modified outside editor. Файл "%1" был изменен вне редактора. Open %1 Открыть %1 %1 replacement(s) made. %1 замен(а/ы) сделано. The file "%1" disappeared from fisk. Файл "%1" больше не присутствует на диске. Recreate Создать заново Close Закрыть ExeChoice QDevelop QDevelop OK OK Cancel Отмена Choose program to Debug : Укажите программу для отладки: Don't ask question anymore Больше не задавать вопросов FindFile Find in Files Поиск в файлах Pattern: Шаблон: Case Sensitive Учитывать регистр Whole words Слово целиком Recursive Рекурсивно *.cpp; *.h *.cpp;*.h *.ui; *.qrc; *.txt *.ui;*.qrc;*.txt Files: Файлы: ... ... Find in: Искать в: &Find &Искать &Close &Закрыть Replace found text Заменять найденный текст Replace with: Заменять на: FindFileImpl Choose a directory Укажите папку &Find &Искать &Stop &Стоп Line Строка File Файл Cannot open temporary file %1 Не удалось открыть временный файл %1 FindWidget Form Форма Previous Предыдущее Next Следующее Case Sensitive Учитывать регистр Whole words Слово целиком Reached end of page, continued from top Поиск с начала страницы GotoLine Goto Line Перейти к строке <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Перейти к строке:</span></p></body></html> OK ОК Cancel Отмена InitCompletion Unable to launch %1 Не могу запустить %1 Unable to open %1 Не могу открыть %1 LineNumbers Toogle Bookmark Вкл/Выкл закладку Toogle Breakpoint Вкл/Выкл брейкпойнт Breakpoint Condition... Условие останова... LogBuild error ошибка warning предупреждение error Compiler message ошибка undefined reference to Linker message warning Compiler message предупреждение Main &? &? &File &Файл &Project &Проект &Build &Сборка &Debug Отла&дка &View &Вид &Edit &Править Outputs Вывод Build Сборка Project Explorer Состав проекта Files toolbar Панель Файлы Edit Toolbar Панель Правка &New Project... &Новый Проект... &New File... &Новый Файл... New File Новый файл &File... &Файл... &Close All Files &Закрыть все файлы &Save File &Сохранить файл Ctrl+S Ctrl+S &Quit &Выход Undo Откатить Ctrl+Z Ctrl+Z Redo Повторить Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Выделить все Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Добавить новый Add Existing Files Добавить существующий New Folder Новая папка Project Properties Свойства проекта F7 F7 Clean Очистить Rebuild Пересобрать Compile File Компиляция файла Shift+F7 Shift+F7 Start Program Старт программы Shift+F5 Shift+F5 Step Into Шаг вовнутрь F11 F11 Step Over Шаг F10 F10 &Open... &Открыть... Ctrl+O Ctrl+O F3 F3 Stop Стоп F6 F6 Breakpoints... Брейкпойнты... Indent selection Установить выделение Tab Табуляция Unindent selection Снять выделение Shift+Tab Shift+Tab F1 F1 Files Файлы Save Project As... Сохранить проект как... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Комментарить Uncomment Разкомментарить Complete Code Автодополнение кода Ctrl+Space Ctrl+Space QDevelop QDevelop Name Имя Type Тип Address Адрес Value Значение ... ... Classes Классы Calls Stack Стек вызовов Toggle &Bookmark Установить &Закладку Toggle Bookmark Вкл/Выкл закладку Ctrl+B Ctrl+B Clear &All Bookmarks Убрать &все закладки &Open Project... &Открыть Проект... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Goto matching bracket Перейти к парной скобке Ctrl+[ Ctrl+[ Plugins Плагины Ctrl+N Ctrl+N Foo Foo &Print... П&ечать... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &Закладки Ed&itors &Редактор &Tools &Инструменты &Plugins settings &Настройка плагинов &Last Projects &Недавние проекты B&uild &Сборка Las&t Files Н&едавние файлы Build and Debug Toolbar Панель Сборки и Отладки Save File &as... Сохранить файл &как... Save A&ll Сохранить &все &Undo &Откатить &Redo &Повторить Cu&t &Вырезать &Copy &Копировать &Paste Вст&авить &Find... &Найти... &Replace... &Заменить... &Find in Files... П&оиск в файлах... Add New &Item... &Добавить новый... Add Existing &Files... Д&обавить существующий... Project &Properties... Свойства &проекта... &Clean &Очистить &Rebuild &Пересобрать S&tart Program &Старт программы Step &Into &Шаг вовнутрь Step O&ver Шаг &через &Calls Stack С&тек вызовов &Options... &Опции... &Parameters... &Параметры... &About... &О программе... About &Qt... О &Qt... Find &Next &Найти далее &Stop &Стоп &Stop Build Ост&ановить сборку &Help Current Qt Word Справка по текущему ключевому слову &Qt &Reset Executables List Сбросить список &исполняемых &Save Project &Сохранить проект C&lose Project &Закрыть проект Add &Scope... Добавить &папку... Step &Out Шаг &наверх &Close Current Editor &Закрыть текущий редактор &Next Tab &Следующая вкладка &Previous Tab &Предыдущая вкладка &Switch to Header/Sources &Переключить Заголовок/Исходник Set &Focus to Editor &Переместить фокус в редактор Toggle &breakpoint &Вкл/Выкл брейкпойнт Goto &Methods List Перейти в Список &Методов Configure &Shortcuts... Конфигурация &быстрых клавиш... &Goto Line... Перейти к &строке... Toggle Co&mments Вкл/Выкл &комментарии E&xternal Tools... &Инструменты... &Next Bookmark &Следующая закладка &Previous Bookmark &Предыдущая закладка Find Pr&evious На&йти предыдущий Goto matching &bracket Перейти к парной &скобке Add New &Class... Добавить новый &класс... Open F&ile in project... Открыть &Файл в проекте... Goto &Implementation Перейти к &Реализации Goto &Declaration Перейти к &Объявлению &Rebuild Qt classes database &Собрать файлы перевода 1 1 Call Stacks Стеки вызовов Registers Регистры Execute &qmake Запустить &qmake Show Maximized Показать увеличенным &Editor mode &Режим редактирования Ctrl+E Ctrl+E Next Warning/Error Следующее замечание/ошибка F4 F4 Previous Warning/Error Предыдущее замечание/ошибка Shift+F4 Shift+F4 Clear all Warnings/Errors Очистить все замечания/ошибки &Toolbars &Панели Dock windows Док-окна Local Variables Локальные переменные Other Variables Прочие переменные Find in files Поиск в файлах Full view Полный Вид Minimal view Минимальный Вид DocksWindow Dock Windows Док-окна New submenu > Новое подменю > a ? En&force qmake mode &Форсировать режим qmake &Debug mode Режим &отладки &Release mode Режим &релиза &Forget last used mode &Забыть форсированный режим MainImpl Choose the file to create Выберите файл для создания Files Файлы Cancel Отмена Yes Да No Нет Choose a file to open Выберите файл для открытия Sources Исходники Projects Проекты Texts Тексты All Files Все файлы Files (*.cpp *.h *.txt *.* *) Файлы (*.cpp *.h *.txt *.* *) Stop Стоп Start Старт The project has been modified, do you want to save your changes ? Проект был изменен, сохранить изменения? Stop debugging ? Остановить отладку? run Build. запустите Сборку. Ok OK Shift+F5 Shift+F5 F5 F5 Abort Прервать Stopping is not possible under Windows. Put breakpoints. Останов невозможен из-под Windows. Установите брейкпойнты. Continue Продолжить &%1 %2 &%1 %2 Do you want to quit QDevelop ? Вы действительно хотите выйти из QDevelop? New Variable: Новая переменная: Choose a project to open Выберите проект для открытия Build finished without error Сборка завершена без ошибок Build finished with Сборка завершена с error(s) ошибками and и warning(s) предупреждениями The file "%1" already exists in directory. Файл "%1" уже существует в директории. Unable to create %1 Не могу создать %1 The project %1 doesn't exist. Проект %1 не существует. Properties of %1... Свойства %1... The program doesn't exist, Программа не существует, The variable "%1" already exists. Переменная "%1" уже существует. The Qt database building is already in progress. Поcтроение базы Qt уже в процессе. The Qt classes database build is ended. Поcтроение базы классов Qt закончено. The Qt include directory doesn't exist, You can change in Options dialog. Директория заголовочных файлов Qt не существует, Вы можете изменить её в окне "опции". Version %1 Версия %1 Cannot launch Linguist Не удалось запустить Linguist NewImplementation New Implementation Новая реализация Class Name : Имя класса: Location : Путь: File Name : Имя файла: ... ... &Ok &OK C&ancel &Отмена NewProject New project creation Создание нового проекта Template Шаблон Application with Dialog Приложение с Dialog Application with Main Window Приложение с Main Window Properties Свойства Parent project : Родительский проект: Project name : Имя проекта: Location : Путь: ... ... Project creation on : Создать проект в: Version Версия Debug Version Отладочная версия Release Version Релиз версия OK ОК Cancel Отмена Sub-directories Поддиректории Dialogs: Формы: Executable: Исполнимые: ui ui bin bin sources: Исходники: Objects: Объекты: src src build build Inheritance subclassing Наследование форм Object name: Имя объекта: File name: Имя файла: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Форма:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Класс:</span></p></body></html> Empty or master project Пустой или основной проект NewProjectImpl Choose the project directory Укажите папку проекта The directory "%1" cannot be created Директория "%1" не может быть создана Cancel Отмена The project cannot be created Проект не может быть создан Project file "%1" already exists Файл проекта "%1" уже существует The directory "%1" already exists. Do you want to create project anyway? Директория "%1" уже существует. Всё равно создать проект? NewVariable Dialog Диалог OK ОК Cancel Отмена Qt Variables Переменные Qt User Variable Пользовательские переменные Variable : Переменные: New Variable : Новая переменная: Operator : Оператор : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project Открыть Файл в Проекте OK OK Cancel Отмена Options Options Настройки General Главное Prompt before quit Подтверждение перед выходом Editor Редактор Font: Шрифт: End of line Конец строки Tab size Длина отступа Current line background Фон текущей строки Text background Фон текста Default По-умолчанию Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Заменять отступы пробелами ... ... options опции Line numbers Номера строк Syntax highlighting Подсветка синтаксиса Auto-Brackets Автоскобки Selection border Граница выделения Complete Code Автодополнение кода Autoindent Автовыделение Function/method names : Имена функций/методов: Preprocessor : Препроцессор: Qt words : Ключевые слова Qt: Keywords : Ключевые слова: Single comments : Однострочный коммент: Multiline comments : Многострочный коммент: Quotation strings : Строки в кавычках: Show classes explorer Показать классы Interval between updates: Интервал между обновлением: seconds секунд Default projects directory: Папка проектов по умолчанию: Matching ( and { Поиск ( и { User plugins directory: Папка с плагинами пользователя: Make extra parameters: Доп. параметры make: Qt include directory: Директория заголовочных файлов Qt: Files encoding: Кодировка файлов: Save all before build Сохранять всё перед сборкой Automatic compilation Автоматическая компиляция Qt documentation directory: Директория документации Qt: Reload last project when the application starts Открывать последний проект при старте Close button in each tab (does not work with all styles) Кнопка закрытия на каждой вкладе (работает не со всеми стилями) Display editor toolbars Показывать панели инструментов в редакторе Display white spaces Показывать пробелы Text color Цвет текста Right margin line Линия отступа справа Column: Колонка: Auto-Comments Автозакрытие комментариев <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Перенос по словам Hide Find/Replace panels after Скрывать панели поиска/замены через sec. сек. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+нажатие мышью = перейти к реализации, Meta+нажатие мышью = перейти к объявлению OptionsImpl Choose the project directory Укажите папку проекта Param Program parameters Параметры программы Run with these arguments: Запускать с аргументами: Working directory (leave empty to use project directory): Рабочая директория: ... ... Environment variables (NAME=value): Переменные окружения (ИМЯ=значение): Name Имя Value Значение &Edit &Править &Add &Добавить &Delete &Удалить &Sort &Сортировать &Default По &умолчанию &OK &OK &Cancel &Отмена ParametersImpl Choose the project location Выберите расположение проекта Cancel Отмена The variable "%1" already exists. Переменная "%1" уже существует. ProjectManager Save project changes ? Сохранить изменения в проекте? Yes Да No Нет Cancel Отмена Forms: Формы: Unable to create file. Не могу создать файл. Ok ОК Sub-project creation Создание подпроекта Sub-Projects Подпроект Sub-projects Подпроекты Headers Заголовки Sources Исходники Dialogs Диалоги Translations Переводы Resources Ресурсы Project parsing Разбор проекта New name: Новое имя: The kind of the new and the old filename is different ! Типы нового и старого имени файла разные! Rename Переименовать The file already exists in directory. Файл уже существует в директории. The file already exists. Файл уже существует. This file is not permitted. Этот файл не разрешен. Unable to rename the file to "%1" Не могу переименовать файл в "%1" The only available version for "%1" is %2 Единственная версия, доступная для "%1" - %2 Run on %1 Запустить %1 Cannot remove the main project. Нельзя удалить главный проект. Do you want to remove "%1" from the project ? Вы действительно хотите удалить "%1" из проекта? File not found: "%1" Файл не найден: %1 ProjectPropertie Dialog Диалог Configuration Конфигурация General : Главное: Version Версия build_all debug release debug_and_release Warnings Предупреждения warn_off warn_on Qt Libraries Библиотеки Qt core network sql xml gui opengl svg qt3support Advanced Options Дополнительные опции app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Переменные Variable : Переменная : ... ... Values : Значения: Project Template Шаблон проекта subdirs subdirs lib app Project or Scope : Проект или папка: OK ОК Cancel Отмена Default directories Папки по умолчанию Dialogs: Формы: Sources: Исходники: qtestlib Advanced options Расширенные опции Free CONFIG variables : Пользовательские переменные: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Новое значение: delete spaces or put quotes. уберите пробелы или замените кавычками. Modify Изменить Cancel Отмена Choose the sources location Выберите расположение исходников Choose the dialogs location Выберите расположение диалогов Properties of %1 Свойства %1 The spaces aren't correctly parsed by qmake Пробелы некорректно разобраны qmake'ом A new variable can not be "QT", "CONFIG" or "TEMPLATE" Новая переменная не может быть "QT", "CONFIG" или "TEMPLATE" QObject Loading: Загрузка: Interface translation Перевод интерфейса Environment control Управление окружением Files on editor Файлы в редакторе Main Window creation Создание главного окна Unable to start Assistant ! Не могу запустить Assistant! Unable to establish a database connection. Невозможно подключиться к базе данных. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop необходима поддержка SQLite. Пожалуйста, прочитайте документацию Qt SQL driver для сборки. Current project parsing Разбор текущего проекта Plugins Плагины Unable to start Designer ! Не могу запустить Designer! Registers Form Форма Name Имя Value Значение Apply Применить ReplaceWidget Form Форма find: Найти: Replacement: Заменить на: &Replace &Заменить Previous Предыдущее Next Следующее Case Sensitive Учитывать регистр Whole words Слово целиком Prompt Спрашивать подтверждение Reached end of page, continued from top Поиск с начала страницы Shortcuts Configure Shortcuts Настройка горячих клавиш Action Действие Shortcut Горячая клавиша Default По-умолчанию OK ОК Cancel Отмена Subclassing Qt Designer Form Subclassing Наследование то форм Qt дизайнера &New... &Новый... &Create &Создать C&ancel &Отмена Class Na&me: &Название класса: &File Name: Имя &файла: &Location: &Расположение: Filter &by: &Фильтр: SubclassingImpl Choose the file location Укажите расположение файла &Update &Обновить C&reate &Создать (.h and .cpp) (.h и .cpp) TabWidget Close Tab Закрыть вкладку Close Other Tabs Закрыть прочие вкладки Close All Tabs Закрыть все вкладки TextEdit Cancel Отмена Yes Да No Нет Cut Вырезать Copy Копировать Paste Вставить Selection Indent Начать выделение Selection Unindent Снять выделение Select All Выделить все Find... Найти... Toggle Bookmark Вкл/Выкл закладку Toggle Breakpoint Вкл/Выкл брейкпойнт The file "%1" could not be loaded. Файл "%1" не может быть загружен. Save "%1" Сохранить "%1" Unable to save %1 Не могу сохранить %1 Goto Implementation Перейти к Реализации Goto Declaration Перейти к Объявлению The Qt database building is in progress. Try to complete code later. Построение базы Qt уже в процессе. Попробуйте автозавершение кода позже. Reached end of page, continued from top Поиск с начала страницы ToolsControl External Tools Инструменты &Test &Тест ... ... lrelease: lrelease: make: make: qmake: qmake: designer: designer: ctags: ctags: lupdate: lupdate: gdb: gdb: linguist: linguist: Please enter the path to the external programs: Пожалуйста, введите путь к программам: Check environment on start Проверять окружение при старте assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags найден в "%1", но эта версия слишком старая. Ok Ok Please select the program Выберите программу TreeClasses Open Declaration Перейти к объявлению Open Implementation Открыть Реализацию Refresh contents Обновить содержимое Add Method... Добавить Метод... Add Variable... Добавить Переменную... Add get/set Methods... Добавить get/set Методы... TreeProject Add sub-project... Добавить под-проект... Add New Item... Добавить новый файл... Add Scope... Добавить папку... Add Existing Files... Добавить существующие файлы... Open in Linguist Открыть в Лингвисте Refresh translation files Обновить файлы перевода Build release translation files Собрать файлы перевода Open in Designer Открыть в Designer Dialog Subclassing... Объекты диалога... Dialog Preview Предварительный вид Диалога Open Открыть Show As Показать как Normal Нормальный Krawek Krawek Add New Class... Добавить новый класс... Rename... Переименовать... Properties of %1... Свойства %1... Remove from project Удалить из проекта Warning Dialog Диалог TextLabel TextLabel OK ОК Don't show anymore Больше не показывать qdevelop-v0.28/resources/translations/QDevelop_Portuguese.ts0000644000175000017500000047723711362261067023520 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versión</span></p></body></html> OK Ok <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Adicionar arquivos existentes OK Ok Cancel Cancelar Project or Scope : Projeto ou escopo: File : Arquivo: ... ... Copy files here: Copiar arquivos aqui: AddExistantImpl Enter a filename. Cancel Cancelar Enter a location destination. The file %1 doesn't exist. Unable to copy %1 Choose a directory Choose the file to add Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Adicionar um novo item Files Arquivos Translation Tradução Resources Recursos Dialog Diálogo Header Cabeçalho Sources Fontes Project or Scope: Projeto ou escopo: File Name : Nome do arquivo: Location : Localização: ... ... OK Ok Cancel Cancelar newfile.cpp novo.cpp AddNewClass Add New Class Adicionar nova classe OK Ok Cancel Cancelar Inheritance Herança Inherits another class Herança de outra classe Ancestor: Pai: Ancestor's include filename: Arquivo .h do pai: Scope: Escopo: Filenames Arquivos Header filename: Arquivo de cabeçalho: Implementation filename: Arquivo de implementação: Location : Localização: ... ... Project or Scope: Projeto ou escopo: Class name: Nome da classe: Constructor arguments: Argumentos do construtor: Virtual destructor Destructor virtual AddNewClassImpl Choose the file location The file "%1" already exists. Cancel Cancelar Unable to create file. AddNewClassMethod Add New Method Adicionar novo métodos Method Name: Nome do métodos: Return type: Tipo do retorno: Parameters: Parâmetros: Scope: Escopo: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel Cancelar AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Cancelar %1 already exists in class %2. AddNewClassVariable Add New Variable Adicionar nova variável Create get/set methods Criar get/set métodos inline inline set method set métodos get method get métodos OK OK Cancel Cancelar Variable Name: Variável nome: Type: Tipo: Scope: Escopo: AddNewClassVariableImpl Cancel Cancelar %1 already exists in class %2. AddNewImpl Choose the file location The suffix of the file is not correct. Cancel Cancelar header source Also create the file %1 in same location ? Yes No AddScope Add New Scope Adicionar novo escopo New Scope Novo escopo win32 win32 debug depuración unix unix release lanzamiento mac mac other otro Project or Scope : Projeto ou escopo: OK Ok Cancel Cancelar AddSetGet Add get/set methods Adicionar get/set métodos OK OK Cancel Cancelar Create get/set methods for Criar get/set métodos para inline inline set method set métodos get method get métodos AddSetGetImpl Cancel Cancelar BreakpointCondition Dialog Diálogo Condition : Condition : is true (breakpoint) é verdade (ponto de parada) has changed (watchpoint) mudou (watchpoint) Build Update project Clean Project Compilation of %1... Build Compilar Build stopped Debug Running... Exited normally Exited with error code %1 Debug... Debug exited Error: Unable to evaluate value Editor Refresh classes and methods lists Open %1 The file "%1" disappeared from fisk. What do you want to do? Recreate Close The file "%1" was modified outside editor. Overwrite Reload File %1 replacement(s) made. ExeChoice QDevelop QDevelop OK Ok Cancel Cancelar Choose program to Debug : Escolha o programa a depurar: Don't ask question anymore Não perguntar mais FindFile Find in Files Procurar nos arquivos Pattern: Padrão de busca: Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Recursive Recursivo *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Arquivos: ... ... Find in: Procurar em: &Find &Procurar &Close &Fechar Replace found text Substituir texto encontrado Replace with: Substituir por: FindFileImpl Choose a directory &Find &Procurar &Stop &Parar Cannot open temporary file %1 Line File FindWidget Form Formulário Previous Anterior Next Seguinte Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Reached end of page, continued from top Final da página alcançado, continuar do início GotoLine Goto Line Ir para a linha <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ir a Línea:</span></p></body></html> OK Ok Cancel Cancelar InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Toogle Breakpoint Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main QDevelop &? &? &Project &Projeto &View &Ver &Debug &Depuração &Build &Compilação &File &Arquivo &Edit &Editar Outputs Saídas Build Compilar Name Nome Type Tipo Address Endereço Value Valor ... ... Project Explorer Explorador de projetos Files Arquivos Classes Classes Files toolbar Barra de ferramentas de arquivos Edit Toolbar Barra de ferramentas de edição &New Project... &Novo projeto... &New File... &Novo arquivo... New File Novo arquivo &File... &Arquivo... &Close All Files &Fechar todos os arquivos &Save File &Salvar arquivo Ctrl+S Ctrl+S &Quit &Sair Undo Desfazer Ctrl+Z Ctrl+Z Redo Refazer Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Selecionar tudo Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Adicionar novo item Add Existing Files Adicionar arquivos existentes New Folder Nova pasta Project Properties Propriedades do projeto F7 F7 Clean Limpar Rebuild Re-compilar Compile File Compilar arquivo Shift+F7 Shift+F7 Start Program Iniciar programa Shift+F5 Shift+F5 Step Into Passo a passo detalhados F11 F11 Step Over Passo a passo principal F10 F10 Calls Stack Pilha de chamadas &Open... &Abrir... Ctrl+O Ctrl+O F3 F3 Stop Parar F6 F6 Breakpoints... Pontos de parada... Indent selection Indentar seleção Tab Tab Unindent selection Desindentar seleção Shift+Tab Shift+Tab F1 F1 Save Project As... Salvar projeto como... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Comentar Uncomment Descomentar Complete Code Completar código Ctrl+Space Ctrl+Space Toggle &Bookmark Alternar &favorito Toggle Bookmark Alternar favorito Ctrl+B Ctrl+B Clear &All Bookmarks Limpar &todos os favoritos &Open Project... &Abrir projeto... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Plugins Plugins Ctrl+N Ctrl+N Goto matching bracket Ir para a chave equivalente Ctrl+[ Ctrl+[ Foo Foo &Print... Im&primir... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &Favorito &Last Projects Úl&tima projetos B&uild &Compilação Las&t Files Úl&tima arquivos &Tools &Ferramentas &Plugins settings &Plugins configurações Ed&itors Ed&itore 1 Build and Debug Toolbar compilar e depurar barra de ferramentas Call Stacks Pilha de chamadas Registers Registers Save File &as... Salvar arquivo &como... Save A&ll Salvar &tudo &Undo &Desfazer &Redo &Refazer Cu&t Cor&tar &Copy &Copiar &Paste &Colar &Find... &Procurar... &Replace... &Substituir... &Find in Files... &Procurar nos arquivos... Add New &Item... Adicionar novo &item... Add Existing &Files... Adicionar &arquivos existentes... Project &Properties... &Propriedades do projeto... &Clean &Limpar &Rebuild &Re-compilar S&tart Program &Iniciar programa Step &Into Passo &dentro Step O&ver Passo s&obre &Calls Stack Pilha de &chamadas &Options... &Opções... &Parameters... &Parâmetros... &About... &Sobre... About &Qt... Sobre &Qt... Find &Next Procurar &próxima ocorrência &Stop &Parar &Stop Build &Parar compilação &Help Current Qt Word &Ajuda atual Qt palavra &Reset Executables List &Redefinir executáveis lista &Save Project &Salvar projeto C&lose Project &Fechar projeto Add &Scope... Adicionar &escopo... Step &Out Passo &fora &Close Current Editor &Fechar editor atual &Next Tab &Próxima Tab &Previous Tab &Anterior Tab &Switch to Header/Sources &Alternar Cabeçalhos/Fontes Set &Focus to Editor &Colocar o foco ao Editor Toggle &breakpoint Alternar &ponto de parada Goto &Methods List Ir à &métodos lista Configure &Shortcuts... Configurar &atalhos... &Goto Line... &Ir para a linha... Toggle Co&mments Alternar co&mentários E&xternal Tools... Fe&rramentas externas... &Next Bookmark &Próxima favorito &Previous Bookmark &Anterior favorito Find Pr&evious Encontrar A&nterior Goto matching &bracket Ir para a &chave equivalente Add New &Class... Adicionar nova &classe... Open F&ile in project... Abrir &arquivo no projeto... Goto &Implementation Ir à &implementação Goto &Declaration Ir à &declaração &Rebuild Qt classes database &Reconstruir Qt classes de dados Execute &qmake execute &qmake Show Maximized Mostrar maximizada &Editor mode &Editore modo Ctrl+E Next Warning/Error Próximo Aviso/Erro F4 F4 Previous Warning/Error Anterior Aviso/Erro Shift+F4 Shift+F4 Clear all Warnings/Errors Limpar todos os Aviso/Erro &Toolbars &Barra de ferramentas Dock windows Dock janelas Local Variables Local variâveis Other Variables Outras variáveis Find in files Procurar nos arquivos Full view Visualização completa Minimal view Minimal vista DocksWindow Dock Windows New submenu > Novo submenu > a um En&force qmake mode En &vigor qmake modo &Debug mode &Depuración modo &Release mode &Lançamento modo &Forget last used mode &Esqueça último modo utilizado MainImpl Choose the file to create Files Arquivos The file "%1" already exists in directory. Cancel Cancelar Unable to create %1 The Qt include directory doesn't exist, You can change in Options dialog. Ok Do you want to quit QDevelop ? Yes No Choose a file to open Sources Fontes Projects Texts All Files Choose a project to open The project %1 doesn't exist. Properties of %1... Files (*.cpp *.h *.txt *.* *) Cannot launch Linguist Stop Parar Build finished without error Build finished with error(s) and warning(s) Start The project has been modified, do you want to save your changes ? Stop debugging ? The program doesn't exist, run Build. Shift+F5 Shift+F5 F5 F5 Abort Stopping is not possible under Windows. Put breakpoints. Continue &%1 %2 Version %1 New Variable: The variable "%1" already exists. The Qt database building is already in progress. The Qt classes database build is ended. NewImplementation New Implementation Nova implementação Class Name : Nome da classe: File Name : Nome do arquivo: Location : Localização: ... ... &Ok &Ok C&ancel &Cancelar NewProject New project creation Novo projeto Template Modelo Application with Dialog Aplicação com diálogo Application with Main Window Aplicação com janela principal (MainWindow) Properties Propriedades Parent project : Projeto pai: Project name : Nome do projeto: Location : Localização: ... ... Project creation on : Criar projeto em: Version Versão Debug Version Versão da depuração Release Version Versão de lançamento OK Ok Cancel Cancelar Sub-directories Sub-diretórios Dialogs: Diálogos: Executable: Executável: ui ui bin bin sources: fontes: Objects: Objetos: src src build compilar Inheritance subclassing Herança de sub-classe Object name: Nome do objeto: File name: Nome do arquivo: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diálogo:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclase:</span></p></body></html> Empty or master project Vazia ou o principais projeto NewProjectImpl Choose the project directory Project file "%1" already exists Cancel Cancelar The directory "%1" already exists. Do you want to create project anyway? The directory "%1" cannot be created The project cannot be created NewVariable Dialog Diálogo OK Ok Cancel Cancelar Qt Variables Variáveis Qt User Variable Variável do usuário Variable : Variável: New Variable : Nova variável: Operator : Operadora : = += -= *= ~= OpenFile Open File in Project Abrir arquivo no projeto OK OK Cancel Cancelar Options Options Opções General Geral Prompt before quit Perguntar antes de sair Show classes explorer Mostrar classes no explorador Interval between updates: Intervalo entre as atualizações: seconds segundos Editor Editore Font: Fonte: End of line Final de linha Tab size Tamanho do TAB Current line background Fundo da linha atual Text background Fundo do texto Default Padrão Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Substituir TAB por espaços ... ... options opções Line numbers Números de linha Syntax highlighting Realce de sintaxe Auto-Brackets Fechar parênteses automaticamente Selection border Borda da seleção Complete Code Completar código Autoindent Indentar automaticamente Function/method names : Nomes de funções/métodos: Preprocessor : Pre-processador: Qt words : Palavras do Qt: Keywords : Palavras chave: Single comments : Comentários simples: Multiline comments : Comentários multi-linhas: Quotation strings : Quebra de textos: Default projects directory: Diretório padrão de projetos: Matching ( and { ( e { correspondentes User plugins directory: Diretório de plugins do usuário: Save all before build Guardar todos antes de compilar Automatic compilation Automatic compilação Qt include directory: Qt include diretório: Qt documentation directory: Qt documentação diretório: Make extra parameters: Make extras parâmetros: Reload last project when the application starts Recarregar último projeto quando a aplicação começa Close button in each tab (does not work with all styles) Botão Fechar em cada aba (isto não funciona com todos os estilos) Display editor toolbars Display editor barra de ferramentas Display white spaces Display branco espaços Files encoding: Arquivos codificação: Text color Cor do texto Right margin line Linha de margem direito Column: Coluna: Auto-Comments Auto-Comentários <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Transferir a próxima linha Hide Find/Replace panels after Ocultar Localizar / Substituir painéis depois sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Ir para implementação, Meta+click = Ir para declaração OptionsImpl Choose the project directory Param Program parameters Parâmetros do programa Run with these arguments: Executar com estes parâmetros: Working directory (leave empty to use project directory): Diretório de trabalho (deixe vazio para usar o de projetos): ... ... Environment variables (NAME=value): Variáveis de ambiente (NOME=valor): Name Nome Value Valor &Edit &Editar &Add &Adicionar &Delete &Remover &Sort &Ordenar &Default Pa&drão &OK &Ok &Cancel &Cancelar ParametersImpl Choose the project location The variable "%1" already exists. Cancel Cancelar ProjectManager Project parsing Save project changes ? Yes No Cancel Cancelar The file already exists in directory. Forms: Unable to create file. The file already exists. This file is not permitted. Ok Sub-project creation Sub-Projects File not found: "%1" New name: The kind of the new and the old filename is different ! Rename Unable to rename the file to "%1" Cannot remove the main project. Do you want to remove "%1" from the project ? Sub-projects Headers Sources Fontes Dialogs Translations Resources Recursos The only available version for "%1" is %2 Run on %1 ProjectPropertie Dialog Diálogo Configuration Configuração General : Geral: Version Versão build_all debug release debug_and_release Warnings Advertências warn_off warn_on Qt Libraries Bibliotecas Qt core core network sql sql xml xml gui gui opengl opengl svg svg qt3support Advanced Options Opções avançadas app_bundle assistant console designer dll dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qt resources rtti staticlib stl stl thread uic3 uitools windows x11 x11 x86 x86 Variables Variable : Variável: ... ... Values : Valores: Project Template Modelo de projeto subdirs subdirs lib lib app app Project or Scope : Projeto ou escopo: OK Ok Cancel Cancelar Default directories Diretórios padrões Dialogs: Diálogos: Sources: Código fonte: qtestlib qtestlib Advanced options Opções avançadas Free CONFIG variables : Livre CONFIG variáveis : script webkit phonon xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl Properties of %1 A new variable can not be "QT", "CONFIG" or "TEMPLATE" Cancel Cancelar New Value: The spaces aren't correctly parsed by qmake delete spaces or put quotes. Modify Choose the sources location Choose the dialogs location QObject Unable to establish a database connection. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. Unable to start Assistant ! Unable to start Designer ! Loading: Interface translation Environment control Files on editor Plugins Plugins Main Window creation Current project parsing Registers Form Formulário Name Nome Value Valor Apply Aplicar ReplaceWidget Form Formulário find: procurar: Replacement: Substituição: &Replace &Substituir Previous Anterior Next Seguinte Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Prompt Perguntar Reached end of page, continued from top Final da página alcançado, continuar do início Shortcuts Configure Shortcuts Configurar atalhos Action Ação Shortcut Atalho Default Padrão OK Ok Cancel Cancelar Subclassing Qt Designer Form Subclassing Sub-classe de formulário do Qt Designer &New... &Novo... &Create &Criar C&ancel C&ancelar Class Na&me: &Nome da classe: &File Name: Nome do &arquivo: &Location: &Localização: Filter &by: &Filtrar por: SubclassingImpl &Update C&reate (.h and .cpp) Choose the file location TabWidget Close Tab Close Other Tabs Close All Tabs TextEdit The Qt database building is in progress. Try to complete code later. The file "%1" could not be loaded. Cancel Cancelar Save "%1" Yes No Unable to save %1 Reached end of page, continued from top Final da página alcançado, continuar do início Goto Implementation Goto Declaration Cut Copy Paste Selection Indent Selection Unindent Select All Selecionar tudo Find... Toggle Bookmark Alternar favorito Toggle Breakpoint ToolsControl External Tools Ferramentas externas qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Testar Please enter the path to the external programs: Entre com o caminho para os programas externos: Check environment on start Verificar ambiente ao iniciar assistant: assistente: ToolsControlImpl Please select the program Ctags was detected in path %1, but this version is too old. Ok TreeClasses Open Declaration Open Implementation Add Method... Add Variable... Add get/set Methods... Refresh contents TreeProject Add sub-project... Add New Item... Add Scope... Add New Class... Add Existing Files... Open in Linguist Refresh translation files Build release translation files Open in Designer Dialog Subclassing... Dialog Preview Open Rename... Remove from project Properties of %1... Show As Normal Krawek Warning Dialog Diálogo TextLabel TextLabel OK Ok Don't show anymore Não mostrar mais qdevelop-v0.28/resources/translations/QDevelop_Italian.ts0000644000175000017500000046770711362261067022740 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versione</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Sviluppatore principale: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Autocompletamento del codice: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Sviluppatore: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Sviluppatore: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Sviluppatore: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sviluppatore: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sviluppatore: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Impacchettatore: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Traduzione italiana: Alessandro Bruni &lt;<a href="mailto:alessandro.bruni@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">alessandro.bruni@gmail.com</span></a>&gt;</p><br/> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Aggiungi files esistenti OK OK Cancel Annulla Project or Scope : Progetto o Contesto : File : File : ... ... Copy files here: Copia qui i files: AddExistantImpl Choose the file to add Scegli i files da aggiungere Enter a filename. Inserisci il nome del file. Cancel Cancella Enter a location destination. Inserisci percorso di destinazione. Choose a directory Scegli una cartella The file %1 doesn't exist. Il file %1 non esiste. Unable to copy %1 Impossibile copiare %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) File (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Aggiungi nuovo elemento Files Files Translation Traduzioni Resources Risorse Dialog Finestre Header Intestazioni Sources Sorgenti Project or Scope: Progetto o Contesto: File Name : Nome file : Location : Destinazione : ... ... OK OK Cancel Cancella newfile.cpp nuovofile.cpp AddNewClass OK OK Cancel Cancella Inheritance Ereditarietà Inherits another class Eredita un'altra classe Ancestor: Antenato: Ancestor's include filename: Nome file include antenato: Scope: Contesto: Filenames Nomi file Header filename: Nome file intestazione: Implementation filename: Nome file implementazione: Location : Destinazione : ... ... Project or Scope: Progetto o Contesto: Class name: Nome classe: Constructor arguments: Argomenti costruttore: Virtual destructor Distruttore virtuale Add New Class Aggiungi nuova Classe AddNewClassImpl Choose the file location Scegli la destinazione del file Cancel Annulla Unable to create file. Impossibile creare il file. The file "%1" already exists. Il file "%1" esiste già. AddNewClassMethod Add New Method Aggiungi Nuovo Metodo Method Name: Nome Metodo: Return type: Tipo di Ritorno: Parameters: Parametri: Scope: Contesto: Inline Virtual Static Pure OK Cancel Cancella AddNewClassMethodImpl Add New Method in class %1 Aggiungi nuovo metodo nella classe %2 An implementation file is required. E' richiesto un file di implementazione. Cancel Cancella %1 already exists in class %2. %1 esiste già nella classe %2. AddNewClassVariable Add New Variable Aggiungi Nuova Variabile Create get/set methods Generare metodi get/set inline set method set metodo get method get metodo OK Cancel Cancella Variable Name: Nome Variabile: Type: Tipo: Scope: Contesto: AddNewClassVariableImpl Cancel Cancella %1 already exists in class %2. %1 esiste già nella classe %2. AddNewImpl Choose the file location Scegli una destinazione per il file The suffix of the file is not correct. Il suffisso del file non è corretto. Cancel Cancella header intestazione Yes Si No No Also create the file %1 in same location ? Generare inoltre il file %1 nella stessa posizione ? source sorgente AddScope Add New Scope Aggiungi nuovo Contesto New Scope Nuovo Contesto win32 debug unix release mac other altro Project or Scope : Progetto o Contesto : OK Cancel Annulla AddSetGet Add get/set methods Aggiungi metodi get/set OK Cancel Cancella Create get/set methods for Generare metodi get/set per inline set method metodo set get method metodo get AddSetGetImpl Cancel Cancella BreakpointCondition Dialog Dialogo Condition : Condizioni : is true (breakpoint) È vero (punto d'arresto) has changed (watchpoint) È cambiato (watchpoint) Build Update project Aggiorna progetto Clean Project Pulisci Progetto Build Generazione Build stopped Generazione interrotta Compilation of %1... Compilazione di %1... Debug Running... Esecuzione... Exited normally Finito normalmente Debug... Debug... Debug exited Debug finito Error: Unable to evaluate value Errore: Impossibile valutare il valore Exited with error code %1 Uscito con codice d'errore %1 Editor Refresh classes and methods lists Aggiorna la lista delle classi e dei metodi What do you want to do? Che cosa vuoi fare? Overwrite Sovrascrivi Reload File Aggiorna file The file "%1" was modified outside editor. Il file "%1" è stato modificato fuori dall'editor. Open %1 Apri %1 %1 replacement(s) made. %1 sostituzione(i) eseguita(e). The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Cancel Annulla Choose program to Debug : Scegli il programma per il Debug : Don't ask question anymore Non fare altre domande FindFile Find in Files Cerca in più Files Pattern: Pattern: Case Sensitive Distingui Maiuscole Whole words Parole intere Recursive Ricorsivo *.cpp; *.h *.ui; *.qrc; *.txt Files: File: ... ... Find in: Cerca in: &Find &Cerca &Close &Chiudi Replace found text Rimpiazza il testo trovato Replace with: Rimpiazza con: FindFileImpl Choose a directory Scegli una cartella Line Linea File File &Find &Cerca &Stop &Ferma Cannot open temporary file %1 Impossibile aprire il file temporaneo "%1" FindWidget Form Finestra Previous Precedente Next Successivo Case Sensitive Distingui maiuscole Whole words Parole intere Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio GotoLine Goto Line Vai alla Linea <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Vai alla linea</span></p></body></html> OK Cancel Annulla InitCompletion Unable to launch %1 Impossibile lanciare %1 Unable to open %1 Impossibile aprire %1 LineNumbers Toogle Bookmark Inserisci/Togli Segnalibro Toogle Breakpoint Inserisci/Togli Punto d'arresto Breakpoint Condition... Condizioni dei punti d'arresto... LogBuild error errore warning avvertimento error Compiler message errore undefined reference to Linker message riferimento non definito verso warning Compiler message avvertimento Main QDevelop &? &? Build Generazione &Edit &Modifica &File &File Outputs Output Files Files Files toolbar Barra dei files Edit Toolbar Barra delle modifiche &New Project... &Nuovo Progetto... &File... &File... &Close All Files &Chiudi tutti i File &Save File &Salva File Ctrl+S &Quit &Esci Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Seleziona tutto Ctrl+F Add New Item Aggiungi nuovo elemento Add Existing Files Aggiungi Files esistenti New Folder Nuova Cartella Project Properties Proprietà del Progetto F7 Clean Cancella Rebuild Rigenera Shift+F7 Start Program Avvia il Programma Shift+F5 Step Into Passo dentro F11 Step Over Passo oltre F10 &Open... &Apri... F3 Stop Ferma F6 Breakpoints... Punti d'arresto... Indent selection Indenta selezione Tab Unindent selection Togli indentazione selezione Shift+Tab F1 Project Explorer Esplora Progetto Save Project As... Salva il Progetto con nome... Compile File Compila File Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Esci Undo Annulla Redo Rifai F9 &View &Visualizza &Project &Progetto &Build &Genera &Debug &Debug Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Completa il Codice Ctrl+Space Ctrl+D &New File... &Nuovo File... New File Nuovo File Comment Commenta Uncomment Decommenta Classes Classi Calls Stack Chiamata Stack Name Nome Type Tipo Address Indirizzo Value Valore ... ... Toggle &Bookmark Inserisci/Togli &Segnalibro Toggle Bookmark Inserisci/Togli Segnalibro Ctrl+B Clear &All Bookmarks &Cancella tutti i Segnalibri &Open Project... &Apri Progetto... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Estensioni Ctrl+N Goto matching bracket Vai alla parentesi corrispondenti Ctrl+[ Foo Foo &Print... &Stampa... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Segnalibro &Last Projects U&ltimi Progetti B&uild &Genera Las&t Files Ul&timi files &Tools Str&umenti &Plugins settings Estensioni im&postazioni Ed&itors Ed&itor 1 Build and Debug Toolbar Barra Genera e Debug Call Stacks Chiamata Stacks Registers Registri Save File &as... S&alva file con nome... Save A&ll S&alva Tutto &Undo &Annulla &Redo &Rifai Cu&t &Taglia &Copy &Copia &Paste &Incolla &Find... &Cerca... &Replace... &Sostituisci... &Find in Files... &Cerca nei File... Add New &Item... Aggiungi &nuovo elemento... Add Existing &Files... Aggiungi &file esistenti... Project &Properties... Proprietà del &Progetto... &Clean &Cancella &Rebuild &Rigenera S&tart Program &Avvia il Programma Step &Into Passo &dentro Step O&ver Passo &oltre &Calls Stack &Chiamata Stack &Options... &Opzioni... &Parameters... &Parametri... &About... &About... About &Qt... About &Qt... Find &Next Ricerca &Successiva &Stop &Ferma &Stop Build &Ferma Generazione &Help Current Qt Word &Aiuto sulle attuali parole di Qt &Reset Executables List &Reimpostare la lista degli eseguibili &Save Project &Salva il progetto C&lose Project &Chiudi il progetto Add &Scope... Aggiungi &Contesto... Step &Out Passo fu&ori &Close Current Editor &Chiudi editor attuale &Next Tab Tab &successivo &Previous Tab Tab &precedente &Switch to Header/Sources &Passa a Intestazioni/Sorgenti Set &Focus to Editor Imposta &Focus all'editor Toggle &breakpoint Inserisci/Togli &Punto d'arresto Goto &Methods List Vai alla lista dei &metodi Configure &Shortcuts... Configura &scorciatoie... &Goto Line... &Vai alla Linea... Toggle Co&mments Co&mmento singolo E&xternal Tools... Strumenti e&sterni... &Next Bookmark Prossimo &Segnalibro &Previous Bookmark &Precedente Segnalibro Find Pr&evious Ricerca Pr&ecedente Goto matching &bracket Vai alla &parentesi corrispondenti Add New &Class... Aggiungi nuova &Classe... Open F&ile in project... Apri f&ile nel Progetto... Goto &Implementation Vai alla &Implementazione Goto &Declaration Vai alla &Dichiarazione &Rebuild Qt classes database &Rigenera classi Qt di database Execute &qmake Eseguibile &qmake Show Maximized Visualizza Massimizzato &Editor mode Modalità di &Editing Ctrl+E Next Warning/Error Successivo Avvertimenti/Errori F4 Previous Warning/Error Precedente Avvertimenti/Errori Shift+F4 Clear all Warnings/Errors Cancella tutti i Avvertimenti/Errori &Toolbars &Toolbar Dock windows Finestre dock Local Variables Variabili locali Other Variables Altre variabili Find in files Trova nei file Full view Vista completa Minimal view Vista minimale DocksWindow Finestra di dock Dock Windows Finestre di dock New submenu > Nuovo sottomenu > a a En&force qmake mode &Forza il target qmake &Debug mode Modalità &debug &Release mode Modalità &release &Forget last used mode Dimentica l'ultima modalità usata MainImpl Cancel Annulla Choose a file to open Scegli un file da aprire Choose the file to create Scegli il file da creare Files (*.cpp *.h *.txt *.* *) File (*.cpp *.h *.txt *.* *) Stop Ferma Start Avvio The project has been modified, do you want to save your changes ? Il progetto è stato modificato, vuoi salvare i cambiamenti? Yes Si No No run Build. avvio Generazione. Ok Ok Stop debugging ? Ferma il debugging ? Abort Interrompi Continue Continua &%1 %2 &%1 %2 Do you want to quit QDevelop ? Vuoi uscire da QDevelop ? Shift+F5 F5 Files File Sources Sorgenti Projects Progetti Texts Testi All Files Tutti i File Stopping is not possible under Windows. Put breakpoints. La terminazione non è possibile sotto Windows. Inserisci punti d'arresto. New Variable: Nuova Variabile: Choose a project to open Scegli un progetto da aprire Build finished without error Generazione terminata senza errori Build finished with Generazione terminata con error(s) errori and e warning(s) avvertimenti The file "%1" already exists in directory. Il file "%1" esiste già nell'elenco. Unable to create %1 Impossibile creare %1 The project %1 doesn't exist. Il progetto %1 non esiste. Properties of %1... Proprietà di %1... The program doesn't exist, Il programma non esiste, The variable "%1" already exists. La variabile "%1" esiste già. The Qt include directory doesn't exist, You can change in Options dialog. La cartella Qt "Include" non esiste, 
verifica in Strumenti->Opzioni. The Qt database building is already in progress. La creazione del database Qt è già in corso. The Qt classes database build is ended. La creazione del database delle classi Qt è concluso. Version %1 Versione %1 Cannot launch Linguist NewImplementation New Implementation Nuova Implementazione &Ok &Ok C&ancel &Annulla File Name : Nome File : Class Name : Nome Classe : Location : Destinazione : ... ... NewProject New project creation Creazione nuovo progetto Parent project : Progetto padre : Project name : Nome Progetto : Location : Destinazione : ... ... Project creation on : Progetto creato in : OK Cancel Annulla Template Modello Application with Dialog Applicazione con Finestra Application with Main Window Applicazione con Finestra Principale Properties Proprietà Version Versione Debug Version Versione Debug Release Version Versione Release Sub-directories Sotto cartella Dialogs: Finestre: Executable: Eseguibile: ui bin sources: sorgenti: Objects: Oggetti: src build Inheritance subclassing Sottoclasse Object name: Nome oggetto: File name: Nome file: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Progetto vuoto o master NewProjectImpl Choose the project directory Scegli una cartella per il progetto The directory "%1" cannot be created La cartella "%1" non può essere creata Cancel Annulla The project cannot be created Il progetto non può essere creato Project file "%1" already exists Il file di progetto "%1" esiste già The directory "%1" already exists. Do you want to create project anyway? La cartella "%1" esiste già. Vuoi creare comunque il progetto? NewVariable Dialog Finestra OK Cancel Annulla Qt Variables Variabili Qt User Variable Variabili Utente Variable : Variabile : New Variable : Nuova Variabile : Operator : Operator : = += -= *= ~= OpenFile Open File in Project Apri file nel progetto OK Cancel Annulla Options Options Opzioni General Generale Editor Editor Line numbers Numero linee Selection border Seleziona bordo Autoindent Autoindentazione Syntax highlighting Colorazione sintassi Function/method names : Nomi di funzioni/metodi : Preprocessor : Preprocessore : Qt words : Parole Qt : Keywords : Parole chiave : Single comments : Commento singolo : Multiline comments : Commento multilinea : Quotation strings : Stringhe tra virgolette: ... ... Default Default Replace Tab by spaces Sostituisci Tab con spazi Unix Dos/Windows Complete Code Completamento Codice Prompt before quit Conferma prima di uscire Font: Font: End of line Fine linea options opzioni Auto-Brackets Parentesi automatiche Tab size Dimensione Tab Current line background Sfondo linea corrente Text background Colore testo Show classes explorer Visualizza esplorazione classi Interval between updates: Intervallo tra aggiornamenti: seconds secondi Default projects directory: Cartella del Progetto di default: Matching ( and { Corrispondenza di ( e { User plugins directory: Cartella estensioni utente: Save all before build Salvare prima di generare Automatic compilation Compilazione automatica Qt include directory: Cartella Qt include: Qt documentation directory: Cartella documentazione Qt: Make extra parameters: Passa parametri aggiuntivi: Reload last project when the application starts Ricarica l'ultimo progetto quando l'applicazione viene eseguita Close button in each tab (does not work with all styles) Pulsante Chiudi in ciascun tab (non funziona con tutti gli stili) Display editor toolbars Mostra editor (barre strumenti) Display white spaces Visualizza spazi bianchi Files encoding: File di codifica: Text color Colore del testo Right margin line Linea di margine destro Column: Colonna: Auto-Comments Commenti automatici <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap A capo automatico Hide Find/Replace panels after Chiudi i pannelli di ricerca/sostituzione alla fine sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Vai all'implementazione, Meta+click = Vai alla dichiarazione OptionsImpl Choose the project directory Scegli la cartella per il progetto Param Program parameters Parametri del programma Run with these arguments: Avvia con questi argomenti: Working directory (leave empty to use project directory): Cartella di lavoro (lascia vuoto per utilizzare la cartella di progetto): ... ... Environment variables (NAME=value): Variabili di ambiente (NOME=valore): Name Nome Value Valore &Add &Aggiungi &Delete &Cancella &Sort &Ordina &Default &Default &OK &OK &Cancel &Annulla &Edit &Modifica ParametersImpl Choose the project location Scegli la destinazione per il progetto Cancel Annulla The variable "%1" already exists. La variabile "%1" esiste già. ProjectManager Save project changes ? Vuoi salvare i cambiamenti al progetto ? Yes Si No No Cancel Annulla Forms: Finestre: Unable to create file. Impossibile creare il file. Ok Sub-project creation Creazione sotto-progetto Sub-Projects Sotto-progetti Sub-projects Sotto-progetti Headers Intestazioni Sources Sorgenti Dialogs Finestre Translations Traduzioni Resources Risorse Project parsing Analisi del progetto New name: Nuovo nome: The kind of the new and the old filename is different ! Il nuovo e il vecchio nome file hanno tipo differente ! Rename Rinomina The file already exists in directory. Il file esiste già nell'elenco. The file already exists. Il file esiste già. This file is not permitted. Questo file non è consentito. Unable to rename the file to "%1" Impossibile rinominare il file con "%1" The only available version for "%1" is %2 L'unica versione disponibile per "%1" è %2 Run on %1 Esegui su %1 Cannot remove the main project. Non è possibile rimuovere il progetto principale. Do you want to remove "%1" from the project ? Vuoi rimuovere "%1" dal progetto ? File not found: "%1" File non trovato: "%1" ProjectPropertie Dialog Finestra Configuration Configurazione General : Generale : Version Versione build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Librerie Qt core network sql xml gui opengl svg qt3support Advanced Options Opzioni avanzate app_bundle assistant console designer dll exceptions eccezioni lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources risorse rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variabili Variable : Variabile : ... ... Values : Valori : Project Template Tipo di Progetto subdirs Sottodirectory lib app Project or Scope : Progetto o Contesto : OK Cancel Annulla Default directories Cartella predefinita Dialogs: Finestre: Sources: Sorgenti: qtestlib Advanced options Opzioni avanzate Free CONFIG variables : Variabili CONFIG libere : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nuovo Valore: delete spaces or put quotes. cancella spazi o aggiungi virgolette. Modify Modifica Cancel Annulla Choose the sources location Scegli una destinazione per i sorgenti Choose the dialogs location Scegli una destinazione per le finestre Properties of %1 Proprietà del %1 The spaces aren't correctly parsed by qmake Gli spazi non sono analizzati correttamente da qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nessuna variabile si può chiamare "QT", "CONFIG" o "TEMPLATE" QObject Unable to start Assistant ! Impossibile avviare Assistant ! Loading: Caricamento: Interface translation Traduzione interfaccia Environment control Variabili d'ambiente Files on editor File sull'editor Main Window creation Creazione finestra principale Unable to establish a database connection. Impossibile stabilire una connessione al database. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop necessita il supporto di SQLite. Per piacere leggi la documentazione "Qt SQL driver" per informazioni. Current project parsing Analisi progetto corrente Plugins Estensioni Unable to start Designer ! Impossibile eseguire Designer ! Registers Form Finestra Name Nome Value Valore Apply Applica ReplaceWidget Form Finestra find: trova: Replacement: sostituisci con: &Replace Sostituisci (&R) Previous Precedente Next Successivo Case Sensitive Whole words Parole intere Prompt Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio Shortcuts Configure Shortcuts Configura scorciatoie Action Azioni Shortcut Scorciatoie Default Default OK Cancel Annulla Subclassing Qt Designer Form Subclassing Sottoclasse della Finestra Qt Designer &Create &Crea C&ancel &Annulla &New... &Nuovo... Class Na&me: &Nome classe: &File Name: Nome &File: &Location: &Destinazione: Filter &by: Fil&tro di: SubclassingImpl Choose the file location Scegli la destinazione del file &Update &Aggiorna C&reate &Crea (.h and .cpp) (.h e .cpp) TabWidget Close Tab Chiudi Tab Close Other Tabs Chiudi gli altri Tab Close All Tabs Chiudi tutti i Tab TextEdit Cancel Annulla Yes Si No No Cut Taglia Copy Copia Paste Incolla Selection Indent Indenta selezione Selection Unindent Togli la selezione dell'indentazione Select All Seleziona tutto Find... Cerca... Toggle Bookmark Inserisci/Togli Segnalibro Toggle Breakpoint Inserisci/Togli Punto d'arresto The file "%1" could not be loaded. Il file "%1" non è potuto essere caricato. Save "%1" Salva "%1" Unable to save %1 Impossibile salvare %1 Goto Implementation Vai all'implementazione Goto Declaration Vai alla Dichiarazione The Qt database building is in progress. Try to complete code later. La generazione del database Qt è in corso. Cerca di completare il codice più tardi. Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio ToolsControl External Tools Strumenti esterni qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Testa Please enter the path to the external programs: inserisci il percorso per i programmi esterni: Check environment on start Verifica le variabili d'ambiente all'avvio assistant: assistente: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Il percorso di Ctags è %1, ma questa versione è troppo vecchia. Ok Please select the program Per favore seleziona il programma TreeClasses Open Declaration Apri Dichiarazione Open Implementation Apri Implementazione Refresh contents Ricarica contenuti Add Method... Aggiungi Metodo... Add Variable... Aggiungi Variabile... Add get/set Methods... Aggiungi metodi get/set... TreeProject Add sub-project... Aggiungi sotto-progetto... Add New Item... Aggiungi nuovo elemento... Add Scope... Aggiungi Contesto... Add Existing Files... Aggiungi file esistenti... Open in Linguist Apri in Linguist Refresh translation files Ricarica file di traduzione Build release translation files Genera i files di traduzione "release" Open in Designer Apri in Designer Dialog Subclassing... Sotto-classe finestra... Dialog Preview Visualizzazione finestra Open Apri Show As Visualizza come Normal Normale Krawek Krawek Add New Class... Aggiungi nuova Classe... Rename... Rinomina... Properties of %1... Proprietà del %1... Remove from project Rimuovere dal progetto Warning Dialog Finestra TextLabel Etichetta con testo OK OK Don't show anymore Non mostrare più qdevelop-v0.28/resources/translations/QDevelop_Ukrainian.ts0000644000175000017500000050556011362261067023266 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt; font-style:italic;">Версія</span></p></body></html> OK Угу <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Додати існуючі файли Project or Scope : Проект або тека: File : Файл: Copy files here: Скопіювати файли сюди: ... ... OK Угу Cancel Відмінити AddExistantImpl Enter a filename. Введіть ім’я файлу. Cancel Відміна Enter a location destination. Введіть місце призначення. Choose a directory Вкажіть теку Choose the file to add Вкажіть файл, який необхідно додати The file %1 doesn't exist. Unable to copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Додати новий файл Files Файли Translation Переклади Resources Ресурси Dialog Діалог Header Заголовок Sources Вихідні коди Project or Scope: Проект або Тека: File Name : Ім’я файлу: Location : Шлях: ... ... OK Угу Cancel Відмінити newfile.cpp newfile.cpp AddNewClass OK Угу Cancel Відмінити Inheritance Наслідування Inherits another class Наслідування іншого класу Ancestor: Батьківський клас: Ancestor's include filename: Ім’я файлу батьківського класу: Scope: Тип наслідування: Filenames Імена файлів Header filename: Ім’я файлу заголовка: Implementation filename: Ім’я файлу реалізації: Location : Шлях: ... ... Project or Scope: Проект або Тека: Class name: Ім’я класу: Constructor arguments: Параметри конструктора: Virtual destructor Віртуальний деструктор Add New Class Додати новий клас AddNewClassImpl Choose the file location Вкажіть місцезнаходження файлу Cancel Відмінити Unable to create file. Не можу створити файл. The file "%1" already exists. AddNewClassMethod Add New Method Method Name: Return type: Parameters: Scope: Тип наслідування: Inline Virtual Static Pure OK Угу Cancel Відмінити AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Відмінити %1 already exists in class %2. AddNewClassVariable Add New Variable Create get/set methods inline set method get method OK Угу Cancel Відмінити Variable Name: Type: Scope: Тип наслідування: AddNewClassVariableImpl Cancel Відмінити %1 already exists in class %2. AddNewImpl Choose the file location Вкажіть місцезнаходження файлу The suffix of the file is not correct. Невірне розширення файлу. Cancel Відмінити header заголовка Yes Так No Ні Also create the file %1 in same location ? source AddScope Add New Scope Додати нову теку New Scope Нова тека win32 win32 debug debug unix unix release release mac mac other інші Project or Scope : Проект або Тека: OK Угу Cancel Відмінити AddSetGet Add get/set methods OK Угу Cancel Відмінити Create get/set methods for inline set method get method AddSetGetImpl Cancel Відмінити BreakpointCondition Dialog Dialog Condition : is true (breakpoint) has changed (watchpoint) Build Update project Оновити проект Clean Project Очистити проект Build Збирання Build stopped Збирання припинене Compilation of %1... Debug Running... Запуск... Exited normally Нормальне завершення Debug... Відладка... Debug exited Відладка завершена Error: Unable to evaluate value Помилка: неможливо розрахувати значення Exited with error code %1 Editor Refresh classes and methods lists Оновити списки класів і методів What do you want to do? Що Ви хочете зробити? Overwrite Перезаписати Reload File Перезагрузити файл The file "%1" was modified outside editor. Open %1 %1 replacement(s) made. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Угу Cancel Відмінити Choose program to Debug : Вкажіть програму для відладки: Don't ask question anymore Більше не задавати питань FindFile Find in Files Пошук у файлі Pattern: Шаблон: Case Sensitive Враховувати регістр Whole words Усе слово Recursive Рекурсивно *.cpp; *.h *.cpp;*.h *.ui; *.qrc; *.txt *.ui;*.qrc;*.txt Files: Файли: ... ... Find in: Шукати в: &Find &Пошук &Close &Закрити Replace found text Replace with: FindFileImpl Choose a directory Вкажіть теку &Find &Шукати &Stop &Стоп Line Стрічка File Файл Cannot open temporary file %1 FindWidget Form Форма Previous Минула Next Наступна Case Sensitive Враховувати регістр Whole words Усе слово Reached end of page, continued from top При досягненні кінця стрінки шукає з початку GotoLine Goto Line Перейти на стрічку <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Перейти на стрічку:</span></p></body></html> OK Угу Cancel Відмінити InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Вкл/Викл закладку Toogle Breakpoint Вкл/Викл точку зупинки Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main &? &? &File &Файл &Project &Проект &Build &Збірка &Debug &Відладка &View &Вигляд &Edit &Редагувати Outputs Вивід Build Збірка Project Explorer Склад проекту Files toolbar Панель Файли Edit Toolbar Панель Редагування &New Project... &Новий Проект... &New File... &Новий Файл... New File Новий файл &File... &Файл... &Close All Files &Закрити всі файли &Save File &Зберегти файл Ctrl+S Ctrl+S &Quit &Вихід Undo Відмінити Ctrl+Z Ctrl+Z Redo Повторити Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Виділити все Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Додати новий Add Existing Files Додати існуючий New Folder Нова тека Project Properties Властивості проекту F7 F7 Clean Очистити Rebuild Перезібрати Compile File Компіляція файлу Shift+F7 Shift+F7 Start Program Старт програми Shift+F5 Shift+F5 Step Into Крок в середину F11 F11 Step Over Крок F10 F10 &Open... &Відкрити... Ctrl+O Ctrl+O F3 F3 Stop Стоп F6 F6 Breakpoints... Точки зупинки... Indent selection Встановити виділення Tab Табуляція Unindent selection Зняти виділення Shift+Tab Shift+Tab F1 F1 Files Файли Save Project As... Зберегти проект як... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Закоментувати Uncomment Розкоментувати Complete Code Автодоповнення коду Ctrl+Space Ctrl+Space QDevelop QDevelop Name Ім’я Type Тип Address Адреса Value Значення ... ... Classes Класи Calls Stack Стек викликів Toggle &Bookmark Встановити &Закладку Toggle Bookmark Вкл/Викл закладку Ctrl+B Ctrl+B Clear &All Bookmarks Прибрати &всі закладки &Open Project... &Відкрити Проект... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Goto matching bracket Перейти до парной скобки Ctrl+[ Ctrl+[ Plugins Додатки Ctrl+N Ctrl+N Foo Foo &Print... &Друк... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Last Projects B&uild Las&t Files &Tools &Plugins settings Ed&itors 1 Build and Debug Toolbar Call Stacks Registers Save File &as... Save A&ll &Undo &Redo Cu&t &Copy &Paste &Find... &Replace... &Find in Files... Add New &Item... Add Existing &Files... Project &Properties... &Clean &Rebuild S&tart Program Step &Into Step O&ver &Calls Stack &Options... &Parameters... &About... About &Qt... Find &Next &Stop &Стоп &Stop Build &Help Current Qt Word &Reset Executables List &Save Project C&lose Project Add &Scope... Step &Out &Close Current Editor &Next Tab &Previous Tab &Switch to Header/Sources Set &Focus to Editor Toggle &breakpoint Goto &Methods List Configure &Shortcuts... &Goto Line... Toggle Co&mments E&xternal Tools... &Next Bookmark &Previous Bookmark Find Pr&evious Goto matching &bracket Add New &Class... Open F&ile in project... Goto &Implementation Goto &Declaration &Rebuild Qt classes database Execute &qmake Show Maximized &Editor mode Ctrl+E Next Warning/Error F4 F4 Previous Warning/Error Shift+F4 Shift+F4 Clear all Warnings/Errors &Toolbars Dock windows Local Variables Other Variables Find in files Full view Minimal view DocksWindow Dock Windows New submenu > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Виберіть файл для створення Files Файли Cancel Відмінити Yes Так No Ні Choose a file to open Виберіть файл для відкриття Sources Вихідні коди Projects Проекти Texts Тексти All Files Всі файли Files (*.cpp *.h *.txt *.* *) Файли (*.cpp *.h *.txt *.* *) Stop Стоп Start Старт The project has been modified, do you want to save your changes ? Проект був змінений, зберегти зміни? Stop debugging ? Зупинити відладку? run Build. запустіть Збирання. Ok Угу Shift+F5 Shift+F5 F5 F5 Abort Перервати Stopping is not possible under Windows. Put breakpoints. Зупинка неможлива у Windows. Встановіть точки зупинки. Continue Продовжити &%1 %2 &%1 %2 Do you want to quit QDevelop ? Ви дійсно хочете вийти з QDevelop? New Variable: Нова змінна: Choose a project to open Виберіть проект для відкриття Build finished without error Збір завершений без помилок Build finished with Збір завершений з error(s) помилками and і warning(s) попередження The file "%1" already exists in directory. Unable to create %1 The project %1 doesn't exist. Properties of %1... The program doesn't exist, The variable "%1" already exists. The Qt include directory doesn't exist, You can change in Options dialog. The Qt database building is already in progress. The Qt classes database build is ended. Version %1 Cannot launch Linguist NewImplementation New Implementation Нова реалізація Class Name : Ім’я класу: Location : Шлях: File Name : Ім’я файлу: ... ... &Ok &Угу C&ancel &Відміна NewProject New project creation Створення нового проекту Template Шаблон Application with Dialog Програма з формою Application with Main Window Програма з головним вікном Properties Властивості Parent project : Батьківський проект: Project name : Ім’я проекту: Location : Шлях: ... ... Project creation on : Створити проект в: Version Версія Debug Version Налагоджувальна версія Release Version Кінцева версія OK Угу Cancel Відміна Sub-directories підтеки Dialogs: Форми: Executable: Виконуємі: ui ui bin bin sources: Вихідні коди: Objects: Об’єкти: src src build build Inheritance subclassing Наслідування форм Object name: Ім’я об’єкту: File name: Ім’я файлу: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Форма:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Клас:</span></p></body></html> Empty or master project NewProjectImpl Choose the project directory Вкажіть теку проекту The directory "%1" cannot be created Cancel Відмінити The project cannot be created Проект не може бути створений Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Діалог OK Угу Cancel Відміна Qt Variables Змінні Qt User Variable Змінні користувача Variable : Змінні: New Variable : Нова змінна: Operator : = += -= *= ~= OpenFile Open File in Project OK Угу Cancel Відмінити Options Options Налаштування General Головне Prompt before quit Підтвердження перед виходом Editor Редактор Font: Шрифт: End of line Кінец стрічки Tab size Величина відступу Current line background Фон вибраної стрічки Text background Фон тексту Default За умовчанням Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Замінювати відступи пробілами ... ... options опції Line numbers Номера стрічок Syntax highlighting Підсвітка синтаксису Auto-Brackets Автоскобки Selection border Границя виділення Complete Code Автодоповнення коду Autoindent Автовиділення Function/method names : Імена функцій/методів: Preprocessor : Препроцесор: Qt words : Ключові слова Qt: Keywords : Ключові слова: Single comments : Однострічний коментар: Multiline comments : Багатострічний коментар: Quotation strings : Стрічки в лапках: Show classes explorer Показати класи Interval between updates: Інтервал між оновленням: seconds секунд Default projects directory: Тека проектів за умовчанням: Matching ( and { Пошук ( і { User plugins directory: Тека з додатками користувача: Save all before build Automatic compilation Qt include directory: Qt documentation directory: Make extra parameters: Reload last project when the application starts Close button in each tab (does not work with all styles) Display editor toolbars Display white spaces Files encoding: Text color Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Вкажіть теку проекту Param Program parameters Параметри програми Run with these arguments: Запускати з аргументами: Working directory (leave empty to use project directory): Робоча тека: ... ... Environment variables (NAME=value): Змінні оточення (ІМ’Я=значення): Name Ім’я Value Значення &Edit &Редагувати &Add &Додати &Delete &Видалити &Sort &Сортувати &Default За &умовчанням &OK &Угу &Cancel &Відмінити ParametersImpl Choose the project location Выберіть місцезнаходження проекту Cancel Відмінити The variable "%1" already exists. ProjectManager Save project changes ? Зберегти зміни в проекті? Yes Так No Ні Cancel Відмінити Forms: Форми: Unable to create file. Не можу створити файл. Ok Угу Sub-project creation Створення підпроекту Sub-Projects Підпроект Sub-projects Підпроекти Headers Заголовки Sources Вихідні коди Dialogs Діалоги Translations Переклади Resources Ресурси Project parsing Розбір проекту New name: Нове ім’я: The kind of the new and the old filename is different ! Типи нового і старого імені файлу різні! Rename Переіменувати The file already exists in directory. The file already exists. This file is not permitted. Unable to rename the file to "%1" The only available version for "%1" is %2 Run on %1 Cannot remove the main project. Do you want to remove "%1" from the project ? File not found: "%1" ProjectPropertie Dialog Діалог Configuration Конфігурація General : Головне: Version Версія build_all зібрати все debug відлагоджувальна release кінцева debug_and_release відлагоджувальна і кінцева Warnings Попередження warn_off вимкнути попередження warn_on увімкнути попередження Qt Libraries Бібліотеки Qt core ядро network мережа sql sql xml xml gui графічний інтерфейс opengl opengl svg svg qt3support підтримка qt3 Advanced Options Додаткові опції app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables Змінні Variable : Змінна: ... ... Values : Значення: Project Template Шаблон проекту subdirs підтеки lib lib app app Project or Scope : Проект або Тека: OK Угу Cancel Відмінити Default directories Теки за умовчанням Dialogs: Форми: Sources: Вихідні коди: qtestlib Advanced options Free CONFIG variables : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Нове значення: delete spaces or put quotes. приберіть пробіли або замініть лапками. Modify Змінити Cancel Відмінити Choose the sources location Выберіть мізцезнаходження вихідних кодів Choose the dialogs location Выберіть місцезнаходження діалогів Properties of %1 The spaces aren't correctly parsed by qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" QObject Loading: Завантаження: Interface translation Переклад інтерфейсу Environment control Керування оточенням Files on editor Файли в редакторі Main Window creation Створення головного вікна Unable to start Assistant ! Не можу запустити Assistant! Unable to establish a database connection. Неможливо підключитися до бази даних. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop вимагає підтримки SQLite. Будьласка, прочитайте документацію Qt SQL driver для збору. Current project parsing Розбір даного проекту Plugins Додатки Unable to start Designer ! Registers Form Форма Name Ім’я Value Значення Apply ReplaceWidget Form Форма find: Replacement: &Replace &Замінити Previous Минула Next Наступна Case Sensitive Враховувати регістр Whole words Усе слово Prompt Reached end of page, continued from top При досягненні кінця стрінки шукає з початку Shortcuts Configure Shortcuts Налаштування гарячих клавіш Action Дія Shortcut Гаряча клавіша Default За умовчанням OK Угу Cancel Відмінити Subclassing Qt Designer Form Subclassing Наслідування від форм Qt дизайнера &New... &Новий... &Create &Створити C&ancel &Відмінити Class Na&me: &Назва класу: &File Name: Ім’я &файлу: &Location: &Знаходження: Filter &by: &Фільтр: SubclassingImpl Choose the file location Вкажіть місцезнаходження файлу &Update &Оновити C&reate &Створити (.h and .cpp) (.h і .cpp) TabWidget Close Tab Закрити вкладку Close Other Tabs Закрити інші вкладки Close All Tabs Закрити всі вкладки TextEdit Cancel Відмінити Yes Так No Ні Cut Вирізати Copy Копіювати Paste Вставити Selection Indent Початок виділення Selection Unindent Зняти виділення Select All Виділити все Find... Знайти... Toggle Bookmark Вкл/Викл закладку Toggle Breakpoint Вкл/Викл точку зупину The file "%1" could not be loaded. Save "%1" Unable to save %1 Goto Implementation Goto Declaration The Qt database building is in progress. Try to complete code later. Reached end of page, continued from top При досягненні кінця стрінки шукає з початку ToolsControl External Tools Зовнішні інструменти &Test &Тест ... ... lrelease: lrelease: make: make: qmake: qmake: designer: designer: ctags: ctags: lupdate: lupdate: gdb: gdb: linguist: linguist: Please enter the path to the external programs: Будьласка, введіть шлях до програм: Check environment on start Перевіряти оточення при старті assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ok Угу Please select the program TreeClasses Open Declaration Перейти до оголошення Open Implementation Перейти до реалізації Refresh contents Оновити зміст Add Method... Add Variable... Add get/set Methods... TreeProject Add sub-project... Додати підпроект... Add New Item... Додати новий файл... Add Scope... Додати теку... Add Existing Files... Додати існуючі файли... Open in Linguist Відкрити в Linguist Refresh translation files Оновлювати файли перекладу Build release translation files Зібрати файли перекладу Open in Designer Відкрити в Designer Dialog Subclassing... Об’єкти діалогу... Dialog Preview Попередній перегляд діалогу Open Відкрити Show As Показати як Normal Нормальний Krawek Krawek Add New Class... Додати новий клас... Rename... Перейменувати... Properties of %1... Remove from project Warning Dialog Діалог TextLabel Текстова мітка OK Угу Don't show anymore Більше не показувати qdevelop-v0.28/resources/translations/QDevelop_Vietnamese.ts0000644000175000017500000046002411362261067023440 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK Chấp nhận <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Thêm tập tin có sẳn OK Chấp nhận Cancel Hủy bỏ Project or Scope : Dự án hoặc Phạm vi : File : Tập tin : ... ... Copy files here: Copy các tập tin này: AddExistantImpl Choose the file to add Chọn tập tin thêm vào Enter a filename. Nhập vào tên tập tin. Cancel Hủy bỏ Enter a location destination. Nhập vào nơi đến. Choose a directory Chọn thư mục The file %1 doesn't exist. Tập tin %1 không tồn tại. Unable to copy %1 Không thể copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Thêm mục mới Files Tập tin Translation Phiên dịch Resources Tài nguyên Dialog Bản hội thoại Header Tiêu đề Sources Nguồn Project or Scope: Dự án hoặc Phạm vi : File Name : Tên tập tin : Location : Vị trí : ... ... OK Chấp nhận Cancel Hủy bỏ newfile.cpp tap_tin_moi.cpp AddNewClass OK Chấp nhận Cancel Hủy bỏ Inheritance Thừa kế Inherits another class Thừa kế từ 1 lớp khác Ancestor: Lớp được thừa kế: Ancestor's include filename: Tên tập tin tiêu đề của lớp được thừa kế: Scope: Phạm vi: Filenames Tên tập tin Header filename: Tên tập tin tiêu đề: Implementation filename: Tên tập tin thi hành: Location : Vị trí : ... ... Project or Scope: Dự án hoặc phạm vi : Class name: Tên lớp: Constructor arguments: Các thông số của hàm xây dựng: Virtual destructor Hàm kết thúc ảo Add New Class Thêm lớp mới AddNewClassImpl Choose the file location Chọn vị trí tập tin Cancel Hủy bỏ Unable to create file. Không thể tạo tập tin. The file "%1" already exists. Tập tin "%1" đã có sẵn. AddNewClassMethod Add New Method Thêm hàm mới Method Name: Tên Hàm: Return type: Kiểu giá trị trả về: Parameters: Các thông số: Scope: Phạm vi: Inline Virtual Static Pure OK Chấp nhận Cancel Hủy bỏ AddNewClassMethodImpl Add New Method in class %1 Thêm hàm mới vào lớp %1 An implementation file is required. Cần 1 tập tin thực hiện. Cancel Hủy bỏ %1 already exists in class %2. %1 đã tồn tại trong lớp %2. AddNewClassVariable Add New Variable Thêm biến mới Create get/set methods Tạo các hàm get/set inline set method hàm set get method hàm get OK Chấp nhận Cancel Hủy bỏ Variable Name: Tên Biến: Type: Loại: Scope: Phạm vi: AddNewClassVariableImpl Cancel Hủy bỏ %1 already exists in class %2. %1 đã có trong lớp %2. AddNewImpl Choose the file location Chọn vị trí tập tin The suffix of the file is not correct. Đuôi tên tập tin sai. Cancel Hủy bỏ header tiêu đề Yes Vâng No Không Also create the file %1 in same location ? Cũng sẽ tạo tập tin %1 trong cùng 1 nơi? source nguồn AddScope Add New Scope Thêm phạm vi New Scope Phạm vi mới win32 debug unix release mac other khác Project or Scope : Dự án hay Phạm vi : OK Chấp nhận Cancel Hủy bỏ AddSetGet Add get/set methods Thêm các hàm get/set OK Chấp nhận Cancel Hủy bỏ Create get/set methods for Tạo các hàm get/set cho inline set method hàm set get method hàm get AddSetGetImpl Cancel Hủy bỏ BreakpointCondition Dialog Bản hội thoại Condition : Điều kiện : is true (breakpoint) là đúng (điểm ngừng) has changed (watchpoint) đã thay đổi (điểm kiểm tra) Build Update project Cập nhật dự án Clean Project Dọn sạch dự án Build Khởi tạo Build stopped Việc khởi tạo bị dừng Compilation of %1... Việc biên dịch của %1... Debug Running... Đang chạy... Exited normally Thoát bình thường Debug... Tìm lỗi... Debug exited Việc tìm lỗi kết thúc Error: Unable to evaluate value Lỗi: không thể xác định giá trị Exited with error code %1 Editor Refresh classes and methods lists Làm mới danh sách các lớp và hàm What do you want to do? Bạn muốn làm gì? Overwrite Ghi đè lên Reload File Tải lại tập tin The file "%1" was modified outside editor. Tập tin "%1" đã được thay đổi bên ngoài trình biên soạn. Open %1 Mở %1 %1 replacement(s) made. %1 thay thế được thực hiện. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Chấp nhận Cancel Hủy bỏ Choose program to Debug : Chọn chương trình để tìm lỗi : Don't ask question anymore Đừng hỏi nữa FindFile Find in Files Tìm trong các tập tin Pattern: Dạng mẫu: Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Recursive Đệ huy *.cpp; *.h *.ui; *.qrc; *.txt Files: Tập tin: ... ... Find in: Tìm trong: &Find &Tìm &Close &Đóng Replace found text Replace with: FindFileImpl Choose a directory Chọn thư mục Line Dòng File Tập tin &Find &Tìm &Stop &Dừng Cannot open temporary file %1 FindWidget Form Khuôn mẫu Previous Về trước Next Về sau Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Reached end of page, continued from top Hết trang, tiếp tục lên đầu GotoLine Goto Line Đến dòng <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Đi đến dòng:</span></p></body></html> OK Chấp nhận Cancel Hủy bỏ InitCompletion Unable to launch %1 Không thể chạy %1 Unable to open %1 Không thể mở %1 LineNumbers Toogle Bookmark Bật tắt thẻ đánh dấu Toogle Breakpoint Bật tắt điếm dừng Breakpoint Condition... Điều kiện cho điểm dừng... LogBuild error lỗi warning cảnh báo error Compiler message lỗi undefined reference to Linker message warning Compiler message cảnh báo Main QDevelop &? &? Build Khởi tạo &Edit &Biên soạn &File &Tập tin Outputs Kết quả Files Tập tin Files toolbar Thanh công cụ tập tin Edit Toolbar Thanh công cụ biên soạn &New Project... &Dự án mới... &File... &Tập tin... &Close All Files Đón&g tất cả các tập tin &Save File &Lưu tập tin Ctrl+S &Quit Th&oát Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Chọn tất cả Ctrl+F Add New Item Thêm mục mới Add Existing Files Thêm tập tin sẵn có New Folder Thư mục mới Project Properties Đặc tính của dự án F7 Clean Dọn sạch Rebuild Tái khởi tạo Shift+F7 Start Program Khởi động chương trình Shift+F5 Step Into Bước vào F11 Step Over Bước qua F10 &Open... &Mở... F3 Stop Dừng F6 Breakpoints... Điểm dừng... Indent selection Chọn thụt vào Tab Unindent selection Hủy bỏ thụt vào Shift+Tab F1 Project Explorer Bộ quản lý dự án Save Project As... Lưu dự án như... Compile File Biên dịch tập tin Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Thoát Undo Hủy động tác Redo Làm lại F9 &View &Xem &Project &Dự án &Build &Khởi tạo &Debug &Tìm lỗi Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Hoàn thành mã lệnh Ctrl+Space Ctrl+D &New File... &Tập tin mới... New File Tập tin mới Comment Chú thích Uncomment Hủy chú thích Classes Lớp Calls Stack Gọi stack Name Tên Type Loại Address Địa chỉ Value Giá trị ... ... Toggle &Bookmark &Bật tắt thẻ đánh dấu Toggle Bookmark Bật tắt thẻ đánh dấu Ctrl+B Clear &All Bookmarks &Xóa tất cả thẻ đánh dấu &Open Project... &Mở Dự án... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Chương trình cắm vào Ctrl+N Goto matching bracket Đến dấu ngoặc cùng cặp Ctrl+[ Foo &Print... &In ấn... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Thẻ đánh dấu &Last Projects &Các dự án vừa qua B&uild &Khởi tạo Las&t Files Các &tập tin vừa qua &Tools &Công cụ &Plugins settings &Thiết lập chương trình cắm vào Ed&itors Trình &biên soạn 1 Build and Debug Toolbar Thanh công cụ khởi tạo và tìm lỗi Call Stacks Gọi stack Registers Các thanh ghi Save File &as... Lưu tập tin &như... Save A&ll Lưu tất &cả &Undo &Hủy động tác &Redo &Làm lại Cu&t C&ắt &Copy &Copy &Paste &Dán &Find... &Tìm... &Replace... Th&ay thế... &Find in Files... &Tìm trong các tập tin... Add New &Item... &Thêm mục mới... Add Existing &Files... Thêm các tập tin &sẵn có... Project &Properties... Đặc &tính của dự án... &Clean Dọn &sạch &Rebuild &Tái khởi tạo S&tart Program &Chạy chương trình Step &Into &Bước vào Step O&ver Bước &qua &Calls Stack &Gọi stack &Options... Tùy &chọn... &Parameters... Các thông &số... &About... &Giới thiệu.... About &Qt... Giới thiệu về &Qt.... Find &Next Tìm tiế&p &Stop &Dừng &Stop Build &Dừng việc khởi tạo &Help Current Qt Word Giú&p đỡ về từ khóa của Qt &Reset Executables List Đặt &lại danh sách thực thi &Save Project &Lưu dự án C&lose Project Đón&g dự án Add &Scope... Thêm &phạm vi... Step &Out Bước &Ra &Close Current Editor Đóng trình biên &soạn hiện hành &Next Tab &Qua tab sau &Previous Tab &Về tab phía trước &Switch to Header/Sources &Chuyển sang tiêu đề/nguồn Set &Focus to Editor &Tập trung vào trình biên soạn Toggle &breakpoint &Bật tắt điểm dừng Goto &Methods List Đến &danh sách các hàm Configure &Shortcuts... Điều chỉnh các &phím tắc... &Goto Line... Đến dòn&g... Toggle Co&mments &Bật tắt các chú thích E&xternal Tools... Công cụ &bên ngoài... &Next Bookmark Thẻ đánh dấu &kế tiếp &Previous Bookmark Thẻ đánh dấu &phía trước Find Pr&evious Tìm &về trước Goto matching &bracket Đến dấu &ngoặc cùng cặp Add New &Class... Thêm lớp mớ&i... Open F&ile in project... &Mở tập tin trong dự án... Goto &Implementation Đến phần thực &hiện Goto &Declaration Đến phần &khai báo &Rebuild Qt classes database Tái &khởi tạo dữ liệu lớp của Qt Execute &qmake Thực thi &qmake Show Maximized Xem phóng to &Editor mode Chế độ &soạn thảo Ctrl+E Next Warning/Error Cảnh báo/Lỗi kế tiếp F4 Previous Warning/Error Cảnh báo/Lỗi phía trước Shift+F4 Clear all Warnings/Errors Xóa hết các cảnh báo/lỗi &Toolbars &Công cụ Dock windows Gắn các cửa sổ Local Variables Biến địa phương Other Variables Các biến khác Find in files Tìm trong các tập tin Full view Vùng nhìn tối đa Minimal view Vùng nhìn tối thiểu DocksWindow Cửa sổ được gắn Dock Windows Cửa sổ được gắn New submenu > Menu con mới > a một En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Cancel Hủy bỏ Choose a file to open Mở tập tin Choose the file to create Tạo tập tin Files (*.cpp *.h *.txt *.* *) Tập tin (*.cpp *.h *.txt *.* *) Stop Dừng Start Bắt đầu The project has been modified, do you want to save your changes ? Dự án đã bị thay đổi, bạn có muốn lưu lại các thay đổi không? Yes Vâng No Không run Build. thực hiện việc khởi tạo. Ok Chấp nhận Stop debugging ? Dừng việc tìm lỗi ? Abort Dứt bỏ Continue Tiếp tục &%1 %2 &%1 %2 Do you want to quit QDevelop ? Bạn có muốn thoát khỏi QDevelop không ? Shift+F5 F5 Files Tập tin Sources Nguồn Projects Dự án Texts Văn bản All Files Tất cả các tập tin Stopping is not possible under Windows. Put breakpoints. Không thể dừng trong Windows. Hãy đặt điểm dừng. New Variable: Biến số mới: Choose a project to open Mở dự án Build finished without error Khởi tạo kết thúc thành công Build finished with Khởi tạo kết thúc với error(s) lỗi and warning(s) cảnh báo The file "%1" already exists in directory. Tập tin "%1" đã tồn tại trong thư mục. Unable to create %1 Không thể tạo %1 The project %1 doesn't exist. Dự án %1 không tồn tại. Properties of %1... Đặc tính của %1... The program doesn't exist, Chương trình không tồn tại, The variable "%1" already exists. Biến số "%1" đã có sẵn. The Qt include directory doesn't exist, You can change in Options dialog. Thư mục include của Qt không tồn tại. Bạn có thể sửa đổi trong bản đối thoại Tùy Chọn. The Qt database building is already in progress. Dữ liệu của Qt đang được tạo. The Qt classes database build is ended. Dữ liệu lớp của Qt đã được tạo xong. Version %1 Phiên bản %1 Cannot launch Linguist NewImplementation New Implementation Phần thực thi mới &Ok &Chấp nhận C&ancel &Hủy bỏ File Name : Tên tập tin : Class Name : Tên lớp : Location : Vị trí : ... ... NewProject New project creation Tạo dự án mới Parent project : Dự án mẹ : Project name : Tên dự án : Location : Vị trí : ... ... Project creation on : Tạo dự án dự theo : OK Chấp nhận Cancel Hủy bỏ Template Mẫu Application with Dialog Ứng dụng với bản đối thoại (dialog) Application with Main Window Ứng dụng với cửa sổ chính (main window) Properties Đặc tính Version Phiên bản Debug Version Bản dễ tìm lỗi (debug version) Release Version Bản phát hành (release version) Sub-directories Thư mục con Dialogs: Bản đối thoại: Executable: Tập tin thực thi: ui bin sources: nguồn: Objects: Đối tượng: src build Inheritance subclassing Lớp con thừa kế Object name: Tên đối tượng: File name: Tên tập tin: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Dự án trống hoặc chủ NewProjectImpl Choose the project directory Chọn thư mục cho dự án The directory "%1" cannot be created Không thể tạo thư mục "%1" Cancel Hủy bỏ The project cannot be created Không thể tạo dư án Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Bản đối thoại OK Chấp nhận Cancel Hủy bỏ Qt Variables Các biến số của Qt User Variable Các biến số của người dùng Variable : Biến số : New Variable : Biến số mới : Operator : Toán tử : = += -= *= ~= OpenFile Open File in Project Mở tập tin trong dự án OK Chấp nhận Cancel Hủy bỏ Options Options Tùy chọn General Tổng quát Editor Trình biên soạn Line numbers Số dòng Selection border Chọn đường biên Autoindent Tự động thụt vào Syntax highlighting Làm nổi bật cú pháp Function/method names : Tên hàm : Preprocessor : Từ khóa tiền xử lý : Qt words : Từ khóa riêng của Qt : Keywords : Từ khóa của C và C++ : Single comments : Chú thích đơn : Multiline comments : Chú thích trên nhiều dòng : Quotation strings : Chuỗi trích dẫn : ... ... Default Mặc định Replace Tab by spaces Thay Tab bằng các khoảng trống Unix Dos/Windows Complete Code Hoàn thành Mã lệnh Prompt before quit Báo trước khi thoát Font: Phông chữ: End of line Cuối dòng options tùy chọn Auto-Brackets Tự động đóng ngoặc Tab size Kích thước Tab Current line background Màu nền của dòng hiện hành Text background Màu nền của văn bản Show classes explorer Mở bộ quản lý dự án Interval between updates: Thời gian giữa các lần cập nhật: seconds giây Default projects directory: Thư mục mặc định của dự án: Matching ( and { Đối xứng cặp ( và { User plugins directory: Thư mục trình cắm vào của người dùng: Save all before build Lưu tất cả trước khi khởi tạo Automatic compilation Biên dịch tự động Qt include directory: Thư mục include của Qt: Qt documentation directory: Thư mục tài liệu của Qt: Make extra parameters: Các thông số bổ xung của Make: Reload last project when the application starts Tải lại dự án cuối cùng khi chương trình bắt đầu Close button in each tab (does not work with all styles) Nút đóng ở mỗi tab (không làm việc với tất cả các kiểu) Display editor toolbars Hiển thị các thanh công cụ soạn thảo Display white spaces Hiển thị các khoảng trắng Files encoding: Bản mã của tập tin: Text color Màu của văn bản Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Chọn thư mục cho dự án Param Program parameters Thông số cho dự án Run with these arguments: Thực thi với các thông số này: Working directory (leave empty to use project directory): Thư mục làm việc (chừa trống nếu dùng chung thư mục của dự án): ... ... Environment variables (NAME=value): Biến môi trường (TÊN=giá trị): Name Tên Value Giá trị &Add &Thêm &Delete &Xóa &Sort Xế&p thứ tự &Default &Mặc định &OK &Chấp nhận &Cancel &Hủy bỏ &Edit &Sửa ParametersImpl Choose the project location Chọn vị trí của dự án Cancel Hủy bỏ The variable "%1" already exists. Biến số "%1" đã có sẵn. ProjectManager Save project changes ? Lưu các thay đổi của dự án ? Yes Vâng No Không Cancel Hủy bỏ Forms: Khuôn mẫu: Unable to create file. Không thể tạo tập tin. Ok Nhận Sub-project creation Tạo dự án con Sub-Projects Dự án con Sub-projects Dự án con Headers Tiêu đề Sources Nguồn Dialogs Bản đối thoại Translations Dịch Resources Tài nguyên Project parsing Phân tích dự án New name: Tên mới: The kind of the new and the old filename is different ! Tên tập tin mới và cũ thuộc loại khác nhau ! Rename Đổi tên The file already exists in directory. Tập tin đã tồn tại trong thư mục. The file already exists. Tập tin đã có sẵn. This file is not permitted. Tập tin này không có phép. Unable to rename the file to "%1" Không thể đổi tên tập tin thành "%1" The only available version for "%1" is %2 Chỉ có phiên bản duy nhất %2 cho "%1" Run on %1 Thực thi trên %1 Cannot remove the main project. Không thể loại bỏ dự án chính. Do you want to remove "%1" from the project ? Bạn có muốn loại bỏ "%1" khỏi dự án không? File not found: "%1" ProjectPropertie Dialog Bản hội thoại Configuration Điều chỉnh General : Tổng quát : Version Phiên bản build_all debug release debug_and_release Warnings Cảnh báo warn_off warn_on Qt Libraries Thư viện của Qt core network sql xml gui opengl svg qt3support Advanced Options Tùy chọn Cao cấp app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Biến số Variable : Biến số : ... ... Values : Giá trị : Project Template Khuôn mẫu dự án subdirs lib app Project or Scope : Dự án hoặc Phạm vi : OK Chấp nhận Cancel Hủy bỏ Default directories Thư mục mặc định Dialogs: Bản đối thoại: Sources: Nguồn: qtestlib Advanced options Các tùy chọn cao cấp Free CONFIG variables : Các biến CONFIG tự do : script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Giá trị mới: delete spaces or put quotes. xóa các khoảng trống hoặc đoạn trích. Modify Sửa Cancel Hủy bỏ Choose the sources location Chọn vị trí của nguồn Choose the dialogs location Chọn vị trí của bản đối thoại Properties of %1 Đặc tính của %1 The spaces aren't correctly parsed by qmake qmake không thể phân tích đúng các khoảng trắng A new variable can not be "QT", "CONFIG" or "TEMPLATE" Biến mới không thể là "QT", "CONFIG" hay "TEMPLATE" QObject Unable to start Assistant ! Không thể chạy trình Assistant ! Loading: Tải: Interface translation Giao diện phiên dịch Environment control Điều khiển môi trường Files on editor Tập tin trong trình biên soạn Main Window creation Tạo cửa sổ chính Unable to establish a database connection. Không thể thiết lập kết nối cơ sở dữ liệu. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop cần có hổ trợ của SQLite. Vui lòng đọc tài liệu trình điều khiển của Qt SQL để biết cách xây dựng. Current project parsing Phân tích dự án hiện tại Plugins Trình cắm vào Unable to start Designer ! Không thể chạy trình Designer ! Registers Form Khuôn mẫu Name Tên Value Giá trị Apply Áp dụng ReplaceWidget Form Khuôn mẫu find: tìm: Replacement: Thay thế: &Replace &Thay thế Previous Về trước Next Về sau Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Prompt Dấu nhắc Reached end of page, continued from top Hết trang, tiếp tục lên đầu Shortcuts Configure Shortcuts Điều chỉnh các phím tắc Action Hành động Shortcut Phím tắc Default Mặc định OK Chấp nhận Cancel Hủy bỏ Subclassing Qt Designer Form Subclassing Mẫu Qt Designer của lớp con &Create Tạ&o C&ancel &Hủy bỏ &New... Tạo &mới... Class Na&me: Tên &lớp: &File Name: &Tên tập tin: &Location: &Vị trí: Filter &by: Lọc &bởi: SubclassingImpl Choose the file location Chọn vị trí tập tin &Update &Cập nhật C&reate &Tạo (.h and .cpp) (.h và .cpp) TabWidget Close Tab Đóng Tab Close Other Tabs Đóng các Tab khác Close All Tabs Đóng tất cả các Tab TextEdit Cancel Hủy bỏ Yes Vâng No Không Cut Cắt Copy Paste Dán Selection Indent Chọn thụt vào Selection Unindent Hủy bỏ thụt vào Select All Chọn tất cả Find... Tìm... Toggle Bookmark Bật tắt thẻ đánh dấu Toggle Breakpoint Bật tắt điểm dừng The file "%1" could not be loaded. Không thể nạp tập tin "%1". Save "%1" Lưu "%1" Unable to save %1 Không thể lưu %1 Goto Implementation Đến phần thực hiện Goto Declaration Đến phần khai báo The Qt database building is in progress. Try to complete code later. Dữ liệu của Qt đang được tạo. Hãy cố gắng hoàn thành mã lệnh sau đó. Reached end of page, continued from top Đến hết trang, trở lại từ đầu ToolsControl External Tools Công cụ bên ngoài qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Kiểm tra Please enter the path to the external programs: Vui lòng nhập đường dẫn đến chương trình bên ngoài: Check environment on start Kiểm tra môi trường khi bắt đầu assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags được tìn thấy ở %1, nhưng phiên bản này quá cũ. Ok Chấp nhận Please select the program TreeClasses Open Declaration Mở phần khai báo Open Implementation Mở phần thực thi Refresh contents Cập nhật nội dung Add Method... Thêm hàm mới... Add Variable... Thêm biến mới... Add get/set Methods... Thêm các hàm get/set... TreeProject Add sub-project... Thêm dự án con... Add New Item... Thêm mục mới... Add Scope... Thêm phạm vi... Add Existing Files... Thêm tập tin sẵn có... Open in Linguist Mở trong trình Linguist Refresh translation files Cập nhật tập tin phiên dịch Build release translation files Khởi tạo tập tin phiên dịch phát hành Open in Designer Mở trong Designer Dialog Subclassing... Lớp con của bản đối thoại... Dialog Preview Duyệt trước bản đối thoại Open Mở Show As Cho xem theo Normal Thông thường Krawek Danh sách kiểu Krawek Add New Class... Thêm lớp mới... Rename... Đổi tên... Properties of %1... Đặc tính của %1... Remove from project Loại bỏ khỏi dự án Warning Dialog Bản đối thoại TextLabel OK Chấp nhận Don't show anymore Đừng hiền thị nữa qdevelop-v0.28/resources/translations/QDevelop_Chinese.ts0000644000175000017500000045233411362261067022723 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">版本</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files 添加文件 OK 确定 Cancel 取消 Project or Scope : 工程或域 : File : 文件 : ... ... Copy files here: 把文件复制到这里: AddExistantImpl Choose the file to add 选择要添加的文件 Enter a filename. 输入文件名. Cancel 取消 Enter a location destination. 输入目标地址。 Choose a directory 选择目录 The file %1 doesn't exist. 文件%1不存在. Unable to copy %1 不能复制%1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item 添加新项 Files 文件 Translation 翻译 Resources 资源 Dialog 对话框 Header 头文件 Sources 源文件 Project or Scope: 工程或域: File Name : 文件名 : Location : 位置 : ... ... OK 确定 Cancel 取消 newfile.cpp newfile.cpp AddNewClass OK 确定 Cancel 取消 Inheritance 继承 Inherits another class 继承其他类 Ancestor: 祖先: Ancestor's include filename: 祖先的include文件: Scope: 域: Filenames 文件名 Header filename: 头文件名: Implementation filename: 实现文件名: Location : 位置: ... ... Project or Scope: 工程或域: Class name: 类名: Constructor arguments: 构造函数参数: Virtual destructor 虚拟析构函数 Add New Class 添加新类 AddNewClassImpl Choose the file location 选择文件位置 Cancel 取消 Unable to create file. 不能创建文件. The file "%1" already exists. 文件 "%1" 已经存在. AddNewClassMethod Add New Method 添加新方法 Method Name: 方法名: Return type: 返回类型: Parameters: 参数: Scope: 域: Inline Inline Virtual Virtual Static Static Pure Pure OK 确定 Cancel 取消 AddNewClassMethodImpl Add New Method in class %1 在类 %1里添加新函数 An implementation file is required. 要求一个实现文件. Cancel 取消 %1 already exists in class %2. 在类%2里已经存在%1. AddNewClassVariable Add New Variable 添加新变量 Create get/set methods 创建 get/set 方法 inline inline set method set 方法 get method get 方法 OK 确定 Cancel 取消 Variable Name: 变量名: Type: 类型: Scope: 域: AddNewClassVariableImpl Cancel 取消 %1 already exists in class %2. 在类 %2里已经存在%1. AddNewImpl Choose the file location 选择文件位置 The suffix of the file is not correct. 文件扩展名不正确. Cancel 取消 header 头文件 Yes No Also create the file %1 in same location ? 也在同一位置创建%1? source 源文件 AddScope Add New Scope 添加新域 New Scope 新域 win32 win32 debug debug unix unix release release mac mac other 其他 Project or Scope : 工程或域 : OK 确定 Cancel 取消 AddSetGet Add get/set methods 添加get/set 方法 OK 确定 Cancel 取消 Create get/set methods for 为创建get/set 方法 inline inline set method set 方法 get method get 方法 AddSetGetImpl Cancel 取消 BreakpointCondition Dialog 对话框 Condition : 条件: is true (breakpoint) 真(断点) has changed (watchpoint) 已改变(指示点) Build Update project 更新工程 Clean Project 清理工程 Build 构建 Build stopped 构建已停止 Compilation of %1... 编译 of %1... Debug Running... 正运行... Exited normally 正常退出 Debug... 调试... Debug exited 调试器已退出 Error: Unable to evaluate value 错误: 不能计算值 Exited with error code %1 Editor Refresh classes and methods lists 刷新类与函数列表 What do you want to do? 你想怎么处理? Overwrite 覆盖 Reload File 重新装入 The file "%1" was modified outside editor. 文件 "%1" 已经在编辑器外被更改. Open %1 打开 %1 %1 replacement(s) made. 已替换 %1 个. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK 确定 Cancel 取消 Choose program to Debug : 选择要调试的程序: Don't ask question anymore 以后不要再询问 FindFile Find in Files 在多个文件中查找 Pattern: 模式: Case Sensitive 大小写敏感 Whole words 整词匹配 Recursive 递归查找 *.cpp; *.h *.ui; *.qrc; *.txt Files: 文件: ... ... Find in: 查找的目录: &Find 查找(&F) &Close 关闭(&C) Replace found text Replace with: FindFileImpl Choose a directory 选择目录 &Find 查找(&F) &Stop 停止(&S) Line File 文件 Cannot open temporary file %1 FindWidget Form 表单 Previous 前一个 Next 后一个 Case Sensitive 大小写敏感 Whole words 整词匹配 Reached end of page, continued from top 到达页尾,从头开始 GotoLine Goto Line 跳到行号 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">跳到行号:</span></p></body></html> OK 确定 Cancel 取消 InitCompletion Unable to launch %1 不能启动 %1 Unable to open %1 不能打开 %1 LineNumbers Toogle Bookmark 添加/去除书签 Toogle Breakpoint 添加/去除断点 Breakpoint Condition... 断点条件... LogBuild error 错误 warning 警告 error Compiler message 错误 undefined reference to Linker message warning Compiler message 警告 Main QDevelop QDevelop &? &? &Project 工程(&P) &View 视图(&V) &Debug 调试(&D) &Build 编译(&B) &File 文件(&F) &Edit 编辑(&E) Outputs 输出 Build 编译 Name 名称 Type 类型 Address 地址 Value ... ... Project Explorer 工程浏览器 Files 文件 Classes Files toolbar 文件工具栏 Edit Toolbar 编辑工具栏 &New Project... 新建工程(&N)... &New File... 新建文件(&N)... New File 新建文件 &File... 文件(&F)... &Close All Files 关闭所有文件(&C) &Save File 保存文件(&S) Ctrl+S Ctrl+S &Quit 退出(&Q) Undo 撤销 Ctrl+Z Ctrl+Z Redo 重做 Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All 全选 Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item 添加新项 Add Existing Files 添加已存在的文件 New Folder 新建目录 Project Properties 工程属性 Clean 清理 Rebuild 重新构建 Compile File 编译文件 Shift+F7 Shift+F7 Start Program 启动程序 Shift+F5 Shift+F5 Step Into 跳入 F11 F11 Step Over 跳过 F10 F10 Calls Stack 调用栈 &Open... 打开(&O)... Ctrl+O Ctrl+O F3 F3 Stop 停止 F6 F6 Breakpoints... 断点... Indent selection 缩进选中的文字 Tab Tab Unindent selection 反缩进选中的文字 Shift+Tab Shift+Tab F1 F1 Save Project As... 工程保存为... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment 注释 Uncomment 去除注释 Complete Code 补全代码 Ctrl+Space Ctrl+Space Toggle &Bookmark 添加/去除书签(&B) Toggle Bookmark 添加/去除书签 Ctrl+B Ctrl+B Clear &All Bookmarks 清除所有书签(&A) &Open Project... 打开工程(&O)... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Ctrl+N Ctrl+N Goto matching bracket 跳转到匹配的括号 Ctrl+[ Ctrl+[ Plugins 插件 F7 F7 Foo Foo &Print... 打印(&P)... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &书签 &Last Projects &前工程 B&uild 编译(&B) Las&t Files 最近的文件(&T) &Tools 工具(&T) &Plugins settings 插件设置(&P) Ed&itors 编辑器(&E) 1 1 Build and Debug Toolbar 构建和调试工具栏 Call Stacks 调用栈 Registers 寄存器 Save File &as... 文件另存为(&A)... Save A&ll 保存全部(&A) &Undo 撤销(&U) &Redo 重做(&R) Cu&t 剪切(&T) &Copy 复制(&C) &Paste 粘贴(&P) &Find... 查找(&F)... &Replace... 替换(&R)... &Find in Files... 在文件中查找(&F)... Add New &Item... 添加新项(&I)... Add Existing &Files... 添加已有的文件(&F)... Project &Properties... 工程属性(&P)... &Clean 清理(&C) &Rebuild 重新构建(&R) S&tart Program 启动程序(&S) Step &Into 跳入(&I) Step O&ver 跳过(&O) &Calls Stack 调用栈(&C) &Options... 选项(&O)... &Parameters... 参数(&P)... &About... 关于(&A)... About &Qt... 关于&Qt... Find &Next 查找下一个(&N) &Stop 停止(&S) &Stop Build 停止编译(&S) &Help Current Qt Word 当前Qt关键字帮助(&H) &Reset Executables List 重设可执行列表(&R) &Save Project 保存工程(&S) C&lose Project 关闭工程(&C) Add &Scope... 添加域(&S)... Step &Out 跳出(&O) &Close Current Editor 关闭当前编辑器(&C) &Next Tab 下一个Tab(&N) &Previous Tab 前一个Tab(&P) &Switch to Header/Sources 切换到头文件/源文件(&S) Set &Focus to Editor 设置编辑器焦点(&F) Toggle &breakpoint 添加去除断点(&b) Goto &Methods List 跳到方法列表(&M) Configure &Shortcuts... 配置快捷键(&S)... &Goto Line... 跳到行号(&G)... Toggle Co&mments 添加/去除注释(&M) E&xternal Tools... 外部工具(&E)... &Next Bookmark 下一个书签(&N) &Previous Bookmark 前一个书签(&P) Find Pr&evious 查找前一个(&E) Goto matching &bracket 跳转到匹配的括号(&B) Add New &Class... 添加新类(&C)... Open F&ile in project... 打开工程里的文件(&F)... Goto &Implementation 跳到实现(&I) Goto &Declaration 跳到声明(&D) &Rebuild Qt classes database 重编译Qt类数据库(&R) Execute &qmake 执行qmake(&Q) Show Maximized 最大化显示 &Editor mode 编辑器模式(&E) Ctrl+E Ctrl+E Next Warning/Error 下一个警告/错误 F4 F4 Previous Warning/Error 前一个警告/错误 Shift+F4 Shift+F4 Clear all Warnings/Errors 清除所有警告/错误 &Toolbars 工具栏(&T) Dock windows 停靠窗口 Local Variables 本地变量 Other Variables 其他变量 Find in files 在文件寻找 Full view 完全视图 Minimal view 精简视图 DocksWindow 停靠窗口 Dock Windows 停靠窗口 New submenu > 新建子菜单 a 一个 En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create 选择要创建的文件 Files 文件 Cancel 取消 Do you want to quit QDevelop ? 你要退出QDevelop吗? Yes No Choose a file to open 选择要打开的文件 Sources 源文件 Projects 工程 Texts 文本 All Files 所有文件 Files (*.cpp *.h *.txt *.* *) 文件 (*.cpp *.h *.txt *.* *) Stop 停止 Start 开始 The project has been modified, do you want to save your changes ? 工程已经被更改,你愿意保存改动吗? Stop debugging ? 停止调试? run Build. 运行编译。 Ok 确定 Shift+F5 Shift+F5 F5 F5 Abort 中止 Stopping is not possible under Windows. Put breakpoints. Windows中无法停下,请设置断点。 Continue 继续 &%1 %2 &%1 %2 New Variable: 新变量: Choose a project to open 选择要打开的工程 Build finished without error 编译结束没有错误 Build finished with 编译结束 error(s) 错误 and warning(s) 警告 The file "%1" already exists in directory. 文件 "%1" 在目录里已经存在. Unable to create %1 不能创建%1 The project %1 doesn't exist. 工程%1不存在. Properties of %1... %1属性... The program doesn't exist, 程序不存在, The variable "%1" already exists. 变量 "%1" 已经存在. The Qt include directory doesn't exist, You can change in Options dialog. Qt include目录不存在,你可以在选项对话框里修改. The Qt database building is already in progress. Qt数据库正在创建中. The Qt classes database build is ended. Qt类数据库创建结束. Version %1 版本 %1 Cannot launch Linguist NewImplementation New Implementation 新建实现 Class Name : 类名: File Name : 文件名: Location : 位置: ... ... &Ok 确定(&O) C&ancel 取消(&A) NewProject New project creation 新建工程 Template 模板 Application with Dialog 带对话框的工程 Application with Main Window 带主窗口的工程 Properties 属性 Parent project : 父工程: Project name : 工程名: Location : 位置: ... ... Project creation on : 工程创建于: Version 版本 Debug Version Debug版本 Release Version Release版本 OK 确定 Cancel 取消 Sub-directories 子目录 Dialogs: 对话框: Executable: 可执行文件: ui ui bin bin sources: 源文件: Objects: 对象: src src build build Inheritance subclassing 继承子类 Object name: 对象名: File name: 文件名: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> 对话框: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> 子类 Empty or master project 空或主要工程 NewProjectImpl Choose the project directory 选择工程目录 The directory "%1" cannot be created 不能创建目录"%1" Cancel 取消 The project cannot be created 工程不能被创建 Project file "%1" already exists 工程文件 "%1"已经存在 The directory "%1" already exists. Do you want to create project anyway? 目录"%1"已经存在.你仍想创建工程吗? NewVariable Dialog 对话框 OK 确定 Cancel 取消 Qt Variables Qt变量 User Variable 用户变量 Variable : 变量 : New Variable : 新变量 : Operator : 操作 : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project 打开工程里的文件 OK 确定 Cancel 取消 Options Options 选项 General 一般 Prompt before quit 退出时提示 Show classes explorer 显示类浏览器 Interval between updates: 更新周期: seconds Editor 编辑器 Font: 字体: End of line 行尾 Tab size Tab键长度 Current line background 当前行背景色 Text background 文字背景色 Default 默认 Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces 把Tab替换成空格 ... ... options 选项 Line numbers 行号 Syntax highlighting 代码高亮 Auto-Brackets 自动加括号 Selection border 突出边框 Complete Code 补全代码 Autoindent 自动缩进 Function/method names : 函数/方法名: Preprocessor : 预处理器: Qt words : Qt关键字: Keywords : 关键字: Single comments : 单行注释: Multiline comments : 多行注释: Quotation strings : 引号内字符串: Default projects directory: 默认工程目录: Matching ( and { 匹配 ( 与 { User plugins directory: 用户插件目录: Save all before build 构建前保存一切 Automatic compilation 自动编译 Qt include directory: Qt include目录: Qt documentation directory: Qt文档目录: Make extra parameters: make额外参数: Reload last project when the application starts 当应用程序开始时载入前一工程 Close button in each tab (does not work with all styles) 每个tab栏里的关闭按钮(不是在所有风格下都有用) Display editor toolbars 显示编辑器工具栏 Display white spaces 显示空格 Files encoding: 文件编码: Text color 文字颜色 Right margin line 右边界线 Column: 栏: Auto-Comments Word wrap <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory 选择工程目录 Param Program parameters 程序参数 Run with these arguments: 以下列参数运行: Working directory (leave empty to use project directory): 启动目录(如果为空,则用工程目录) ... Environment variables (NAME=value): 环境变量(NAME=value): Name 名称 Value &Edit 编辑(&E) &Add 添加(&A) &Delete 删除(&D) &Sort 排序(&S) &Default 默认(&D) &OK 确定(&O) &Cancel 取消(&C) ParametersImpl Choose the project location 选择工程路径 Cancel 取消 The variable "%1" already exists. 变量"%1"已经存在. ProjectManager Save project changes ? 保存工程的改动? Yes No Cancel 取消 Forms: 表单: Unable to create file. 不能创建文件。 Ok 确定 Sub-project creation 创建子工程 Sub-Projects 子工程 Sub-projects 子工程 Headers 头文件 Sources 源文件 Dialogs 对话框 Translations 翻译 Resources 资源 Project parsing 工程解析 New name: 新命名: The kind of the new and the old filename is different ! 新文件名和旧文件名类型不同! Rename 重命名 The file already exists in directory. 文件已经存在. The file already exists. 文件已经存在. This file is not permitted. 文件不被允许. Unable to rename the file to "%1" 不能将文件重命名为"%1" The only available version for "%1" is %2 "%1"的唯一的版本是 %2 Run on %1 启动 %1 Cannot remove the main project. 不能移动主工程. Do you want to remove "%1" from the project ? 你想从工程中删除"%1" ? File not found: "%1" ProjectPropertie Dialog 对话框 Configuration 配置 General : 一般: Version 版本 build_all 全编译 debug debug release release debug_and_release debug_and_releas Warnings 警告 warn_off 关闭警告 warn_on 启动警告 Qt Libraries Qt库 core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options 高级选项 app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables 变量 Variable : 变量: ... ... Values : 值: Project Template 工程模板 subdirs 子目录 lib lib app app Project or Scope : 工程或组: OK 确定 Cancel 取消 Default directories 默认目录 Dialogs: 对话框: Sources: 源文件: qtestlib qtestlib Advanced options 高级选项 Free CONFIG variables : 自定义CONFIG变量 : script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: 新值: delete spaces or put quotes. 去掉空格或用引号. Modify 更改 Cancel 取消 Choose the sources location 选择源文件位置 Choose the dialogs location 选择对话框位置 Properties of %1 %1属性 The spaces aren't correctly parsed by qmake 空格没有被qmake正确解析 A new variable can not be "QT", "CONFIG" or "TEMPLATE" 新变量不能是 "QT", "CONFIG" 或 "TEMPLATE" QObject Unable to start Assistant ! 不能启动Assistant! Loading: 加载中: Interface translation 接口翻译 Environment control 环境控制 Files on editor 编辑器中的文件 Main Window creation 创建主窗口 Unable to establish a database connection. 不能建立数据库连接。 QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop需要SQLite支持。编译方法请参阅Qt SQL driver的文档。 Current project parsing 解析当前工程 Plugins 插件 Unable to start Designer ! 不能启动Designer! Registers Form 表单 Name 名称 Value Apply 应用 ReplaceWidget Form 表单 find: 查找: Replacement: 替换 &Replace 替换(&R) Previous 前一个 Next 后一个 Case Sensitive 大小写敏感 Whole words 整词匹配 Prompt 提示 Reached end of page, continued from top 已到达页尾,从头开始 Shortcuts Configure Shortcuts 配置快捷键 Action 行为 Shortcut 快捷键 Default 默认 OK 确定 Cancel 取消 Subclassing Qt Designer Form Subclassing 需要子类化的Qt Designer窗口 &New... 新建(&N)... &Create 创建(&C) C&ancel 取消(&A) Class Na&me: 类名(&M): &File Name: 文件名(&F): &Location: 位置(&L): Filter &by: 筛选(&B): SubclassingImpl Choose the file location 选择文件位置 &Update 更新(&U) C&reate 创建(&R) (.h and .cpp) (.h and .cpp) TabWidget Close Tab 关闭Tab Close Other Tabs 关闭其他Tab Close All Tabs 关闭所有Tab TextEdit Cancel 取消 Yes No Cut 剪切 Copy 复制 Paste 粘贴 Selection Indent 缩进选中的文字 Selection Unindent 反缩进选中的文字 Select All 选择所有 Find... 查找... Toggle Bookmark 添加/去除书签 Toggle Breakpoint 添加/去除断点 The file "%1" could not be loaded. 文件"%1"不能被加载. Save "%1" 保存"%1" Unable to save %1 不能保存%1 Goto Implementation 跳到实现 Goto Declaration 跳到声明 The Qt database building is in progress. Try to complete code later. Qt数据库正在创建中.请稍后完成编码. Reached end of page, continued from top 已到达页尾,从头开始 ToolsControl External Tools 外部工具 qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: irelease: designer: designer: ... ... &Test 测试(&T) Please enter the path to the external programs: 请输入外部工具的路径: Check environment on start 启动时检查环境 assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. ctags 已经在路径%1里被检测到,但是版本太旧了. Ok 确定 Please select the program 请选择程序 TreeClasses Open Declaration 打开声明 Open Implementation 打开实现 Refresh contents 刷新 Add Method... 添加方法... Add Variable... 添加变量... Add get/set Methods... 添加get/set 方法... TreeProject Add sub-project... 添加子工程... Add New Item... 添加新项... Add Scope... 添加域... Add Existing Files... 添加已有的文件... Open in Linguist 在Linguist中打开 Refresh translation files 刷新翻译文件 Build release translation files 编译翻译文件 Open in Designer 在Designer中打开 Dialog Subclassing... 对话框子类化... Dialog Preview 对话框预览 Open 打开 Show As 显示风格 Normal 普通 Krawek Krawek Add New Class... 添加新类... Rename... 重命名... Properties of %1... %1的属性... Remove from project 从工程中删除 Warning Dialog 对话框 TextLabel 文本标签 OK 确定 Don't show anymore 以后不要显示 qdevelop-v0.28/resources/translations/QDevelop_Polish.ts0000644000175000017500000046216311362261067022604 0ustar jlbrdjlbrd About <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Wersja</span></p></body></html> OK Ok QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Dodawanie istniejących plików OK Ok Cancel Anuluj Project or Scope : Projekt lub zakres: File : Plik: ... ... Copy files here: Skopiuj pliki do: AddExistantImpl Choose the file to add Wybierz plik do dodania Enter a filename. Wpisz nazwę pliku. Cancel Anuluj Enter a location destination. Wpisz docelową lokalizację. Choose a directory Wybierz katalog The file %1 doesn't exist. Plik %1 nie istnieje. Unable to copy %1 Próba skopiowania %1 nie powiodła się Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Pliki (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Dodawanie nowego pliku Files Pliki: Translation Tłumaczenie Resources Zasoby Dialog Widget Header Plik nagłówkowy Sources Plik z implementacją Project or Scope: Projekt lub zakres: File Name : Nazwa pliku: Location : Lokalizacja: ... ... OK Ok Cancel Anuluj newfile.cpp nowy.cpp AddNewClass OK Ok Cancel Anuluj Inheritance Dziedziczenie: Inherits another class dziedziczy po innej klasie Ancestor: Klasa bazowa: Ancestor's include filename: Plik nagłówkowy klasy bazowej: Scope: Rodzaj dziedziczenia: Filenames Pliki: Header filename: Nazwa pliku nagłówkowego: Implementation filename: Nazwa pliku z implementacją: Location : Lokalizacja: ... ... Project or Scope: Projekt lub zakres: Class name: Nazwa klasy: Constructor arguments: Argumenty konstruktora: Virtual destructor wirtualny destruktor Add New Class Dodawanie nowej klasy AddNewClassImpl Choose the file location Wybierz lokalizację pliku Cancel Anuluj Unable to create file. Próba utworzenia pliku nie powiodła się. The file "%1" already exists. Plik "%1" Już istnieje. AddNewClassMethod Add New Method Dodawanie nowej metody Method Name: Nazwa metody: Return type: Typ wartości zwracanej: Parameters: Argumenty: Scope: Zasięg: Inline rozwijana Virtual wirtualna Static statyczna Pure abstrakcyjna OK Ok Cancel Anuluj AddNewClassMethodImpl Add New Method in class %1 Dodawanie nowej metody do klasy %1 An implementation file is required. Wymagany jest plik z implementacją. Cancel Anuluj %1 already exists in class %2. Metoda %1 jest już zdefiniowana w klasie %2. AddNewClassVariable Add New Variable Dodawanie nowej zmiennej Create get/set methods Generowanie akcesora i modyfikatora: inline rozwijany set method modyfikator get method akcesor OK Ok Cancel Anuluj Variable Name: Nazwa zmiennej: Type: Typ: Scope: Zasięg: AddNewClassVariableImpl Cancel Anuluj %1 already exists in class %2. Zmienna %1 jest już zdefiniowana w klasie %2. AddNewImpl Choose the file location Wybierz lokalizację pliku The suffix of the file is not correct. Rozszerzenie nazwy pliku nie jest prawidłowe. Cancel Anuluj header nagłówkowy Yes Tak No Nie Also create the file %1 in same location ? Czy utworzyć również plik %1 w tym samym katalogu? source z implementacją AddScope Add New Scope Dodawanie nowego zakresu New Scope Nowy zakres: win32 win32 debug debug unix unix release release mac mac other inny Project or Scope : Projekt lub zakres: OK Ok Cancel Anuluj AddSetGet Add get/set methods Generowanie akcesora i modyfikatora OK Ok Cancel Anuluj Create get/set methods for Wygeneruj akcesor i modyfikator dla inline rozwijany set method modyfikator get method akcesor AddSetGetImpl Cancel Anuluj BreakpointCondition Dialog Zmiana warunku zatrzymania Condition : Warunek: is true (breakpoint) jest spełniony (pułapka) has changed (watchpoint) został zmieniony (obserwacja) Build Update project Aktualizacja projektu Clean Project Wyczyszczenie projektu Build Budowanie Build stopped Budowanie zatrzymane Compilation of %1... Kompilowanie %1... Debug Running... Uruchomiony ... Exited normally Zakończony normalnie Debug... Debugowanie... Debug exited Debugowanie zakończone Error: Unable to evaluate value Błąd: Próba wyznaczenia wartości nie powiodła się Exited with error code %1 Zakończono z kodem błędu %1 Editor Refresh classes and methods lists Odśwież listy klas i metod What do you want to do? Co chcesz zrobić? Overwrite Nadpisz Reload File Wczytaj ponownie The file "%1" was modified outside editor. Plik "%1" został zmodyfikowany poza edytorem. Open %1 Otwórz %1 %1 replacement(s) made. Liczba wykonanych zmian: %1. The file "%1" disappeared from fisk. Recreate Close ExeChoice OK Ok Cancel Anuluj Choose program to Debug : Wybierz program do debugowania: Don't ask question anymore Nie zadawaj więcej tego pytania QDevelop QDevelop FindFile Find in Files Przeszukiwanie plików Pattern: Wyrażenie: Case Sensitive rozróżniaj wielkość liter Whole words całe wyrazy Recursive rekursywnie *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Pliki: ... ... Find in: Szukaj w: &Find &Szukaj &Close &Zamknij Replace found text Zamień znaleizony tekst Replace with: Zamień na: FindFileImpl Choose a directory Wybierz katalog &Find &Szukaj &Stop &Zatrzymaj Line Linia File Plik Cannot open temporary file %1 Nie można było otworzyć pliku tymczasowego %1 FindWidget Form Previous Poprzedni Next Następny Case Sensitive rozróżniaj wielkość liter Whole words całe wyrazy Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku GotoLine Goto Line Skocz do linii <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Skocz do linii:</span></p></body></html> OK Ok Cancel Anuluj InitCompletion Unable to launch %1 Próba uruchomienia %1 nie powiodła się Unable to open %1 Próba otwarcia %1 nie powiodła się LineNumbers Toogle Bookmark Przełącz zakładkę Toogle Breakpoint Przełącz pułapkę Breakpoint Condition... Warunek zatrzymania... LogBuild error błąd warning ostrzeżenie error Compiler message błąd undefined reference to Linker message niezdefinowana referencja do warning Compiler message ostrzeżenie Main &? &? &File &Plik &Project &Projekt &Build Z&buduj &Debug &Debugowanie &View &Widok &Edit &Edycja Outputs Wyjście Build Budowanie Project Explorer Przeglądarka projektu Files Pliki Classes Klasy Files toolbar Pliki Edit Toolbar Edycja &New Project... &Nowy projekt... &New File... &Nowy plik... New File Nowy plik &File... &Plik... &Close All Files Zamknij &wszystkie pliki &Save File &Zapisz plik Ctrl+S Ctrl+S &Quit &Wyjście Undo Cofnij Ctrl+Z Ctrl+Z Redo Ponów Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Zaznacz wszystko Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Dodaj nowy plik Add Existing Files Dodaj istniejące pliki New Folder Nowy katalog Project Properties Właściwości projektu F7 F7 Clean Wyczyść Rebuild Zbuduj od nowa Compile File Skompiluj plik Shift+F7 Shift+F7 Start Program Uruchom program Shift+F5 Shift+F5 Step Into Krok do wewnątrz F11 F11 Step Over Przeskocz F10 F10 Calls Stack Stos wywołań &Open... &Otwórz... Ctrl+O Ctrl+O F3 F3 Stop Zatrzymaj F6 F6 Breakpoints... Pułapki... Indent selection Zwiększ wcięcie zaznaczonego obszaru Tab Tab Unindent selection Zmniejsz wcięcie zaznaczonego obszaru Shift+Tab Shift+Tab F1 F1 Save Project As... Zapisz projekt jako... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Prawy Alt+Left Alt+Lewy Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Zakomentuj Uncomment Odkomentuj Complete Code Uzupełnij kod Ctrl+Space Ctrl+Space QDevelop QDevelop Name Nazwa Type Typ Address Adres Value Wartość ... ... Toggle &Bookmark Przełącz &zakładkę Toggle Bookmark Przełącz zakładkę Ctrl+B Ctrl+B Clear &All Bookmarks Usuń &wszystkie zakładki &Open Project... &Otwórz projekt... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Plugins Wtyczki Ctrl+N Ctrl+N Goto matching bracket Skocz do pasującego nawiasu Ctrl+[ Ctrl+[ Foo Foo &Print... &Drukuj... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Ctrl+Shift+O &Bookmarks &Zakładki &Last Projects Ostatnio otwierane &projekty B&uild B&udowanie Las&t Files Ostatnio otwierane &pliki &Tools &Narzędzia &Plugins settings &Ustawienia wtyczek Ed&itors &Edytory 1 1 Build and Debug Toolbar Budowanie i debugowanie Call Stacks Stos wywołań Registers Rejestry Save File &as... Zapisz plik &jako... Save A&ll Zapisz &wszystko &Undo &Cofnij &Redo &Ponów Cu&t Wy&tnij &Copy &Kopiuj &Paste &Wklej &Find... &Szukaj... &Replace... &Zamień... &Find in Files... &Szukaj w plikach... Add New &Item... Dodaj &nowy plik... Add Existing &Files... Dodaj istniejące &pliki... Project &Properties... &Właściwości projektu... &Clean Wy&czyść &Rebuild Zbuduj od &nowa S&tart Program &Uruchom program Step &Into &Krok do wewnątrz Step O&ver &Przeskocz &Calls Stack &Stos wywołań &Options... &Ustawienia... &Parameters... &Parametry... &About... &O programie... About &Qt... O &Qt... Find &Next Znajdź &następne wystąpienie &Stop &Zatrzymaj &Stop Build &Zatrzymaj budowanie &Help Current Qt Word &Dokumentacja Qt dla zaznaczonego słowa &Reset Executables List &Wyczyść listę plików wykonywalnych &Save Project &Zapisz projekt C&lose Project Zam&knij projekt Add &Scope... Dodaj &zakres... Step &Out &Wyjdź na zewnątrz &Close Current Editor Zam&knij aktualny edytor &Next Tab &Następna zakładka &Previous Tab &Poprzednia zakładka &Switch to Header/Sources &Przełącz na plik nagłówkowy/implementacji Set &Focus to Editor &Uaktywnij edytor Toggle &breakpoint Przełącz &pułapkę Goto &Methods List Przejdź do listy &metod Configure &Shortcuts... Konfiguracja &skrótów... &Goto Line... &Skocz do linii... Toggle Co&mments Przełącz ko&mentarze E&xternal Tools... &Narzędzia zewnętrzne... &Next Bookmark &Następna zakładka &Previous Bookmark &Poprzednia zakładka Find Pr&evious Znajdź &poprzenie wystąpienie Goto matching &bracket Skocz do pasującego &nawiasu Add New &Class... Dodaj &klasę... Open F&ile in project... Otwórz pl&ik z projektu... Goto &Implementation Przejdź do &implementacji Goto &Declaration Przejdź do &deklaracji &Rebuild Qt classes database P&rzebuduj bazę danych do uzupełniania kodu Execute &qmake Uruchom &qmake Show Maximized Pokaż zmaksymalizowane &Editor mode Tryb &edycji Ctrl+E Ctrl+E Next Warning/Error Następne ostrzeżenie/błąd F4 F4 Previous Warning/Error Poprzednie ostrzeżenie/błąd Shift+F4 Shift+F4 Clear all Warnings/Errors Usuń znaczniki błędów i ostrzeżeń &Toolbars &Narzędzia Dock windows Doki Local Variables Zmienne lokalne Other Variables Inne zmienne Find in files Szukaj w plikach Full view Pełny widok Minimal view Minimalny widok DocksWindow Dok Dock Windows Zadokowane okna New submenu > Nowe podmenu > a a En&force qmake mode W&ymuś tryb qmake &Debug mode Tryb &debugowania &Release mode Tryb &produkcyjny &Forget last used mode &Zapomnij ostatnio używany tryb MainImpl Choose the file to create Wybierz plik do utworzenia Files Pliki Cancel Anuluj Yes Tak No Nie Choose a file to open Wybierz plik do otworzenia Sources Źródła Projects Projekty Texts Tekstowe All Files Wszystkie pliki Files (*.cpp *.h *.txt *.* *) Pliki (*.cpp *.h *.txt *.* *) Stop Zatrzymaj Start Uruchom The project has been modified, do you want to save your changes ? Projekt został zmodyfikowany, Czy chcesz zapisać zmiany? Stop debugging ? Czy przerwać debugowanie? run Build. Zbuduj projekt. Ok Ok Shift+F5 Shift+F5 F5 F5 Abort Przerwij Stopping is not possible under Windows. Put breakpoints. Przerywanie pracy programu nie jest możliwe pod Windows &mdash; użyj pułapek. Continue Kontynuuj &%1 %2 &%1 %2 Do you want to quit QDevelop ? Czy chcesz zakończyć pracę z QDevelopem? New Variable: Nowa zmienna: Choose a project to open Wybierz projek do otworzenia Build finished without error Operacja zakończyła się bez przeszkód Build finished with Operacja zakończyła się z error(s) błęd(em/ami) and oraz warning(s) ostrzeżeni(em/ami) The file "%1" already exists in directory. Plik "%1" już instnieje w katalogu. Unable to create %1 Próba utworzenia %1 nie powiodła się The project %1 doesn't exist. Projekt %1 nie istnieje. Properties of %1... Właściwości %1... The program doesn't exist, Program nie istnieje, The variable "%1" already exists. Zmienna "%1" już instnieje. The Qt include directory doesn't exist, You can change in Options dialog. Katalog z plikami nagłówkowymi Qt nie istnieje. Możesz ustawić inny katalog w oknie dialogowym "Opcje". The Qt database building is already in progress. Tworzenie bazy danych do uzupełniania kodu już trwa. The Qt classes database build is ended. Zakończono tworzenie bazy danych do uzupełniania kodu. Version %1 Wersja %1 Cannot launch Linguist NewImplementation New Implementation Tworzenie nowej implementacji Class Name : Nazwa klasy: File Name : Nazwa pliku: Location : Lokalizacja: ... ... &Ok &Ok C&ancel &Anuluj NewProject New project creation Tworzenie nowego projektu Parent project : Projekt nadrzędny: Project name : Nazwa projektu: Location : Lokalizacja: ... ... Project creation on : Ścieżka projektu: OK Ok Cancel Anuluj Template Szablon: Application with Dialog aplikacja z oknem dialogowym Application with Main Window aplikacja z oknem głównym Properties Właściwości: Version Wersja: Debug Version uruchomieniowa Release Version produkcyjna Sub-directories Podkatalogi: Dialogs: Widgety: Executable: Pliki wykonywalne: ui ui bin bin sources: Źródła: Objects: Pliki pośrednie: src src build build Inheritance subclassing Tworzenie podklas: Object name: Nazwa klasy: File name: Nazwa pliku: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Okno dialogowe:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Podklasa:</span></p></body></html> Empty or master project pusty lub główny projekt NewProjectImpl Choose the project directory Wybierz katalog projektu The directory "%1" cannot be created Próba utworzenia katalogu "%1" nie powiodła się Cancel Anuluj The project cannot be created Próba utworzenia nowego projektu nie powiodła się Project file "%1" already exists Projek "%1" już istnieje The directory "%1" already exists. Do you want to create project anyway? Katalog "%1" już istnieje. Czy chesz mimo tego kontynuować? NewVariable Dialog OK Ok Cancel Anuluj Qt Variables Zmienna Qt: User Variable Zmienna użytkownika: Variable : Nazwa: New Variable : Nowa zmienna: Operator : Operator: = = += += -= -= *= *= ~= ~= OpenFile Open File in Project Otwieranie pliku z projektu OK Ok Cancel Anuluj Options Options Zmiana ustawień General Główne Prompt before quit pytaj przed wyjściem Show classes explorer pokaż przeglądarkę klas Interval between updates: Aktualizuj przeglądarkę co: seconds sek. Editor Edytor Font: Font: End of line Kodowanie końców linii: Tab size Szerokość tabulatora: Current line background Tło bieżącej linii: Text background Tło tekstu: Default Domyślne Unix Unix Dos/Windows DOS/Windows Replace Tab by spaces zamieniaj tabulatory na spacje ... ... options Ustawienia: Line numbers numery linii Syntax highlighting Podświetlanie składni Auto-Brackets automatyczne nawiasy Selection border podświetlaj krawędź zaznaczenia Complete Code uzupełnianie kodu Autoindent automatyczne wcięcia Function/method names : Nazwy funkcji i metod: Preprocessor : Dyrektywy preprocesora: Qt words : Słowa kluczowe i klasy Qt: Keywords : Słowa kluczowe: Single comments : Komentarze jednoliniowe: Multiline comments : Komentarze wieloliniowe: Quotation strings : Napisy: Default projects directory: Domyślny katalog projektów: Matching ( and { podświetlaj pasujące ( oraz { User plugins directory: Katalog z wtyczkami użytkownika: Save all before build zapisz wszystko przed budowaniem Automatic compilation automatyczna kompilacja Qt include directory: Katalog z plikami nagłówkowymi Qt: Qt documentation directory: Katalog z dokumentacją Qt: Make extra parameters: Dodatkowe parametry dla make'a: Reload last project when the application starts przeładuj projekt po uruchomieniu programu Close button in each tab (does not work with all styles) wyświetlaj przycisk "Zamknij" przy każdej zakładce (nie działa z niektórymi stylami) Display editor toolbars wyświetlaj paski narzędziowe edytora Display white spaces wyświetlaj białe znaki Files encoding: Kodowanie plików: Text color Kolor tekstu: Right margin line Prawy margines Column: Kolumna: Auto-Comments Automatyczne komentarze <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after Ukryj panele Znajdź/Zamień po sec. sek. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+kliknięcie = Idź do definicji, Meta+kliknięcie Idź do deklaracji OptionsImpl Choose the project directory Wybierz katalog projektu Param Program parameters Zmiana parametrów programu Run with these arguments: Uruchamiaj z tymi parametrami: Working directory (leave empty to use project directory): Katalog roboczy (zostaw pusty, aby użyć katalogu projektu): ... ... Environment variables (NAME=value): Zmienne środowiskowe (NAZWA=wartość): Name Nazwa Value Wartość &Edit &Edytuj &Add Dod&aj &Delete &Usuń &Sort &Sortuj &Default &Domyślne &OK &Ok &Cancel &Anuluj ParametersImpl Choose the project location Wybierz lokalizację projektu Cancel Anuluj The variable "%1" already exists. Zmienna "%1" jest już zdefiniowana. ProjectManager Save project changes ? Czy zapisać zmiany w projekcie? Yes Tak No Nie Cancel Anuluj Forms: Widget bazowy: Unable to create file. Próba utworzenia pliku nie powiodła się. Ok Ok Sub-project creation Tworzenie podprojektu Sub-Projects Podprojekty Sub-projects Podprojekty Headers Pliki nagłówkowe Sources Pliki z implementacją Dialogs Widgety Translations Tłumaczenia Resources Zasoby Project parsing Parsowanie projektu New name: Nowa nazwa: The kind of the new and the old filename is different ! Typy nowego i starego spliku różnią się! Rename Zmień nazwę The file already exists in directory. Plik już istnieje w katalogu. The file already exists. Plik już istnieje. This file is not permitted. Ten plik nie jest dozwolony. Unable to rename the file to "%1" Próba zmiany nazwy pliku "%1" nie powiodła się The only available version for "%1" is %2 Jedyną dostępną wersją dla "%1" jest %2 Run on %1 Uruchom w %1 Cannot remove the main project. Próba usunięcia głównego projektu nie powiodła się. Do you want to remove "%1" from the project ? Czy chcesz usunąć "%1" z projektu? File not found: "%1" Plik nie został znaleziony "%1" ProjectPropertie Dialog Configuration Konfiguracja General : Główne: Version Wersja: build_all buduj w obu wersjach debug uruchomieniowa release produkcyjna debug_and_release uruchomieniowa i produkcyjna Warnings Ostrzeżenia: warn_off wyłączone warn_on włączone Qt Libraries Biblioteki Qt: core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options Opcje zaawansowane: app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables Zmienne Variable : Zmienna: ... ... Values : Wartości: Project Template Szablon projektu: subdirs podkatalogi lib biblioteka app aplikacja Project or Scope : Projekt lub zakres: OK Ok Cancel Anuluj Default directories Domyślne katalogi: Dialogs: Widgety: Sources: Źródła: qtestlib qtestlib Advanced options Opcje zaawansowane Free CONFIG variables : Dowolne wpisy w CONFIG: script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl New Value: Nowa wartość: delete spaces or put quotes. usuń spacje lub wstaw cudzysłowy. Modify Modyfikuj Cancel Anuluj Choose the sources location Wybierz lokalizację źródeł Choose the dialogs location Wybierz lokalizację widgetów Properties of %1 Właściwości %1 The spaces aren't correctly parsed by qmake qmake nie parsuje poprawnie spacji A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nowa wartoś nie może wynosić "QT", "CONFIG" ani "TEMPLATE" QObject Unable to start Assistant ! Próba uruchomienia Qt Assistant nie powiodła się! Loading: Wczytywanie: Interface translation Tłumaczenie interfejsu Environment control Sprawdzanie środowiska Files on editor Pliki w edytorze Main Window creation Tworzenie głównego okna Unable to establish a database connection. Próba ustanowienia połączenia z bazą danych nie powiodła się. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop wymaga sterownika SQLite. Przeczytaj dokumentację sterowników SQL dla Qt, by dowiedzieć się jak go zbudować. Current project parsing Parsowanie projektu Plugins Wtyczki Unable to start Designer ! Próba uruchomienia Qt Designer nie powiodła się! Registers Form Rejestry Name Nazwa Value Wartość Apply Zastosuj ReplaceWidget Form Rejestry find: znajdź: Replacement: Zamiennik: &Replace Za&mień Previous Poprzedni Next Następny Case Sensitive Rozróżniaj wielkość liter Whole words Całe wyrazy Prompt Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku Shortcuts Configure Shortcuts Konfiguracja skrótów Action Akcja Shortcut Skrót Default Domyślne OK Ok Cancel Anuluj Subclassing Qt Designer Form Subclassing Tworzenie podklasy widgeta &New... &Nowa... &Create U&twórz C&ancel &Anuluj Class Na&me: Nazwa &klasy: &File Name: Nazwa &pliku: &Location: &Lokalizacja: Filter &by: &Filtruj po: SubclassingImpl Choose the file location Wybierz lokalizację pliku &Update Zakt&ualizuj C&reate Utwó&rz (.h and .cpp) (.h oraz .cpp) TabWidget Close Tab Zamknij zakładkę Close Other Tabs Zamknij pozostałe zakładki Close All Tabs Zamknij wszystkie zakładki TextEdit Cancel Anuluj Yes Tak No Nie Cut Wytnij Copy Kopiuj Paste Wklej Selection Indent Zwiększ wcięcie zaznaczonego obszaru Selection Unindent Zmniejsz wcięcie zaznaczonego obszaru Select All Zaznacz wszystko Find... Znajdź... Toggle Bookmark Przełącz zakładkę Toggle Breakpoint Przełącz pułapkę The file "%1" could not be loaded. Próba wczytania pliku "%1" nie powiodła się. Save "%1" Czy zapisać "%1"? Unable to save %1 Próba zapisania %1 nie powiodła się Goto Implementation Przejdź do implementacji Goto Declaration Przejdź do deklaracji The Qt database building is in progress. Try to complete code later. Trwa tworzenie bazy danych o Qt. Spróbuj uzupełnić kod później. Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku ToolsControl External Tools Konfiguracja narzędzi zewnętrznych qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: Qt Linguist: lupdate: lupdate: lrelease: lrelease: designer: Qt Designer: ... ... &Test &Sprawdź Please enter the path to the external programs: Wpisz ścieżki do narzędzi zewnętrznych: Check environment on start sprawdzaj środowisko przy starcie assistant: Qt Assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Program ctags został znaleziony w %1, ale jego wersja jest zbyt stara. Ok Ok Please select the program Wybierz program TreeClasses Open Declaration Otwórz deklarację Open Implementation Otwórz implementację Refresh contents Odśwież zawartość Add Method... Dodaj metodę... Add Variable... Dodaj zmienną... Add get/set Methods... Wygeneruj akcesor i modyfikator... TreeProject Add sub-project... Dodaj podprojekt... Add New Item... Dodaj nowy plik... Add Scope... Dodaj zakres... Add Existing Files... Dodaj istniejące pliki... Open in Linguist Otwórz w Qt Linguist Refresh translation files Odśwież Build release translation files Skompiluj Open in Designer Otwórz w Qt Designer Dialog Subclassing... Utwórz podklasę widgeta... Dialog Preview Podgląd widgeta Open Otwórz Show As Styl wyświetlania Normal Normalny Krawek Krawek Add New Class... Dodaj klasę... Rename... Zmień nazwę... Properties of %1... Właściwości %1... Remove from project Usuń z projektu Warning Dialog Uwaga! TextLabel OK Ok Don't show anymore Nie pokazuj więcej tego ostrzeżenia qdevelop-v0.28/resources/translations/QDevelop_Czech.ts0000644000175000017500000050132011362261067022367 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK OK <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Hlavní Vývojář: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Doplňování kódu: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Vývojář: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Vývojář: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Vývojář: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Vývojář: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Vývojář: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Český překlad: Tomáš Hanák &lt;<a href="mailto:tomas.hanak@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">tomas.hanak@gmail.com</span></a><a href="mailto:tomas.hanak@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sestavení instalací: Daniel Rocher &lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><br /><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Přidat existující soubory Project or Scope : Projekt nebo kontext: File : Soubory: Copy files here: Kopírovat soubory sem: ... OK OK Cancel Storno AddExistantImpl Enter a filename. Zadejte jméno souboru. Cancel Storno Enter a location destination. Vyberte složku, kam kopírovat. Choose a directory Vyberte složku Choose the file to add Vyberte soubor, který chcete přidat The file %1 doesn't exist. Soubor %1 neexistuje. Unable to copy %1 Nelze kopírovat %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Soubory (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Přidat novou položku Files Soubory Translation Překlad Resources Resource Dialog Dialog Header Hlavičkový soubor Sources Zdrojový soubor Project or Scope: Projekt nebo kontext: File Name : Jméno souboru: Location : Umístění: newfile.cpp newfile.cpp ... OK OK Cancel Storno AddNewClass Add New Class Přidat novou třídu OK OK Cancel Storno Inheritance Dědičnost Inherits another class Dědit z jiné třídy Ancestor: Předek: Ancestor's include filename: Jméno souboru předka: Scope: Viditelnost: Filenames Názvy souborů Header filename: Jméno hlavičkového souboru: Implementation filename: Jméno zdrojového souboru: Location : Umístění: ... Project or Scope: Projekt nebo kontext: Class name: Jméno třídy: Constructor arguments: Argumenty konstruktoru: Virtual destructor Virtuální destruktor AddNewClassImpl Choose the file location Vyberte umístění souboru Cancel Storno Unable to create file. Nelze vytvořit soubor. The file "%1" already exists. Soubor "%1" už existuje. AddNewClassMethod Add New Method Přidat novou metodu Method Name: Jméno metody: Return type: Návratový typ: Parameters: Parametry: Scope: Kontext: Inline Virtual Static Pure OK OK Cancel Storno AddNewClassMethodImpl Cancel Storno Add New Method in class %1 Přidat novou metodu do třídy %1 An implementation file is required. Je požadován nějaký zdrojový soubor. %1 already exists in class %2. %1 už existuje ve třídě %2. AddNewClassVariable Add New Variable Přidat novou proměnnou Create get/set methods Vytvořit get/set metody inline set method set metoda get method get metoda OK OK Cancel Storno Variable Name: Jméno proměnné: Type: Typ: Scope: Viditelnost: AddNewClassVariableImpl Cancel Storno %1 already exists in class %2. %1 už existuje ve třídě %2. AddNewImpl Choose the file location Vyberte umístění souboru The suffix of the file is not correct. Přípona souboru je nesprávná. Cancel Storno header hlavičkový soubor Yes Ano No Ne Also create the file %1 in same location ? Vytvořit soubor %1 ve stejném adresáři ? source zdrojový soubor AddScope Add New Scope Přidat nový kontext New Scope Nový kontext win32 debug unix release mac other jiný Project or Scope : Projekt nebo kontext: OK OK Cancel Storno AddSetGet Add get/set methods Přidat get/set metody OK OK Cancel Storno Create get/set methods for Vytvořit get/set metody pro inline set method set metoda get method get metoda AddSetGetImpl Cancel Storno BreakpointCondition Dialog Dialog Condition : Podmínka: is true (breakpoint) je splněna (breakpoint) has changed (watchpoint) je změněna (watchpoint) Build Update project Aktualizace projektu Clean Project Vyčištění projektu Build Sestavování Build stopped Sestavování zastaveno Compilation of %1... Kompilace %1... Debug Running... Běží... Exited normally Ukončeno normálně Debug... Ladění... Debug exited Ladění ukončeno Error: Unable to evaluate value Chyba: Není možné určit hodnotu Exited with error code %1 Ukončeno s chybou %1 Editor Refresh classes and methods lists Obnovit seznamy tříd a metod What do you want to do? Co chcete provést? Overwrite Přepsat Reload File Znovu nahrát The file "%1" was modified outside editor. Soubor "%1" byl upraven mimo editor. Open %1 Otevřít %1 %1 replacement(s) made. Provedeno %1 nahrazení. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK OK Cancel Storno Choose program to Debug : Vyberte program k ladění: Don't ask question anymore Přístě se už nedotazovat FindFile Find in Files Najít v souborech Pattern: Dotaz: Case Sensitive Rozlišovat velikost Whole words Celá slova Recursive Rekurzivně *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Soubory: ... Find in: Hledat v: &Find &Hledat &Close &Zavřít Replace found text Nahradit nalezený text Replace with: Nahradit: FindFileImpl Choose a directory Vyberte složku &Find &Hledat &Stop &Stop Line Řádek File Soubor Cannot open temporary file %1 Nelze otevřít dočasný soubor %1 FindWidget Form Formulář Previous Předchozí Next Další Case Sensitive Rozlišovat velikost Whole words Celá slova Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku GotoLine Goto Line Jít na řádek <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Jít na řádek:</span></p></body></html> OK OK Cancel Storno InitCompletion Unable to launch %1 Nelze spustit %1 Unable to open %1 Nelze otevřít %1 LineNumbers Toogle Bookmark Vložit záložku Toogle Breakpoint Vložit zarážku Breakpoint Condition... Podmínka zarážky... LogBuild error chyba warning varování error Compiler message chyba undefined reference to Linker message nedefinovaná reference na warning Compiler message varování Main QDevelop QDevelop &? &? &Debug &Ladění &Build &Sestavit &Edit Ú&pravy Plugins Pluginy &View &Zobrazení &Project &Projekt &File &Soubor Outputs Výstupy Build Sestavování Name Jméno Type Typ Address Adresa Value Hodnota ... Project Explorer Projekt explorer Files Soubory Classes Třídy Files toolbar Lišta souborů Edit Toolbar Lišta editoru &New Project... &Nový projekt... &New File... &Nový soubor... New File Nový soubor &File... &Soubor... &Open Project... &Otevřít projekt... &Close All Files &Zavřít všechny soubory &Save File Uložit &soubor Ctrl+S &Quit &Konec Undo Zpět Ctrl+Z Redo Opakovat Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Vybrat vše Ctrl+A Ctrl+F Ctrl+R Add New Item Přidat novou položku Ctrl+N Add Existing Files Přidat existující soubory New Folder Nová složka Project Properties Vlastnosti projektu Clean Vyčistit Rebuild Sestavit znovu Compile File Kompilovat soubor Shift+F7 Start Program Spustit program Shift+F5 Step Into Krok dovnitř F11 Step Over Krok přes F10 Calls Stack Zásobník volání &Open... &Otevřít... Ctrl+O F3 Stop Stop F6 Breakpoints... Zarážky... Indent selection Zvětšit odsazení Tab Unindent selection Zmenšit odsazení Shift+Tab F1 F7 Save Project As... Uložit projekt jako... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Zakomentovat Uncomment Zrušit komentář Complete Code Dokončit kód Ctrl+Space Toggle &Bookmark Vložit/zrušit &záložku Toggle Bookmark Vložit/zrušit záložku Ctrl+B Clear &All Bookmarks Vym&azat všechny záložky Ctrl+F2 F2 Shift+F2 Shift+F3 Goto matching bracket Najít párovou závorku Ctrl+[ Foo Foo &Print... &Tisk... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Záložky &Last Projects Pos&lední projekty B&uild &Sestavení Las&t Files Posle&dní soubory &Tools &Nástroje &Plugins settings Nastavení &pluginů Ed&itors Ed&itory 1 Build and Debug Toolbar Lišta sestavování a ladění Call Stacks Zásobník volání Registers Registry Save File &as... Uložit soubor j&ako... Save A&ll U&ložit vše &Undo &Zpět &Redo &Opakovat Cu&t Vyjmou&t &Copy &Kopírovat &Paste &Vložit &Find... &Najít... &Replace... Nah&radit... &Find in Files... &Najít v souborech... Add New &Item... Přidat novou &položku... Add Existing &Files... Přidat existující &soubory... Project &Properties... Vlastnosti &projektu... &Clean &Vyčistit &Rebuild Sestavit &znovu S&tart Program Spus&tit program Step &Into Krok &dovnitř Step O&ver Krok &přes &Calls Stack &Zásobník volání &Options... Nastavení pr&ostředí... &Parameters... &Parametry... &About... O progr&amu... About &Qt... O &Qt... Find &Next Najít &další &Stop Za&stavit &Stop Build Přerušit &sestavování &Help Current Qt Word &Nápověda pro stávající klíčové slovo Qt &Reset Executables List &Save Project &Uložit projekt C&lose Project &Zavřít projekt Add &Scope... Přidat &kontext... Step &Out Krok &ven &Close Current Editor &Zavřít stávající editor &Next Tab &Další panel &Previous Tab &Předchozí panel &Switch to Header/Sources Přejít na hlavičkový/zdrojový &soubor Set &Focus to Editor Předat &fokus editoru Toggle &breakpoint Vložit/zrušit &zarážku Goto &Methods List Přejít na seznam &metod Configure &Shortcuts... Nastavit klávesové &zkratky... &Goto Line... &Jít na řádek... Toggle Co&mments Vložit/zrušit ko&mentář E&xternal Tools... E&xterní nástroje... &Next Bookmark &Další záložka &Previous Bookmark &Předchozí záložka Find Pr&evious Najít &předchozí Goto matching &bracket Jít na odpovídající &závorku Add New &Class... Přidat novou &třídu... Open F&ile in project... Otevřít so&ubor v projektu... Goto &Implementation Jít k &implementaci Goto &Declaration Jít k &deklaraci &Rebuild Qt classes database Aktualizovat &databázi Qt tříd Execute &qmake Spustit &qmake Show Maximized Ukázat maximalizované &Editor mode Mód &editoru Ctrl+E Next Warning/Error Další varování/chyba F4 Previous Warning/Error Předchozí varování/chyba Shift+F4 Clear all Warnings/Errors Vymazat všechny varování/chyby &Toolbars Lišty nás&trojů Dock windows Dokovací okna Local Variables Lokální proměnné Other Variables Ostatní proměnné Find in files Najít v souborech Full view Plný pohled Minimal view Minimální pohled DocksWindow Dokovací okna Dock Windows Dokovací okna New submenu > Nové podmenu > a En&force qmake mode Vy&nutit qmake mód &Debug mode &Debug mód &Release mode &Release mód &Forget last used mode &Zapomenout poslední použitý mód MainImpl Choose the file to create Vyberte soubor, který chcete vytvořit Files Soubory Cancel Storno Do you want to quit QDevelop ? Chcete ukončit QDevelop? Yes Ano No Ne Choose a file to open Vyberte soubor, který chcete otevřít Sources Zdrojové soubory Projects Projekty Texts Textové soubory All Files Všechny soubory Choose a project to open Vyberte projekt, který chcete otevřít Files (*.cpp *.h *.txt *.* *) Soubory (*.cpp *.h *.txt *.* *) Stop Stop Build finished without error Sestavování dokončeno bez chyb Build finished with Sestavování dokončeno s error(s) chybami (chybou) and a warning(s) varováním(i) Start Start The project has been modified, do you want to save your changes ? Projekt byl pozměněn, chcete své změny uložit? Stop debugging ? Ukončit ladění? run Build. Proveďte jeho sestavení. Ok OK Shift+F5 F5 Abort Přerušit Stopping is not possible under Windows. Put breakpoints. Přerušení není po Windows možné. Použijte zarážky. Continue Pokračovat &%1 %2 &%1 %2 New Variable: Nová proměnná: The file "%1" already exists in directory. Soubor "%1" už v adresáři existuje. Unable to create %1 Nelze vytvořit %1 The project %1 doesn't exist. Projekt %1 neexistuje. Properties of %1... Vlastnosti %1... The program doesn't exist, Program neexistuje, The variable "%1" already exists. Proměnná "%1" už existuje. The Qt include directory doesn't exist, You can change in Options dialog. Adresář s hlavičkovými soubory Qt neexistuje. Můžete jej změnit v dialogu s nastavením prostředí. The Qt database building is already in progress. Databáze Qt tříd se právě vytváří. The Qt classes database build is ended. Vytváření databáze Qt tříd bylo dokončeno. Version %1 Verze %1 Cannot launch Linguist NewImplementation New Implementation Nová implementace Class Name : Jméno třídy: File Name : Jméno souboru: Location : Umístění: ... &Ok &OK C&ancel &Storno NewProject New project creation Vytvoření nového projektu Template Šablona Application with Dialog Aplikace s dialogem Application with Main Window Aplikace s hlavním oknem Properties Vlastnosti Parent project : Rodičovský projekt: Project name : Název projektu: Location : Umístění: ... Project creation on : Vytvořit projekt v: Version Verze Debug Version Debug verze Release Version Release verze OK OK Cancel Storno Sub-directories Podadresáře Dialogs: Dialogy: Executable: Spustitelné: ui bin sources: Zdrojové soubory: Objects: Přeložené soubory: src build Inheritance subclassing Subclassing Object name: Jméno objektu: File name: Jméno souboru: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Prázdný nebo hlavní projekt NewProjectImpl Choose the project directory Vyberte složku pro projekt The directory "%1" cannot be created Adresář "%1" nemůže být vytvořen Cancel Storno The project cannot be created Nelze vytvořit projekt Project file "%1" already exists Projekt "%1" již existuje The directory "%1" already exists. Do you want to create project anyway? Adresář "%1" již existuje. Chcete i přesto projekt vytvořit? NewVariable Dialog Dialog OK OK Cancel Storno Qt Variables Qt proměnná User Variable Uživatelská proměnná Variable : Proměnná: New Variable : Nová proměnná: Operator : Operátor: = += -= *= ~= OpenFile Open File in Project Otevřít soubor v projektu OK OK Cancel Storno Options Options Nastavení prostředí General Obecné Prompt before quit Zeptat se před ukončením Show classes explorer Zobrazit prohlížeč tříd Interval between updates: Interval mezi aktualizacemi: seconds sekund Default projects directory: Výchozí složka s projekty: User plugins directory: Složka s vlastními pluginy: ... Editor Editor options Volby Matching ( and { Odpovídající ( a { Complete Code Doplňování kódu Selection border Okraj pro výběr řádku Line numbers Čísla řádků Syntax highlighting Zvýrazňování syntaxe Autoindent Automatické odsazování Auto-Brackets Automaticky závorky Font: Font: End of line Konec řádku Tab size Velikost tabulátoru Current line background Pozadí aktuálního řádku Text background Pozadí textu Default Výchozí Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Nahradit tabulátor mezerami Function/method names : Názvy funkcí/metod: Preprocessor : Preprocessor: Qt words : Qt klíčová slova: Keywords : Klíčová slova: Single comments : Jednoduché komentáře: Multiline comments : Víceřádkové komentáře: Quotation strings : Řetězce: Save all before build Uložit vše před sestavováním Automatic compilation Automaticky překládat Qt include directory: Adresář s hlavičkovými soubory Qt: Qt documentation directory: Adresář s dokumentací Qt: Make extra parameters: Extra parametry pro make: Reload last project when the application starts Otevřít poslední projekt při spuštění aplikace Close button in each tab (does not work with all styles) Uzavírací tlačítko na každém panelu (nefunguje se všemi styly) Display editor toolbars Zobrazit lištu nástrojů editoru Display white spaces Zobrazit bílé znaky Files encoding: Znaková sada: Text color Barva textu Right margin line Pravá okrajová linka Column: Sloupec: Auto-Comments Automatické komentáře <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Víceřádkový</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* komentář</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Jednořádkový komentář</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "mezi uvozovkami";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Zalamování slov Hide Find/Replace panels after Skrýt panely Hledat/Nahradit za sec. sekund Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+klik = Jít k implementaci, Meta+klik = Jít k declaraci OptionsImpl Choose the project directory Vyberte složku pro projekt Param Program parameters Parametry programu Run with these arguments: Spustit s těmito argumenty: Working directory (leave empty to use project directory): Pracovní složka (ponechte prázdné, chcete-li použít složku s projektem): ... Environment variables (NAME=value): Proměnné prostředí (JMÉNO=hodnota): Name Jméno Value Hodnota &Edit &Upravit &Add &Přidat &Delete &Smazat &Sort Se&třídit &Default &Výchozí &OK &OK &Cancel &Storno ParametersImpl Choose the project location Vyberte složku pro projekt Cancel Storno The variable "%1" already exists. Proměnná "%1" už existuje. ProjectManager Project parsing Analýza projektu Save project changes ? Uložit změny v projektu ? Yes Ano No Ne Cancel Storno Forms: Formuláře: Unable to create file. Nelze vytvořit soubor. Ok OK Sub-project creation Vytvoření podprojektu Sub-Projects Podprojekty New name: Nové jméno: The kind of the new and the old filename is different ! Přípona nového a starého souboru se nehodují ! Rename Přejmenovat Sub-projects Podprojekty Headers Hlavičkové soubory Sources Zdrojové soubory Dialogs Dialogy Translations Překlady Resources Resource soubory The file already exists in directory. Soubor už v adresáři existuje. The file already exists. Soubor už existuje. This file is not permitted. Tento soubor není povolen. Unable to rename the file to "%1" Soubor nelze přejmenovat na "%1" The only available version for "%1" is %2 Jediná dostupná verze pro "%1" je %2 Run on %1 Spustit %1 Cannot remove the main project. Nelze odebrat hlavní projekt. Do you want to remove "%1" from the project ? Chcete odebrat "%1" z projektu? File not found: "%1" Soubor nenalezen: "%1" ProjectPropertie Dialog Dialog Project Template Šablona projektu app lib subdirs Project or Scope : Projekt nebo kontext: Default directories Výchozí složky Dialogs: Dialogy: ... Sources: Zdrojové soubory: Configuration Konfigurace General : Obecné: Version Verze build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Qt knihovny core network sql xml gui opengl svg qt3support Advanced Options Rozšířené volby app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qtestlib resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Proměnné Variable : Proměnná: Values : Hodnoty: OK OK Cancel Storno Advanced options Rozšířené volby Free CONFIG variables : Další CONFIG proměnné: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nová hodnota: delete spaces or put quotes. Vymažte mezery nebo vložte do uvozovek. Modify Upravit Cancel Storno Choose the sources location Vyberte složku pro zdrojové soubory Choose the dialogs location Vyberte složku pro soubory s dialogy Properties of %1 Vlastnosti %1 The spaces aren't correctly parsed by qmake Mezery nejsou zpracovávány korektně pomocí qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nová proměnná nemůže být "QT", "CONFIG" nebo "TEMPLATE" QObject Unable to start Assistant ! Nelze spustit Assistant ! Loading: Nahrávám : Interface translation Překlad rozhraní Environment control Ovládání prostředí Files on editor Soubory v editoru Plugins Pluginy Main Window creation Vytvoření hlavního okna Unable to establish a database connection. Nelze se spojit s databází. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop potřebuje SQLite. Jak toho dosáhnout se dočtěte si v dokumentaci k Qt SQL driveru. Current project parsing Analýza stávajícího projektu Unable to start Designer ! Nelze spustit Designer ! Registers Form Formulář Name Jméno Value Hodnota Apply Použít ReplaceWidget Form Formulář find: Najít: Replacement: Nahradit: &Replace Nah&radit Previous Předchozí Next Další Case Sensitive Rozlišovat velikost Whole words Celá slova Prompt Dotazovat se Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku Shortcuts Configure Shortcuts Nastavit klávesové zkratky Action Akce Shortcut Klávesová zkratka Default Výchozí OK OK Cancel Storno Subclassing Qt Designer Form Subclassing Subclassing formulářů Qt Designeru Class Na&me: Jméno &třídy: &New... &Nová... &File Name: &Jméno souboru: &Location: &Umístění: Filter &by: &Filtrovat: &Create &Vytvořit C&ancel &Storno SubclassingImpl &Update &Aktualizovat C&reate &Vytvořit (.h and .cpp) (.h a .cpp) Choose the file location Vyberte umístění souboru TabWidget Close Tab Zavřít panel Close Other Tabs Zavřít ostatní panely Close All Tabs Zavřít všechny panely TextEdit Cancel Storno Yes Ano No Ne Cut Vyjmout Copy Kopírovat Paste Vložit Selection Indent Zvětšit odsazení Selection Unindent Zmenšit odsazení Select All Vybrat vše Find... Najít... Toggle Bookmark Vložit/zrušit záložku Toggle Breakpoint Vložit/zrušit zarážku The file "%1" could not be loaded. Soubor "%1" nelze nahrát. Save "%1" Uložit "%1" Unable to save %1 Nelze uložit %1 Goto Implementation Jít k implementaci Goto Declaration Jít k deklaraci The Qt database building is in progress. Try to complete code later. Qt databáze se právě vytváří. Zkuste použít doplňování kódu později. Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku ToolsControl External Tools Externí nástroje Check environment on start Zkontrolovat po spuštění &Test &Test Please enter the path to the external programs: Prosím, zadejte cestu k externím programům: ctags: ctags: ... linguist: linguist: assistant: assistant: gdb: gdb: designer: designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: ToolsControlImpl Ok OK Ctags was detected in path %1, but this version is too old. Ctags byl nalezen v %1, ale tato verze je příliš stará. Please select the program Prosím vyberte program TreeClasses Open Declaration Otevřít hlavičkový soubor Open Implementation Otevřít zdrojový soubor Add Method... Přidat metodu... Add Variable... Přidat proměnnou... Add get/set Methods... Přidat get/set metody... Refresh contents Obnovit TreeProject Add sub-project... Přidat podprojekt... Add New Item... Přidat novou položku... Add Scope... Přidat kontext... Add New Class... Přidat novou třídu... Add Existing Files... Přidat existující soubory... Open in Linguist Otevřít pomocí Linquist Refresh translation files Aktualizovat soubory s překladem Build release translation files Přeložit soubory s překladem Open in Designer Otevřít pomocí Designer Dialog Subclassing... Subclassing dialogu... Dialog Preview Náhled na dialog Open Otevřít Rename... Přejmenovat... Show As Zobraz jako Normal Normálně Krawek Krawek Properties of %1... Vlastnosti %1... Remove from project Odebrat z projektu Warning Dialog Dialog TextLabel OK OK Don't show anymore Přístě už nezobrazovat qdevelop-v0.28/resources/translations/QDevelop_Hungarian.ts0000644000175000017500000050322311362261067023253 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Verzió:</span></p></body></html> OK Rendben <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Fő fejlesztő: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;"Kódkiegészítés: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Fejlesztő: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Fejlesztő: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Fejlesztő: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Fejlesztő: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Fejlesztő: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Csomagkészítő: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Létező fájlok hozzáadása Project or Scope : Projekt vagy fordítási feladat hozzáadása: File : Fájl: Copy files here: Ide másold a fájlokat: ... ... OK Rendben Cancel Mégsem AddExistantImpl Enter a filename. Írd be a fájlnevet. Cancel Mégsem Enter a location destination. Írd be a cél elérési útját. The file %1 doesn't exist. A %1 fájl nem létezik. Unable to copy %1 Nem lehet másolni a %1 -t Choose a directory Válassz mappát Choose the file to add Vállaszd ki a hozzáadni kívánt fájlt Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Fájlok (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Új elem hozzáadása Files Fájlok Translation Fordítás Resources Erőforrások Dialog Dialógus Header Fejléc Sources Források Project or Scope: Projekt vagy fordítási feladat: File Name : Féjl név: Location : Elérési út: newfile.cpp ujfajl.cpp ... ... OK Rendben Cancel Mégsem AddNewClass Add New Class Új osztály hozzáadása OK Rendben Cancel Mégsem Inheritance Inheritás Inherits another class Inheritál egy másik osztályt Ancestor: Előd: Ancestor's include filename: Előd fejléc fájlja: Scope: Fordítási feladat: Filenames Fájlnevek Header filename: Fejéc fájlneve: Implementation filename: Implementáció fájlneve: Location : Elérési út: ... ... Project or Scope: Projekt vagy feladat: Class name: Osztály név: Constructor arguments: Konstruktor argumentumai: Virtual destructor Virtuális destruktor AddNewClassImpl Choose the file location Vállaszd ki a fájlt The file "%1" already exists. A %1 fájl már létezik. Cancel Mégsem Unable to create file. Nem lehet a fájlt létrehozni. AddNewClassMethod Add New Method Új metódus hozzáadása Method Name: Metódus neve: Return type: Visszatérési értéke: Parameters: Paraméterek: Scope: Feladat: Inline Sorban Virtual Virtual Static Static Pure Pure OK Rendben Cancel Mégsem AddNewClassMethodImpl Add New Method in class %1 Új metódus hozzáadása a(z) %1 osztályhoz An implementation file is required. Implementációs fájl hiányzik. Cancel Mégsem %1 already exists in class %2. %1 már létezik a %2 osztályban. AddNewClassVariable Add New Variable Új változó hozzáadása Create get/set methods Get/set metódusok létrehozása inline sorban set method set metódus get method get metódus OK Rendben Cancel Mégsem Variable Name: Változó neve: Type: Típus: Scope: Feladat: AddNewClassVariableImpl Cancel Mégsem %1 already exists in class %2. %1 már létezik a %2 osztályban. AddNewImpl Choose the file location Vállaszd ki a fájlt The suffix of the file is not correct. A fájl kiterjesztése nem megfelelő. Cancel Mégsem header Fejléc source Forrás Also create the file %1 in same location ? Létrehozzak egy %1 fájlt is itt? Yes Igen No Nem AddScope Add New Scope Új feladatkör hozzáadása New Scope Új feladatkör win32 win32 debug debug unix unix release release mac mac other egyéb Project or Scope : Projekt vagy feladat: OK Rendben Cancel Mégsem AddSetGet Add get/set methods Get/set metódusok hozzáadása OK Rendben Cancel Mégsem Create get/set methods for Get/set metódusok létrehozása inline sorban set method set metódus get method get metódus AddSetGetImpl Cancel Mégsem BreakpointCondition Dialog Dialógus Condition : Feltétel: is true (breakpoint) ha igaz (töréspont) has changed (watchpoint) a watchpoint megváltozott Build Update project Projekt frissítése Clean Project Projekt takarítása Compilation of %1... %1 fordítása ... Build Build Build stopped A build megállítva Debug Running... Futtatás... Exited normally A program hiba nélkül leállt Debug... Hibakereső mód... Debug exited A program kilépett Error: Unable to evaluate value HIba: nem lehet a változó értékét meghatározni Exited with error code %1 Kilépett a következő hibakóddal %1 Editor Refresh classes and methods lists Osztályok és metódusok frissítése Open %1 %1 megnyitása The file "%1" was modified outside editor. A %1 módosult a programon kívül. What do you want to do? Mit szeretnél tenni? Overwrite Felülírás Reload File Újratöltés %1 replacement(s) made. %1 csere történt. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Rendben Cancel Mégsem Choose program to Debug : Válaszd ki a hibakereséshez a programot : Don't ask question anymore Ne kérdezze meg többé FindFile Find in Files Keresés a fájlokban Pattern: Minta: Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Recursive Rekurzívan *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Fájlok: ... ... Find in: Keresés ebben: &Find &Keres &Close &Becsuk Replace found text A csere megfelelő szöveget talált Replace with: Csere erre: FindFileImpl Choose a directory Vállassz könyvtárat &Find &Keres &Stop &Megállít Line Sor File Fájl Cannot open temporary file %1 Nem tudom megnyitni az átmeneti fájlt %1 FindWidget Form Form Previous Előző Next Következő Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről GotoLine Goto Line Ugrás sorhoz <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ugrás sorhoz:</span></p></body></html> OK Rendben Cancel Mégsem InitCompletion Unable to launch %1 %1 futtatása sikertelen Unable to open %1 %1 megnyitása sikertelen LineNumbers Toogle Bookmark Könyvjelző ki-bekapcsolása Toogle Breakpoint Breakpoint ki-bekapcsolása Breakpoint Condition... Breakpoint feltétele... LogBuild error hiba warning igyelmeztetés error Compiler message hiba undefined reference to Linker message undefined reference to warning Compiler message figyelmeztetés Main QDevelop QDevelop &Edit &Szerkesztés &Bookmarks &Könyvjelzők &Debug &Hibakeresés &? &? &Project &Projekt &Last Projects &Legutóbbi projektek B&uild É&pítés &File &Fájl Las&t Files Legutóbb&i Fájlok &View &Nézet &Toolbars &Eszköztárak Dock windows Dokkolt ablakok &Tools &Eszközök &Plugins settings &Plugin beállítások Plugins Pluginok Ed&itors Sz&erkesztők Files toolbar Fájl eszköztár Edit Toolbar Szerkesztő eszköztár Build and Debug Toolbar Fordítási, és hibakeresési eszköztár Call Stacks Stack hívása Registers Regiszterek Build Építés Outputs Kimenetek Local Variables Helyi változók Name Név Type Típus Address Cím Value Érték Other Variables Egyéb változók ... ... Find in files Keresés a fájlokban Files Fájlok Classes Osztályok 1 1 &New Project... &Új projekt... &New File... &Új fájl... New File Új Fájl &File... &Fájl... &Open Project... &Projekt megnyitása... &Close All Files &Összes megnyitott fájl bezárása &Save File &Fájl mentése Ctrl+S Ctrl+S Save File &as... Mentés m&ásként... Save A&ll Mindent me&nt &Quit &Kilépés &Undo &Visszavonás Undo Visszavonás Ctrl+Z Ctrl+Z &Redo &Újra Redo Újra Ctrl+Shift+Z Ctrl+Shift+Z Cu&t Ki&vágás Ctrl+X Ctrl+X &Copy &Másolás Ctrl+C Ctrl+C &Paste &Beillesztés Ctrl+V Ctrl+V Select All Mindet kijelöl Ctrl+A Ctrl+A &Find... &Keres... Ctrl+F Ctrl+F &Replace... &Kicserél... Ctrl+R Ctrl+R &Find in Files... &Keresés a fájlokban... Ctrl+Shift+F Ctrl+Shift+F Add New &Item... Új elem &hozzáadása... Add New Item Új elem hozzáadása Ctrl+N Ctrl+N Add Existing &Files... Létező fájlok h&ozzáadása... Add Existing Files Létező fájlok hozzáadása New Folder Új mappa Project &Properties... Projekt t&ulajdonságai... Project Properties Projekt tulajdonságai &Clean &Takarít Clean Takarít &Rebuild &Újrabuild Rebuild Újrabuild Compile File Fájl fordítása Shift+F7 Shift+F7 S&tart Program P&rogram indítása Start Program Program indítása Shift+F5 Shift+F5 Step &Into Ugrás &ide Step Into Ugrás ide F11 F11 Step O&ver Át&ugrás Step Over Átugrás F10 F10 &Calls Stack &Stack hívása Calls Stack Stack hívása &Options... &Beállítások... &Parameters... &Paraméterek... &About... &A QDevelopról... About &Qt... A &Qt -ről... &Open... &Megnyitás... Ctrl+O Ctrl+O Find &Next Keresd a &következőt F3 F3 &Stop &Állj Stop Megállít F6 F6 Breakpoints... Breakpointok... &Stop Build &Build megállítása Indent selection Azonosak kijelölése Tab Fül Unindent selection Kijelölés megszűntetése Shift+Tab Shift+Tab &Help Current Qt Word &Súgó az adott Qt kifejezéshez F1 F1 &Reset Executables List &Binárisok listájának törlése Project Explorer Projekt nézőke &Build &Build F7 F7 &Save Project &Projekt mentése Save Project As... Projekt mentése másként... C&lose Project Projekt &bezárása Add &Scope... Feladat &hozzáadása... Step &Out Ki&ugrás Shift+F11 Shift+F11 &Close Current Editor &Aktuális szerkesztő bezárása Ctrl+W Ctrl+W &Next Tab &Következő fül Alt+Right Alt+Jobb &Previous Tab &Előző fül Alt+Left Alt+Bal &Switch to Header/Sources &Váltás a forrásokoz/headerekhez Shift+F12 Shift+F12 Set &Focus to Editor Fók&uszálj a szerkesztőre Esc Esc Toggle &breakpoint Break&point ki-bekapcsolása F9 F9 Goto &Methods List Ugrás a &metódus listára Configure &Shortcuts... Gyorsbillentyű&k beállítása... &Goto Line... &Ugrás sorhoz... Ctrl+G Ctrl+G Toggle Co&mments M&egjegyzés ki-bekapcsolása Ctrl+D Ctrl+D Comment Megjegyzés Uncomment Megjegyzés kikapcsolása Complete Code Kódkiegészítés Ctrl+Space Ctrl+Space Toggle &Bookmark &Jelzőke ki-bekapcsolása Toggle Bookmark Jelzőke ki-bekapcsolása Ctrl+B Ctrl+B Clear &All Bookmarks &Összes jelzőke kikapcsolása Ctrl+F2 Ctrl+F2 E&xternal Tools... K&ülső eszközök... &Next Bookmark &Következő jelzőke F2 F2 &Previous Bookmark &Előző jelzőke Shift+F2 Shift+F2 Find Pr&evious E&lőző keresése Shift+F3 Shift+F3 Goto matching &bracket Ugrás a megfelelő &zárójelekhez Goto matching bracket Ugrás a megfelelő zárójelekhez Ctrl+[ Ctrl+[ Foo Foo Add New &Class... Új &osztály hozzáadása... &Print... &Nyomtatás... Open F&ile in project... Fájl megnyitása a &projektben... Alt+Shift+O Alt+Shift+O Goto &Implementation Ugrás az &implementációhoz Goto &Declaration Ugrás az &deklarációhoz &Rebuild Qt classes database &Qt osztályadatbázis újraindexelése Execute &qmake &Qmake futtatása Show Maximized Maximális nézet &Editor mode &Szerkesztői mód Ctrl+E Ctrl+E Next Warning/Error Következő figyelmeztetés/hiba F4 F4 Previous Warning/Error Előző figyelmeztetés/hiba Shift+F4 Shift+F4 Clear all Warnings/Errors Összes figyelmeztetés/hibaüzenet törlése Full view Teljes nézet Minimal view Minimális nézet DocksWindow DokkolóAblak Dock Windows Dokkoló ablakok New submenu > Következő almenü > a a En&force qmake mode Erőltetett q&make mód &Debug mode &Debug mód &Release mode &Kiadási mód &Forget last used mode &Felejtsd el a legutóbb használt módot MainImpl Choose the file to create Vállaszd ki a létrehozni kívánt fájlt Files Fájlok The file "%1" already exists in directory. A %1 fájl már létezik a könyvtárban. Cancel Mégsem Unable to create %1 Nem lehet a%1-t létrehozni The Qt include directory doesn't exist, You can change in Options dialog. A Qt include mappája nem létezik Állítsd be az Opcióknál. Ok Rendben Do you want to quit QDevelop ? Valóban ki akarsz lépni a QDevelopból? Yes Igen No Nem Choose a file to open Vállaszd ki a megnyitni kívánt fájlt Sources Források Projects Projektek Texts Szövegek All Files Összes fájl Choose a project to open Vállaszd ki a megnyitni kívánt projektet The project %1 doesn't exist. A %1 projekt nem létezik. Properties of %1... %1 tulajdonságai... Files (*.cpp *.h *.txt *.* *) Fájlok (*.cpp *.h *.txt) Stop Megállít Build finished without error A build hiba nélkül lefutott Build finished with A build lefutott némi error(s) hibával and és warning(s) figyelmeztetéssel Start Indít The project has been modified, do you want to save your changes ? A projekt megváltozott, kívánod menteni? Stop debugging ? Valóban leállítsam a hibakeresést? The program doesn't exist, A program már nem fut, run Build. nyomd meg a Buildet. Shift+F5 Shift+F5 F5 F5 Abort Megszakít Stopping is not possible under Windows. Put breakpoints. A program megállítása nem lehetséges Winfos alatt. Használj breakpontokat. Continue Folytatás &%1 %2 &%1 %2 Version %1 %1-es verzió New Variable: Új változó: The variable "%1" already exists. A "%1" változó már létezik. The Qt database building is already in progress. A Qt osztályadatbázis létrehozása folyamatban. The Qt classes database build is ended. A Qt osztályadatbázis létrehozása befejeződött. Cannot launch Linguist NewImplementation New Implementation Új implementáció Class Name : Osztály neve: File Name : Fájl neve: Location : Elérési út : ... ... &Ok &Rendben C&ancel M&égsem NewProject New project creation Új projekt létrehozása Template Minta Empty or master project Üres vagy fő projekt Application with Dialog Alkalmazás párbeszédpanellel Application with Main Window Alkalmazás főablakkal Properties Tulajdonságok Parent project : Szülő projekt: Project name : Projekt neve: Location : Elérési út : ... ... Project creation on : Új projekt létrehozása itt: Version Verzió Debug Version Hibakereső verzió Release Version Kiadási verzió OK Rendben Cancel Mégsem Sub-directories Al könyvtárak Dialogs: Dialógusok: Executable: Futtatható: ui ui bin bin sources: források: Objects: Objektumok: src src build build Inheritance subclassing Alosztály inheritálása Object name: Objektum neve: File name: Fájl név: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialógus:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Alosztály:</span></p></body></html> NewProjectImpl Choose the project directory Vállaszd ki a projekt mappáját The directory "%1" cannot be created A %1 könyvtárat nem lehet létrehozni Cancel Mégsem The project cannot be created A projektet nem lehet létrehozni Project file "%1" already exists A %1 projektfájl már létezik The directory "%1" already exists. Do you want to create project anyway? A %1 mappa már létezik. Valóban létre kívánod hozni a projektet? NewVariable Dialog Dialógus New Variable : Új változó: Qt Variables Qt változól User Variable Felhasználói változó Variable : Változó : Operator : Operátor : = = += += -= -= *= *= ~= ~= OK Rendben Cancel Mégsem OpenFile Open File in Project Fájl megnyitása a projektben OK Rendben Cancel Mégsem Options Options Beállítások General Általános Save all before build Mentés a build előtt Automatic compilation Automatikus fordítás Qt include directory: Qt include mappa: ... ... Default projects directory: Alapértelmezett projekt mappa: Qt documentation directory: Qt doksi mappája: Make extra parameters: Make extra paraméterei: User plugins directory: Felhasználói pluginok könyvtára: Prompt before quit Kérdezzem mielőtt kilép Reload last project when the application starts Utolsó projekt betöltése indításokor Show classes explorer Mutassa az osztály tallózót Interval between updates: Frissítések közti időtartam: seconds másodperc Close button in each tab (does not work with all styles) Minden fülön legyen becsuk gomb (nem működik minden témával) Editor Szerkesztő options opciók Selection border Kijelölés kerete Auto-Brackets Automata kapcsos-zárójelek Matching ( and { ( és { párok megjelölése Complete Code Kódkiegészítés Autoindent Automata azonosítás Line numbers Sorszámok Syntax highlighting Szintakszis kiemelése Display editor toolbars Szerkesztő eszköztár megjelenítése Display white spaces Ne látszódjon a szóköz Font: Berűtípus: End of line Sorvég Tab size Fül mérete Files encoding: Fájlok enkódolása: Current line background Aktuális sor háttere Text background Szöveg háttere Text color Szöveg színe Default Alapértelmezett Unix Unix Dos/Windows Dos/Winfos Replace Tab by spaces Tabokat cserélje szóközökre Function/method names : Függvény/metódusnevek: Preprocessor : Előfordító: Qt words : Qt szavak: Keywords : Kulcsszavak: Single comments : Egysoros kommentek: Multiline comments : Többsoros kommentek: Quotation strings : Idézőjeles szövegek: Right margin line Jobb margó vonal Column: Mező: Auto-Comments Automata komment <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hosszú sorok tördelése Hide Find/Replace panels after Rejtsd el a keresés/csere panelt a művelet után sec. mp. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+balklikk = ugrás az implementációhoz Meta+balklikk = ugrás a deklarációhoz OptionsImpl Choose the project directory Vállaszd ki a projekt mappáját Param Program parameters Program paraméterek Run with these arguments: Futtasd ezekkel az argumentumokkal: Working directory (leave empty to use project directory): Munkamappa (hagyd üresen ha a projekt mappát kívánod használni): ... ... Environment variables (NAME=value): Környezeti változók (NÉV=érték): Name Név Value Érték &Edit &Szerkesztés &Add &Hozzáadás &Delete &Törlés &Sort &Rendezés &Default &Alapértelmezett &OK &Rendben &Cancel &Mégsem ParametersImpl Choose the project location Vállaszd ki a projekt elérési útját The variable "%1" already exists. A "%1" változó már létezik. Cancel Mégsem ProjectManager Project parsing Projekt elemzés Save project changes ? Mented a projekt változásait? Yes Igen No Nem Cancel Mégsem The file already exists in directory. A fájl már létezik a könyvtárban. Forms: Formok: Unable to create file. Nem lehet a fájlt létrehozni. The file already exists. A fájl már létezik. This file is not permitted. Nincs jogod a fájl megnyitásához. Ok Rendben Sub-project creation Alprojekt létrehozása Sub-Projects Al-projektek New name: Új név: The kind of the new and the old filename is different ! Az új és a régi fájl kiterjesztése különbözik ! Rename Átnevezés Unable to rename the file to "%1" Nem lehet a fájlt átnevezni "%1" -re Cannot remove the main project. A főprojektet nem lehet eltávolítani. Do you want to remove "%1" from the project ? Valóban el akarod távolítani a "%1" -t a projektből? Sub-projects Al-projektek Headers Fejlécek Sources Források Dialogs Dialógusok Translations Fordítások Resources Erőforrások The only available version for "%1" is %2 Az %2 elérhető verziója %1 Run on %1 Futtatás %1-en File not found: "%1" A %1 fájl nem található ProjectPropertie Dialog Dialógus Project Template Projekt minta app app lib lib subdirs subdirs Project or Scope : Projekt vagy feladat: Default directories Alapértelmezett könyvtárak Dialogs: Dialógusok: ... ... Sources: Források: Configuration Beállítások General : Általános : Version Verzió build_all build_all debug Hibakeresési (debug) release Kiadási debug_and_release Mindekettő Warnings Figyelmeztetések warn_off Figyelmeztetések ki warn_on Figyenlmeztetések be Qt Libraries Qt könyvtárak core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support webkit webkit Variables Változók Variable : Változó : Values : Értékek : Advanced options Több beállítás Advanced Options Több beállítás app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions kivételek lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt qtestlib qtestlib resources resources rtti rtti staticlib staticlib stl slt thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Free CONFIG variables : Egyéb CONFIG változók : OK Rendben Cancel Mégsem script script phonon phonon xmlpatterns xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl Properties of %1 %1 tulajdonságai New Value: Új érték : The spaces aren't correctly parsed by qmake A szóközöket nem rendesen ellenőrízte a qmake delete spaces or put quotes. töröld a szóközöket vagy használj idézőjeleket. Modify Módosít Cancel Mégsem Choose the sources location Vállaszd ki a forrás elérési útját Choose the dialogs location Vállaszd ki a dilaógus elérési útját A new variable can not be "QT", "CONFIG" or "TEMPLATE" Az új változó nem lehet "QT", "CONFIG" vagy "TEMPLATE" QObject Unable to establish a database connection. Nem tudatam létrehozni a kapcsolatot az adatbázissal. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. A QDevelopnak szüksége van SQLite támogatásra. További információkért ismerkedj a Qt SQL driver doksijával. Unable to start Assistant ! Nem tudtam a Qt-Assistantot elindítani ! Unable to start Designer ! Nem tudtam a Qt-Designert elindítani ! Loading: Töltés: Interface translation Fordítás betöltése Environment control Környezet ellenőrzése Files on editor Fájlok betöltése a szerkeszőbe Plugins Pluginok Main Window creation Főablak létrehozása Current project parsing Projekt ellenőrzése Registers Form Form Name Név Value Érték Apply Elfogad ReplaceWidget Form Form find: keres: Replacement: Helyettesítő: &Replace &Kicserél Previous Előző Next Következő Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Prompt Kérdezzen Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről Shortcuts Configure Shortcuts Gyorsbillentyűk beállítása Action Művelet Shortcut Gyorsbillentyű Default ALapértelmezett OK Rendben Cancel Mégsem Subclassing Qt Designer Form Subclassing Qt Designer Formokból alosztály készítése Class Na&me: Osztály n&év: &New... &Új... &File Name: &Fájl név: &Location: &Elérési út: Filter &by: Szű&rő: &Create &Létrehozás C&ancel M&égsem SubclassingImpl &Update &Frissítés C&reate &Létrehozás (.h and .cpp) (.h és .cpp) Choose the file location Vállaszd ki a fájlt TabWidget Close Tab Fül bezárása Close Other Tabs Többi fül bezárása Close All Tabs Összes fül bezárása TextEdit The Qt database building is in progress. Try to complete code later. A Qt osztályadatbázis létrehozása folyamatban. Várj a kódkiegészítéssel amíg befejeződik. The file "%1" could not be loaded. A %1 fájlt nem lehet betölteni. Cancel Mégsem Save "%1" "%1" mentése Yes Igen No Nem Unable to save %1 %1 mentése sikertelen Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről Goto Implementation Ugrás az implementációhoz Goto Declaration Ugrás az deklarációhoz Cut Kivágás Copy Másolás Paste Beillesztés Selection Indent Azonosak kijelölése Selection Unindent Kijelölés megszűntetése Select All Mindet kijelöl Find... Keres... Toggle Bookmark Jelzőke ki-bekapcsolása Toggle Breakpoint Breakpoint ki-bekapcsolása ToolsControl External Tools Külső eszközök Please enter the path to the external programs: Kérlek add meg a kért külső programok elérési útját: ctags: ctags: ... ... linguist: Qt Linguist: assistant: Qt Assistant: gdb: gdb: designer: Qt Designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: Check environment on start Ellenőrízd ezek meglétét induláskor &Test &Ellenőrzés ToolsControlImpl Ctags was detected in path %1, but this version is too old. Megtaláltam a Ctagsot itt "%1", de sajnos túl régi veziójú. Ok Rendben Please select the program Válaszd ki a programot TreeClasses Open Declaration Deklaráció megnyitása Open Implementation Implementáció megnyitása Add Method... Metódus hozzáadása... Add Variable... Változó hozzáadása... Add get/set Methods... Get/set metódusok hozzáadása... Refresh contents Tartalom frissítése TreeProject Add sub-project... Alprojekt hozzáadása... Add New Item... Új elem hozzáadása... Add Scope... Feladat hozzáadása... Add New Class... Új osztály hozzáadása... Add Existing Files... Létező fájlok hozzáadása... Open in Linguist Megnyitás Linguist-al Refresh translation files Nyelvi fájlok frissítése Build release translation files Kiadási nyelvi fordítások generálása Open in Designer Megnyitás Designerben Dialog Subclassing... Alosztály képzése a dialógusból... Dialog Preview Dialógus előnézet Open Megnyitás Rename... Átnevezés... Remove from project Eltávolítás a projektből Properties of %1... %1 tulajdonságai... Show As Mutasd Normal mezei módban Krawek Krawek módban Warning Dialog Dialógus TextLabel TextLabel OK Rendben Don't show anymore Ne mutasd többé qdevelop-v0.28/resources/.svn/all-wcprops0000444000175000017500000000027211362261070017505 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 38 /svn/!svn/ver/465/tags/v0.28/resources END resources.qrc K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/resources/resources.qrc END qdevelop-v0.28/resources/.svn/entries0000444000175000017500000000062311362261070016713 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/resources http://qdevelop.googlecode.com/svn 2010-03-20T09:00:41.240118Z 463 jlbiord 31becf8c-a71e-0410-8e62-47ffcaada4dd translations dir images dir templates dir resources.qrc file 2010-04-17T07:24:40.470883Z 2f120cd65622a50573616260d529096e 2009-03-05T11:07:16.220708Z 434 Lord.Divius 4897 qdevelop-v0.28/plugins/formatting-astyle/astyle.ui0000644000175000017500000004303011362261064021417 0ustar jlbrdjlbrd AStyleDialog 0 0 800 535 Artistic Style Formatter Plugin 9 6 0 0 Sample 9 6 QTextEdit::NoWrap true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> 40 false 0 0 0 Style 9 6 Qt::Vertical 20 40 6 0 Styles 9 6 GNU ANSI true Custom Linux Java K&&R Qt::Vertical 20 40 Indentation 9 6 Qt::Vertical 20 40 Indent multi-line preprocessor definitions Indent labels Indent namespaces Indent blocks Indent brackets Converts TABs to spaces Force using TABs 6 0 Indentation size (in spaces) 2 20 4 Qt::Horizontal QSizePolicy::Expanding 40 20 Indent classes (keywords public:, protected: and private:) Indent case: statement in switches (commands under case:) Use TABs instead of spaces Fill empty lines with the whitespace of their previous lines Indent switches (keyword case:) Formatting 9 6 6 0 Brackets (None, Break, Attach or Linux): none break attach linux Qt::Horizontal QSizePolicy::Preferred 40 20 Pad empty lines around header blocks (e.g. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Insert space padding around operators Insert space padding around parenthesis 0 0 6 0 0 0 6 0 Don't break complex statements and multiple statements residing in a single line Don't break one-line blocks Qt::Vertical 20 40 6 0 &About Qt::Horizontal 131 31 &OK &Cancel true okButton clicked() AStyleDialog accept() 391 401 96 254 cancelButton clicked() AStyleDialog reject() 474 401 179 282 qdevelop-v0.28/plugins/formatting-astyle/ASResource.cpp0000644000175000017500000003307411362261064022305 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASResource.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" namespace astyle { const string ASResource::AS_IF = string("if"); const string ASResource::AS_ELSE = string("else"); const string ASResource::AS_FOR = string("for"); const string ASResource::AS_DO = string("do"); const string ASResource::AS_WHILE = string("while"); const string ASResource::AS_SWITCH = string("switch"); const string ASResource::AS_CASE = string("case"); const string ASResource::AS_DEFAULT = string("default"); const string ASResource::AS_CLASS = string("class"); const string ASResource::AS_STRUCT = string("struct"); const string ASResource::AS_UNION = string("union"); const string ASResource::AS_INTERFACE = string("interface"); const string ASResource::AS_NAMESPACE = string("namespace"); const string ASResource::AS_EXTERN = string("extern"); const string ASResource::AS_PUBLIC = string("public"); const string ASResource::AS_PROTECTED = string("protected"); const string ASResource::AS_PRIVATE = string("private"); const string ASResource::AS_STATIC = string("static"); const string ASResource::AS_SYNCHRONIZED = string("synchronized"); const string ASResource::AS_OPERATOR = string("operator"); const string ASResource::AS_TEMPLATE = string("template"); const string ASResource::AS_TRY = string("try"); const string ASResource::AS_CATCH = string("catch"); const string ASResource::AS_FINALLY = string("finally"); const string ASResource::AS_THROWS = string("throws"); const string ASResource::AS_CONST = string("const"); const string ASResource::AS_ASM = string("asm"); const string ASResource::AS_BAR_DEFINE = string("#define"); const string ASResource::AS_BAR_INCLUDE = string("#include"); const string ASResource::AS_BAR_IF = string("#if"); const string ASResource::AS_BAR_EL = string("#el"); const string ASResource::AS_BAR_ENDIF = string("#endif"); const string ASResource::AS_OPEN_BRACKET = string("{"); const string ASResource::AS_CLOSE_BRACKET = string("}"); const string ASResource::AS_OPEN_LINE_COMMENT = string("//"); const string ASResource::AS_OPEN_COMMENT = string("/*"); const string ASResource::AS_CLOSE_COMMENT = string("*/"); const string ASResource::AS_ASSIGN = string("="); const string ASResource::AS_PLUS_ASSIGN = string("+="); const string ASResource::AS_MINUS_ASSIGN = string("-="); const string ASResource::AS_MULT_ASSIGN = string("*="); const string ASResource::AS_DIV_ASSIGN = string("/="); const string ASResource::AS_MOD_ASSIGN = string("%="); const string ASResource::AS_OR_ASSIGN = string("|="); const string ASResource::AS_AND_ASSIGN = string("&="); const string ASResource::AS_XOR_ASSIGN = string("^="); const string ASResource::AS_GR_GR_ASSIGN = string(">>="); const string ASResource::AS_LS_LS_ASSIGN = string("<<="); const string ASResource::AS_GR_GR_GR_ASSIGN = string(">>>="); const string ASResource::AS_LS_LS_LS_ASSIGN = string("<<<="); const string ASResource::AS_RETURN = string("return"); const string ASResource::AS_EQUAL = string("=="); const string ASResource::AS_PLUS_PLUS = string("++"); const string ASResource::AS_MINUS_MINUS = string("--"); const string ASResource::AS_NOT_EQUAL = string("!="); const string ASResource::AS_GR_EQUAL = string(">="); const string ASResource::AS_GR_GR = string(">>"); const string ASResource::AS_GR_GR_GR = string(">>>"); const string ASResource::AS_LS_EQUAL = string("<="); const string ASResource::AS_LS_LS = string("<<"); const string ASResource::AS_LS_LS_LS = string("<<<"); const string ASResource::AS_ARROW = string("->"); const string ASResource::AS_AND = string("&&"); const string ASResource::AS_OR = string("||"); const string ASResource::AS_COLON_COLON = string("::"); const string ASResource::AS_PAREN_PAREN = string("()"); const string ASResource::AS_BLPAREN_BLPAREN = string("[]"); const string ASResource::AS_PLUS = string("+"); const string ASResource::AS_MINUS = string("-"); const string ASResource::AS_MULT = string("*"); const string ASResource::AS_DIV = string("/"); const string ASResource::AS_MOD = string("%"); const string ASResource::AS_GR = string(">"); const string ASResource::AS_LS = string("<"); const string ASResource::AS_NOT = string("!"); const string ASResource::AS_BIT_OR = string("|"); const string ASResource::AS_BIT_AND = string("&"); const string ASResource::AS_BIT_NOT = string("~"); const string ASResource::AS_BIT_XOR = string("^"); const string ASResource::AS_QUESTION = string("?"); const string ASResource::AS_COLON = string(":"); const string ASResource::AS_COMMA = string(","); const string ASResource::AS_SEMICOLON = string(";"); const string ASResource::AS_FOREACH = string("foreach"); const string ASResource::AS_LOCK = string("lock"); const string ASResource::AS_UNSAFE = string("unsafe"); const string ASResource::AS_FIXED = string("fixed"); const string ASResource::AS_GET = string("get"); const string ASResource::AS_SET = string("set"); const string ASResource::AS_ADD = string("add"); const string ASResource::AS_REMOVE = string("remove"); const string ASResource::AS_CONST_CAST = string("const_cast"); const string ASResource::AS_DYNAMIC_CAST = string("dynamic_cast"); const string ASResource::AS_REINTERPRET_CAST = string("reinterpret_cast"); const string ASResource::AS_STATIC_CAST = string("static_cast"); /** * Build the vector of assignment operators. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param assignmentOperators a reference to the vector to be built. */ void ASResource::buildAssignmentOperators(vector &assignmentOperators) { assignmentOperators.push_back(&AS_ASSIGN); assignmentOperators.push_back(&AS_PLUS_ASSIGN); assignmentOperators.push_back(&AS_MINUS_ASSIGN); assignmentOperators.push_back(&AS_MULT_ASSIGN); assignmentOperators.push_back(&AS_DIV_ASSIGN); assignmentOperators.push_back(&AS_MOD_ASSIGN); assignmentOperators.push_back(&AS_OR_ASSIGN); assignmentOperators.push_back(&AS_AND_ASSIGN); assignmentOperators.push_back(&AS_XOR_ASSIGN); // Java assignmentOperators.push_back(&AS_GR_GR_GR_ASSIGN); assignmentOperators.push_back(&AS_GR_GR_ASSIGN); assignmentOperators.push_back(&AS_LS_LS_ASSIGN); // Unknown assignmentOperators.push_back(&AS_LS_LS_LS_ASSIGN); assignmentOperators.push_back(&AS_RETURN); } /** * Build the vector of C++ cast operators. * Used by ONLY ASFormatter.cpp * * @param castOperators a reference to the vector to be built. */ void ASResource::buildCastOperators(vector &castOperators) { castOperators.push_back(&AS_CONST_CAST); castOperators.push_back(&AS_DYNAMIC_CAST); castOperators.push_back(&AS_REINTERPRET_CAST); castOperators.push_back(&AS_STATIC_CAST); } /** * Build the vector of header words. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param headers a reference to the vector to be built. */ void ASResource::buildHeaders(vector &headers) { headers.push_back(&AS_IF); headers.push_back(&AS_ELSE); headers.push_back(&AS_FOR); headers.push_back(&AS_WHILE); headers.push_back(&AS_DO); headers.push_back(&AS_SWITCH); headers.push_back(&AS_CASE); headers.push_back(&AS_DEFAULT); headers.push_back(&AS_TRY); headers.push_back(&AS_CATCH); headers.push_back(&AS_TEMPLATE); headers.push_back(&AS_CONST); headers.push_back(&AS_STATIC); headers.push_back(&AS_EXTERN); // C# and Java headers.push_back(&AS_FINALLY); // Java headers.push_back(&AS_SYNCHRONIZED); // C# headers.push_back(&AS_FOREACH); headers.push_back(&AS_LOCK); headers.push_back(&AS_UNSAFE); headers.push_back(&AS_FIXED); headers.push_back(&AS_GET); headers.push_back(&AS_SET); headers.push_back(&AS_ADD); headers.push_back(&AS_REMOVE); } /** * Build the vector of non-assignment operators. * Used by ONLY ASBeautifier.cpp * * @param nonParenHeaders a reference to the vector to be built. */ void ASResource::buildNonAssignmentOperators(vector &nonAssignmentOperators) { nonAssignmentOperators.push_back(&AS_EQUAL); nonAssignmentOperators.push_back(&AS_PLUS_PLUS); nonAssignmentOperators.push_back(&AS_MINUS_MINUS); nonAssignmentOperators.push_back(&AS_NOT_EQUAL); nonAssignmentOperators.push_back(&AS_GR_EQUAL); nonAssignmentOperators.push_back(&AS_GR_GR_GR); nonAssignmentOperators.push_back(&AS_GR_GR); nonAssignmentOperators.push_back(&AS_LS_EQUAL); nonAssignmentOperators.push_back(&AS_LS_LS_LS); nonAssignmentOperators.push_back(&AS_LS_LS); nonAssignmentOperators.push_back(&AS_ARROW); nonAssignmentOperators.push_back(&AS_AND); nonAssignmentOperators.push_back(&AS_OR); } /** * Build the vector of header non-paren headers. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param nonParenHeaders a reference to the vector to be built. */ void ASResource::buildNonParenHeaders(vector &nonParenHeaders) { nonParenHeaders.push_back(&AS_ELSE); nonParenHeaders.push_back(&AS_DO); nonParenHeaders.push_back(&AS_CASE); nonParenHeaders.push_back(&AS_DEFAULT); nonParenHeaders.push_back(&AS_TRY); nonParenHeaders.push_back(&AS_TEMPLATE); nonParenHeaders.push_back(&AS_CONST); nonParenHeaders.push_back(&AS_STATIC); nonParenHeaders.push_back(&AS_EXTERN); // C# and Java nonParenHeaders.push_back(&AS_FINALLY); // C# nonParenHeaders.push_back(&AS_UNSAFE); nonParenHeaders.push_back(&AS_GET); nonParenHeaders.push_back(&AS_SET); nonParenHeaders.push_back(&AS_ADD); nonParenHeaders.push_back(&AS_REMOVE); } /** * Build the vector of operators. * Used by ONLY ASFormatter.cpp * * @param operators a reference to the vector to be built. */ void ASResource::buildOperators(vector &operators) { operators.push_back(&AS_PLUS_ASSIGN); operators.push_back(&AS_MINUS_ASSIGN); operators.push_back(&AS_MULT_ASSIGN); operators.push_back(&AS_DIV_ASSIGN); operators.push_back(&AS_MOD_ASSIGN); operators.push_back(&AS_OR_ASSIGN); operators.push_back(&AS_AND_ASSIGN); operators.push_back(&AS_XOR_ASSIGN); operators.push_back(&AS_EQUAL); operators.push_back(&AS_PLUS_PLUS); operators.push_back(&AS_MINUS_MINUS); operators.push_back(&AS_NOT_EQUAL); operators.push_back(&AS_GR_EQUAL); operators.push_back(&AS_GR_GR_GR_ASSIGN); operators.push_back(&AS_GR_GR_ASSIGN); operators.push_back(&AS_GR_GR_GR); operators.push_back(&AS_GR_GR); operators.push_back(&AS_LS_EQUAL); operators.push_back(&AS_LS_LS_LS_ASSIGN); operators.push_back(&AS_LS_LS_ASSIGN); operators.push_back(&AS_LS_LS_LS); operators.push_back(&AS_LS_LS); operators.push_back(&AS_ARROW); operators.push_back(&AS_AND); operators.push_back(&AS_OR); operators.push_back(&AS_COLON_COLON); //// BUGFIX: removed the folowing lines //// operators.push_back(&AS_PAREN_PAREN); //// operators.push_back(&AS_BLPAREN_BLPAREN); operators.push_back(&AS_PLUS); operators.push_back(&AS_MINUS); operators.push_back(&AS_MULT); operators.push_back(&AS_DIV); operators.push_back(&AS_MOD); operators.push_back(&AS_QUESTION); operators.push_back(&AS_COLON); operators.push_back(&AS_ASSIGN); operators.push_back(&AS_LS); operators.push_back(&AS_GR); operators.push_back(&AS_NOT); operators.push_back(&AS_BIT_OR); operators.push_back(&AS_BIT_AND); operators.push_back(&AS_BIT_NOT); operators.push_back(&AS_BIT_XOR); operators.push_back(&AS_OPERATOR); operators.push_back(&AS_COMMA); // operators.push_back(&AS_SEMICOLON); operators.push_back(&AS_RETURN); } /** * Build the vector of pre-block statements. * Used by ONLY ASBeautifier.cpp * * @param preBlockStatements a reference to the vector to be built. */ void ASResource::buildPreBlockStatements(vector &preBlockStatements) { preBlockStatements.push_back(&AS_CLASS); preBlockStatements.push_back(&AS_STRUCT); preBlockStatements.push_back(&AS_UNION); preBlockStatements.push_back(&AS_INTERFACE); preBlockStatements.push_back(&AS_NAMESPACE); preBlockStatements.push_back(&AS_THROWS); preBlockStatements.push_back(&AS_EXTERN); } /** * Build the vector of pre-command headers. * Used by ONLY ASFormatter.cpp * * @param preCommandHeaders a reference to the vector to be built. */ void ASResource::buildPreCommandHeaders(vector &preCommandHeaders) { preCommandHeaders.push_back(&AS_EXTERN); preCommandHeaders.push_back(&AS_THROWS); preCommandHeaders.push_back(&AS_CONST); } /** * Build the vector of pre-definition headers. * Used by ONLY ASFormatter.cpp * * @param preDefinitionHeaders a reference to the vector to be built. */ void ASResource::buildPreDefinitionHeaders(vector &preDefinitionHeaders) { preDefinitionHeaders.push_back(&AS_CLASS); preDefinitionHeaders.push_back(&AS_INTERFACE); preDefinitionHeaders.push_back(&AS_NAMESPACE); preDefinitionHeaders.push_back(&AS_STRUCT); } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/README.txt0000644000175000017500000000211111362261064021250 0ustar jlbrdjlbrd AStyle Formatting plugin for QDevelop (C) 2006-2009 Jean-Luc Biord Installation ~~~~~~~~~~~~ 1.`cd' to the directory containing the plugins's source code and type `qmake' (`qmake -recursive' with Qt 4.2.x) to generate the Makefile for your system. 2. Type `make' on Linux or `mingw32-make` on Windows to compile the package. 3. The library is built on bin/plugins/ directory of the QDevelop tree. Copy the file (.dll) or (.so) in plugins subdirectory where QDevelop program is installed. License ~~~~~~~~~~~~~ Copyright (C) 2006-2009 Jean-Luc Biord Astyle plugin for QDevelop 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. qdevelop-v0.28/plugins/formatting-astyle/astyledialogimpl.h0000644000175000017500000000476711362261064023311 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef ASTYLEDIALOGIMPL_H #define ASTYLEDIALOGIMPL_H // #include "ui_astyle.h" #include // class AStyleDialogImpl : public QDialog, public Ui::AStyleDialog { Q_OBJECT public: AStyleDialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: void on_aboutButton_clicked(); void on_comboBox_currentIndexChanged(QString ); void on_checkBox13_toggled(bool checked); void on_checkBox14_toggled(bool checked); void on_checkBox16_toggled(bool checked); void on_checkBox17_toggled(bool checked); void on_checkBox15_toggled(bool checked); void on_checkBox18_toggled(bool checked); void on_checkBox12_toggled(bool checked); void on_checkBox11_toggled(bool checked); void on_checkBox10_toggled(bool checked); void on_checkBox9_toggled(bool checked); void on_checkBox8_toggled(bool checked); void on_checkBox3_toggled(bool checked); void on_checkBox2_toggled(bool checked); void on_spacesSize_valueChanged(int ); void on_qt_spinbox_lineedit_textChanged(QString ); void on_checkBox5_toggled(bool checked); void on_checkBox7_toggled(bool checked); void on_checkBox1_toggled(bool checked); void on_checkBox4_toggled(bool checked); void on_checkBox6_toggled(bool checked); void on_gnu_toggled(bool checked); void on_ansi_toggled(bool checked); void on_Linux_toggled(bool checked); void on_java_toggled(bool checked); void on_kr_toggled(bool checked); void on_okButton_clicked(); void on_custom_toggled(bool checked); private: void sample(); QStringList args(); QString m_textSample; }; #endif qdevelop-v0.28/plugins/formatting-astyle/COPYING0000644000175000017500000004311011362261064020611 0ustar jlbrdjlbrd GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qdevelop-v0.28/plugins/formatting-astyle/ASFormatter.cpp0000644000175000017500000014201511362261064022455 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASFormatter.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #include // can trace only if _DEBUG is defined (Visual C) #ifdef _DEBUG // #define TRACEunpad // #define TRACEcomment // #define TRACEheader #if defined(TRACEunpad) || defined(TRACEcomment) || defined(TRACEheader) ofstream *traceOutF; #define TRACEF #endif #endif #ifdef TRACEunpad #define TRunpad(a,b,c) if(b > 0 || c > 0) *traceOutF << inLineNumber << " " << b << a << c << endl; #else #define TRunpad(a,b,c) ((void)0) #endif #ifdef TRACEcomment #define TRcomment(a) *traceOutF << inLineNumber << " " << a << endl; #else #define TRcomment(a) ((void)0) #endif #ifdef TRACEheader #define TRxtra(a) *traceOutF << inLineNumber << " " << a << endl; #else #define TRxtra(a) ((void)0) #endif #define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } #define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container); } #define IS_A(a,b) ( ((a) & (b)) == (b)) using namespace std; namespace astyle { bool ASFormatter::calledInitStatic = false; vector ASFormatter::headers; vector ASFormatter::nonParenHeaders; // vector ASFormatter::preprocessorHeaders; vector ASFormatter::preDefinitionHeaders; vector ASFormatter::preCommandHeaders; vector ASFormatter::operators; vector ASFormatter::assignmentOperators; vector ASFormatter::castOperators; /** * Constructor of ASFormatter */ ASFormatter::ASFormatter() { staticInit(); preBracketHeaderStack = NULL; bracketTypeStack = NULL; parenStack = NULL; lineCommentNoIndent = false; // ***************** lineCommentNoBeautify = false; // ***************** sourceIterator = NULL; bracketFormatMode = NONE_MODE; shouldPadOperators = false; shouldPadParensOutside = false; shouldPadParensInside = false; shouldUnPadParens = false; shouldBreakOneLineBlocks = true; shouldBreakOneLineStatements = true; shouldConvertTabs = false; shouldBreakBlocks = false; shouldBreakClosingHeaderBlocks = false; shouldBreakClosingHeaderBrackets = false; shouldBreakElseIfs = false; #ifdef TRACEF // create a trace text file string filename = "trace.txt"; char* env = getenv("HOME"); if (env != NULL) filename = string(env) + string("/tracef.txt"); else { env = getenv("USERPROFILE"); if (env != NULL) filename = string(env) + string("\\My Documents\\tracef.txt"); else { cout << "\nCould not open trace.txt\n" << endl; exit(1); } } traceOutF = new ofstream(filename.c_str()); #endif } /** * Destructor of ASFormatter */ ASFormatter::~ASFormatter() { DELETE_CONTAINER(preBracketHeaderStack); #ifdef TRACEF delete traceOutF; #endif } /** * initialization of static data of ASFormatter. */ void ASFormatter::staticInit() { if (calledInitStatic) return; calledInitStatic = true; ASResource::buildHeaders(headers); ASResource::buildNonParenHeaders(nonParenHeaders); ASResource::buildAssignmentOperators(assignmentOperators); ASResource::buildOperators(operators); ASResource::buildPreDefinitionHeaders(preDefinitionHeaders); ASResource::buildPreCommandHeaders(preCommandHeaders); ASResource::buildCastOperators(castOperators); // preprocessorHeaders.push_back(&AS_BAR_DEFINE); //// DEVEL: removed the folowing lines ////preprocessorHeaders.push_back(&AS_BAR_INCLUDE); ////preprocessorHeaders.push_back(&AS_BAR_IF); // #if or #ifdef ////preprocessorHeaders.push_back(&AS_BAR_EL); // #else or #elif ////preprocessorHeaders.push_back(&AS_BAR_ENDIF); } /** * initialize the ASFormatter. * * init() should be called every time a ASFormatter object is to start * formatting a NEW source file. * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object * that will be used to iterate through the source code. This object will be * deleted during the ASFormatter's destruction, and thus should not be * deleted elsewhere. * * @param iter a pointer to the DYNAMICALLY CREATED ASSourceIterator object. */ void ASFormatter::init(ASSourceIterator *si) { ASBeautifier::init(si); ASEnhancer::init(getIndentLength(), getIndentString(), getCStyle(), getCaseIndent()); sourceIterator = si; INIT_CONTAINER(preBracketHeaderStack, new vector); INIT_CONTAINER(bracketTypeStack, new vector); bracketTypeStack->push_back(DEFINITION_TYPE); INIT_CONTAINER(parenStack, new vector); parenStack->push_back(0); currentHeader = NULL; currentLine = string(""); formattedLine = ""; currentChar = ' '; previousCommandChar = ' '; previousNonWSChar = ' '; quoteChar = '"'; charNum = 0; spacePadNum = 0; previousOperator = NULL; inLineNumber = 0; // for debugging isVirgin = true; isInLineComment = false; isInComment = false; isInPreprocessor = false; doesLineStartComment = false; isInQuote = false; isSpecialChar = false; isNonParenHeader = true; foundPreDefinitionHeader = false; foundPreCommandHeader = false; foundCastOperator = false; foundQuestionMark = false; isInLineBreak = false; endOfCodeReached = false; isLineReady = false; isPreviousBracketBlockRelated = true; isInPotentialCalculation = false; shouldReparseCurrentChar = false; passedSemicolon = false; passedColon = false; isInTemplate = false; isInBlParen = false; shouldBreakLineAfterComments = false; isImmediatelyPostComment = false; isImmediatelyPostLineComment = false; isImmediatelyPostEmptyBlock = false; isPrependPostBlockEmptyLineRequested = false; isAppendPostBlockEmptyLineRequested = false; prependEmptyLine = false; foundClosingHeader = false; previousReadyFormattedLineLength = 0; isImmediatelyPostHeader = false; isInHeader = false; #ifdef TRACEF *traceOutF << "New file -------------" << endl; #endif } /** * get the next formatted line. * * @return formatted line. */ string ASFormatter::nextLine() { const string *newHeader; bool isCharImmediatelyPostComment = false; bool isPreviousCharPostComment = false; bool isCharImmediatelyPostLineComment = false; bool isInVirginLine = isVirgin; bool isCharImmediatelyPostOpenBlock = false; bool isCharImmediatelyPostCloseBlock = false; bool isCharImmediatelyPostTemplate = false; bool prevIsParenHeader = false; while (!isLineReady) { if (shouldReparseCurrentChar) shouldReparseCurrentChar = false; else if (!getNextChar()) { breakLine(); return beautify(readyFormattedLine); } else // stuff to do when reading a new character... { // make sure that a virgin '{' at the begining ofthe file will be treated as a block... if (isInVirginLine && currentChar == '{') previousCommandChar = '{'; isPreviousCharPostComment = isCharImmediatelyPostComment; isCharImmediatelyPostComment = false; isCharImmediatelyPostTemplate = false; // isCharImmediatelyPostHeader = false; } if (isInLineComment) { appendCurrentChar(); // explicitely break a line when a line comment's end is found. if (charNum + 1 == (int) currentLine.length()) { isInLineBreak = true; isInLineComment = false; isImmediatelyPostLineComment = true; currentChar = 0; //make sure it is a neutral char. } continue; } else if (isInComment) { if (isSequenceReached("*/")) { isInComment = false; isImmediatelyPostComment = true; appendSequence(AS_CLOSE_COMMENT); goForward(1); } else appendCurrentChar(); continue; } // not in line comment or comment else if (isInQuote) { if (isSpecialChar) { isSpecialChar = false; appendCurrentChar(); } else if (currentChar == '\\') { isSpecialChar = true; appendCurrentChar(); } else if (quoteChar == currentChar) { isInQuote = false; appendCurrentChar(); } else { appendCurrentChar(); } continue; } // handle white space - needed to simplify the rest. if (isWhiteSpace(currentChar) || isInPreprocessor) { appendCurrentChar(); continue; } /* not in MIDDLE of quote or comment or white-space of any type ... */ if (isSequenceReached("//")) { // check for windows line marker if (currentLine[charNum+2] == '\xf2') isAppendPostBlockEmptyLineRequested = false; isInLineComment = true; //// if (shouldPadOperators) //// appendSpacePad(); // do not indent if in column 1 or 2 if (lineCommentNoIndent == false) { if (charNum == 0) lineCommentNoIndent = true; else if (charNum == 1 && currentLine[0] == ' ') lineCommentNoIndent = true; } // move comment if spaces were added or deleted if (lineCommentNoIndent == false && spacePadNum != 0) { size_t len = formattedLine.length(); // if spaces were removed, need to add spaces before the comment if (spacePadNum < 0) { int adjust = -spacePadNum; // make the number positive if (formattedLine[len-1] != '\t') // don't adjust if a tab formattedLine.append(adjust, ' '); else adjust = 0; TRcomment(adjust); // trace macro } // if spaces were added, need to delete spaces before the comment, if possible else { int adjust = spacePadNum; if (formattedLine.find_last_not_of(' ') < len - adjust - 1 && formattedLine[len-1] != '\t') // don't adjust a tab formattedLine.resize(len - adjust); // the following are commented out to avoid a Borland compiler warning // else // adjust = 0; TRcomment(-adjust); // trace macro } } appendSequence(AS_OPEN_LINE_COMMENT); goForward(1); continue; } else if (isSequenceReached("/*")) { isInComment = true; //// if (shouldPadOperators) //// appendSpacePad(); appendSequence(AS_OPEN_COMMENT); goForward(1); continue; } else if (currentChar == '"' || currentChar == '\'') { isInQuote = true; quoteChar = currentChar; //// if (shouldPadOperators) // BUGFIX: these two lines removed. seem to be unneeded, and interfere with L" //// appendSpacePad(); // BUFFIX: TODO make sure the removal of these lines doesn't reopen old bugs... appendCurrentChar(); continue; } /* not in quote or comment or white-space of any type ... */ // check if in preprocessor // ** isInPreprocessor will be automatically reset at the begining // of a new line in getnextChar() if (currentChar == '#') { isInPreprocessor = true; appendCurrentChar(); continue; } /* not in preprocessor ... */ if (isImmediatelyPostComment) { isImmediatelyPostComment = false; isCharImmediatelyPostComment = true; } if (isImmediatelyPostLineComment) { isImmediatelyPostLineComment = false; isCharImmediatelyPostLineComment = true; } if (shouldBreakLineAfterComments) { shouldBreakLineAfterComments = false; shouldReparseCurrentChar = true; breakLine(); continue; } // reset isImmediatelyPostHeader information if (isImmediatelyPostHeader) { isImmediatelyPostHeader = false; // Make sure headers are broken from their succeeding blocks // (e.g. // if (isFoo) DoBar(); // should become // if (isFoo) // DoBar; // ) // But treat else if() as a special case which should not be broken! if (shouldBreakOneLineStatements) { // if may break 'else if()'s, then simply break the line if (shouldBreakElseIfs) isInLineBreak = true; } } if (passedSemicolon) { passedSemicolon = false; if (parenStack->back() == 0) { shouldReparseCurrentChar = true; isInLineBreak = true; continue; } } if (passedColon) { passedColon = false; if (parenStack->back() == 0) { shouldReparseCurrentChar = true; isInLineBreak = true; continue; } } // Check if in template declaration, e.g. foo or foo // If so, set isInTemplate to true // if (!isInTemplate && currentChar == '<') { int templateDepth = 0; const string *oper; for (size_t i = charNum; i < currentLine.length(); i += (oper ? oper->length() : 1)) { oper = ASBeautifier::findHeader(currentLine, i, operators); if (oper == &AS_LS) { templateDepth++; } else if (oper == &AS_GR) { templateDepth--; if (templateDepth == 0) { // this is a template! // isInTemplate = true; break; } } else if (oper == &AS_COMMA // comma, e.g. A || oper == &AS_BIT_AND // reference, e.g. A || oper == &AS_MULT // pointer, e.g. A || oper == &AS_COLON_COLON) // ::, e.g. std::string { continue; } else if (!isLegalNameChar(currentLine[i]) && !isWhiteSpace(currentLine[i])) { // this is not a template -> leave... // isInTemplate = false; break; } } } // handle parenthesies // if (currentChar == '(' || currentChar == '[' || (isInTemplate && currentChar == '<')) { parenStack->back()++; if (currentChar == '[') isInBlParen = true; } else if (currentChar == ')' || currentChar == ']' || (isInTemplate && currentChar == '>')) { parenStack->back()--; if (isInTemplate && currentChar == '>') { isInTemplate = false; isCharImmediatelyPostTemplate = true; } // check if this parenthesis closes a header, e.g. if (...), while (...) // if (isInHeader && parenStack->back() == 0) { isInHeader = false; isImmediatelyPostHeader = true; } if (currentChar == ']') isInBlParen = false; if (currentChar == ')') foundCastOperator = false; } // handle brackets // BracketType bracketType = NULL_TYPE; if (currentChar == '{') { bracketType = getBracketType(); foundPreDefinitionHeader = false; foundPreCommandHeader = false; isInPotentialCalculation = false; // %%%%%%%%%%%% bracketTypeStack->push_back(bracketType); preBracketHeaderStack->push_back(currentHeader); currentHeader = NULL; isPreviousBracketBlockRelated = !IS_A(bracketType, ARRAY_TYPE); } else if (currentChar == '}') { // if a request has been made to append a post block empty line, // but the block exists immediately before a closing bracket, // then there is not need for the post block empty line. // isAppendPostBlockEmptyLineRequested = false; if (!bracketTypeStack->empty()) { bracketType = bracketTypeStack->back(); bracketTypeStack->pop_back(); isPreviousBracketBlockRelated = !IS_A(bracketType, ARRAY_TYPE); } if (!preBracketHeaderStack->empty()) { currentHeader = preBracketHeaderStack->back(); preBracketHeaderStack->pop_back(); } else currentHeader = NULL; } if (!IS_A(bracketType, ARRAY_TYPE)) { if (currentChar == '{') { parenStack->push_back(0); } else if (currentChar == '}') { if (!parenStack->empty()) { parenStack->pop_back(); } } if (currentChar == '{') { if ((bracketFormatMode == ATTACH_MODE || bracketFormatMode == BDAC_MODE && bracketTypeStack->size() >= 2 && IS_A((*bracketTypeStack)[bracketTypeStack->size()-2], COMMAND_TYPE) /*&& isInLineBreak*/) && !isCharImmediatelyPostLineComment) { appendSpacePad(); if (!isCharImmediatelyPostComment // do not attach '{' to lines that end with /**/ comments. && previousCommandChar != '{' && previousCommandChar != '}' && previousCommandChar != ';') // '}' , ';' chars added for proper handling of '{' immediately after a '}' or ';' appendCurrentChar(false); else appendCurrentChar(true); continue; } else if (bracketFormatMode == BREAK_MODE || bracketFormatMode == BDAC_MODE && bracketTypeStack->size() >= 2 && IS_A((*bracketTypeStack)[bracketTypeStack->size()-2], DEFINITION_TYPE)) { if (shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) breakLine(); appendCurrentChar(); continue; } else if (bracketFormatMode == NONE_MODE) { if (lineBeginsWith('{')) // is opening bracket broken? appendCurrentChar(true); else appendCurrentChar(false); continue; } } else if (currentChar == '}') { // mark state of immediately after empty block // this state will be used for locating brackets that appear immedately AFTER an empty block (e.g. '{} \n}'). if (previousCommandChar == '{') isImmediatelyPostEmptyBlock = true; if ((!(previousCommandChar == '{' && isPreviousBracketBlockRelated)) // this '{' does not close an empty block && (shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) // astyle is allowed to break on line blocks && (!(bracketFormatMode == NONE_MODE && IS_A(bracketType, SINGLE_LINE_TYPE))) && !isImmediatelyPostEmptyBlock) // this '}' does not immediately follow an empty block { breakLine(); appendCurrentChar(); } else { if (!isCharImmediatelyPostComment && !bracketFormatMode == NONE_MODE) isInLineBreak = false; appendCurrentChar(); if (!bracketFormatMode == NONE_MODE) if ((shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) && !(currentChar == '}' && peekNextChar() == ';')) // fixes }; placed on separate lines shouldBreakLineAfterComments = true; } if (shouldBreakBlocks) { isAppendPostBlockEmptyLineRequested = true; } continue; } } if (((previousCommandChar == '{' && isPreviousBracketBlockRelated) || (previousCommandChar == '}' && !isImmediatelyPostEmptyBlock && isPreviousBracketBlockRelated && !isPreviousCharPostComment // Fixes wrongly appended newlines after '}' immediately after comments && peekNextChar() != ' ')) && (shouldBreakOneLineBlocks || !IS_A(bracketTypeStack->back(), SINGLE_LINE_TYPE))) { isCharImmediatelyPostOpenBlock = (previousCommandChar == '{'); isCharImmediatelyPostCloseBlock = (previousCommandChar == '}'); if (bracketFormatMode != NONE_MODE) { previousCommandChar = ' '; isInLineBreak = true; } } // reset block handling flags isImmediatelyPostEmptyBlock = false; // look for headers if (!isInTemplate) { if ((newHeader = findHeader(headers)) != NULL) { foundClosingHeader = false; const string *previousHeader; // recognize closing headers of do..while, if..else, try..catch..finally if ((newHeader == &AS_ELSE && currentHeader == &AS_IF) || (newHeader == &AS_WHILE && currentHeader == &AS_DO) || (newHeader == &AS_CATCH && currentHeader == &AS_TRY) || (newHeader == &AS_CATCH && currentHeader == &AS_CATCH) || (newHeader == &AS_FINALLY && currentHeader == &AS_TRY) || (newHeader == &AS_FINALLY && currentHeader == &AS_CATCH)) foundClosingHeader = true; previousHeader = currentHeader; currentHeader = newHeader; // If in ATTACH or LINUX bracket modes, attach closing headers (e.g. 'else', 'catch') // to their preceding bracket, // But do not perform the attachment if the shouldBreakClosingHeaderBrackets is set! if (!shouldBreakClosingHeaderBrackets && foundClosingHeader && (bracketFormatMode == ATTACH_MODE || bracketFormatMode == BDAC_MODE) && previousNonWSChar == '}') { isInLineBreak = false; appendSpacePad(); if (shouldBreakBlocks) isAppendPostBlockEmptyLineRequested = false; } // If NONE bracket mode, leave closing headers as they are (e.g. 'else', 'catch') if (foundClosingHeader && bracketFormatMode == NONE_MODE && previousNonWSChar == '}') { if (lineBeginsWith('}')) // is closing bracket broken? { isInLineBreak = false; appendSpacePad(); } if (shouldBreakBlocks) isAppendPostBlockEmptyLineRequested = false; } //Check if a template definition as been reached, e.g. template if (newHeader == &AS_TEMPLATE) { isInTemplate = true; } // check if the found header is non-paren header isNonParenHeader = (find(nonParenHeaders.begin(), nonParenHeaders.end(), newHeader) != nonParenHeaders.end()); appendSequence(*currentHeader); goForward(currentHeader->length() - 1); // if padding is on, and a paren-header is found // then add a space pad after it. //// if (shouldPadOperators && !isNonParenHeader) //// do not need with new pad operator functions //// appendSpacePad(); // if a paren-header is found add a space after it, if needed // this checks currentLine, appendSpacePad() checks formattedLine if (!isNonParenHeader && charNum < (int) currentLine.length() && !isWhiteSpace(currentLine[charNum+1])) appendSpacePad(); // Signal that a header has been reached // *** But treat a closing while() (as in do...while) // as if it where NOT a header since a closing while() // should never have a block after it! if (!(foundClosingHeader && currentHeader == &AS_WHILE)) { isInHeader = true; if (isNonParenHeader) { isImmediatelyPostHeader = true; isInHeader = false; } } if (currentHeader == &AS_IF && previousHeader == &AS_ELSE) isInLineBreak = false; if (shouldBreakBlocks) { if (previousHeader == NULL && !foundClosingHeader && !isCharImmediatelyPostOpenBlock) { isPrependPostBlockEmptyLineRequested = true; } if (currentHeader == &AS_ELSE || currentHeader == &AS_CATCH || currentHeader == &AS_FINALLY || foundClosingHeader) { isPrependPostBlockEmptyLineRequested = false; } if (shouldBreakClosingHeaderBlocks && isCharImmediatelyPostCloseBlock) { isPrependPostBlockEmptyLineRequested = true; } } continue; } else if ((newHeader = findHeader(preDefinitionHeaders)) != NULL) { foundPreDefinitionHeader = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); if (shouldBreakBlocks) isPrependPostBlockEmptyLineRequested = true; continue; } else if ((newHeader = findHeader(preCommandHeaders)) != NULL) { foundPreCommandHeader = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); continue; } else if ((newHeader = findHeader(castOperators)) != NULL) { foundCastOperator = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); continue; } } if (isInLineBreak) // OK to break line here ************************************** breakLine(); if (previousNonWSChar == '}' || currentChar == ';') { if (shouldBreakOneLineStatements && currentChar == ';' && (shouldBreakOneLineBlocks || !IS_A(bracketTypeStack->back(), SINGLE_LINE_TYPE)) && (! bracketFormatMode == NONE_MODE)) { passedSemicolon = true; } if (shouldBreakBlocks && currentHeader != NULL && parenStack->back() == 0) { isAppendPostBlockEmptyLineRequested = true; } if (currentChar != ';') currentHeader = NULL; foundQuestionMark = false; foundPreDefinitionHeader = false; foundPreCommandHeader = false; foundCastOperator = false; isInPotentialCalculation = false; } if (currentChar == ':' && shouldBreakOneLineStatements && !foundQuestionMark // not in a ... ? ... : ... sequence && !foundPreDefinitionHeader // not in a definition block (e.g. class foo : public bar && previousCommandChar != ')' // not immediately after closing paren of a method header, e.g. ASFormatter::ASFormatter(...) : ASBeautifier(...) && previousChar != ':' // not part of '::' && peekNextChar() != ':') // not part of '::' { passedColon = true; if (shouldBreakBlocks) isPrependPostBlockEmptyLineRequested = true; } if (currentChar == '?') foundQuestionMark = true; // determine if this is a potential calculation // newHeader = findHeader(operators); if (newHeader != NULL) { if (!isInPotentialCalculation) { if (find(assignmentOperators.begin(), assignmentOperators.end(), newHeader) != assignmentOperators.end()) { char peekedChar = peekNextChar(); isInPotentialCalculation = (newHeader != &AS_RETURN // %%%%%%%%%%%% && !(newHeader == &AS_EQUAL && peekedChar == '*') // %%%%%%%%%%%% && !(newHeader == &AS_EQUAL && peekedChar == '&')); // %%%%%%%%%%%% } } } else { // the following are not calculations %%%%%%%%%%%% if (currentLine.compare(charNum, 3, "new") == 0 && !isLegalNameChar(currentLine[charNum+3])) isInPotentialCalculation = false; } if (shouldPadOperators) { if (newHeader != NULL) { bool shouldPad = (newHeader != &AS_COLON_COLON && newHeader != &AS_PAREN_PAREN && newHeader != &AS_BLPAREN_BLPAREN && newHeader != &AS_PLUS_PLUS && newHeader != &AS_MINUS_MINUS && newHeader != &AS_NOT && newHeader != &AS_BIT_NOT && newHeader != &AS_ARROW && newHeader != &AS_OPERATOR && newHeader != &AS_RETURN && !(newHeader == &AS_MINUS && isInExponent()) && !(newHeader == &AS_MINUS // check for negative number $$$$$$$$$$$ && (previousNonWSChar == '(' // $$$$$$$$$$$ || previousNonWSChar == '=' // $$$$$$$$$$$ || previousNonWSChar == ',')) // $$$$$$$$$$$ && !(newHeader == &AS_PLUS && isInExponent()) && previousOperator != &AS_OPERATOR && !((newHeader == &AS_MULT || newHeader == &AS_BIT_AND) && isPointerOrReference()) && !((isInTemplate || isCharImmediatelyPostTemplate) && (newHeader == &AS_LS || newHeader == &AS_GR)) ); // pad before operator if (shouldPad && !isInBlParen && !(newHeader == &AS_COLON && !foundQuestionMark) && newHeader != &AS_SEMICOLON && newHeader != &AS_COMMA) appendSpacePad(); appendSequence(*newHeader); goForward(newHeader->length() - 1); // since this block handles '()' and '[]', // the parenStack must be updated here accordingly! if (newHeader == &AS_PAREN_PAREN || newHeader == &AS_BLPAREN_BLPAREN) parenStack->back()--; currentChar = (*newHeader)[newHeader->length() - 1]; // pad after operator // but do not pad after a '-' that is a unary-minus. if (shouldPad && !isInBlParen && !isBeforeComment() && !(newHeader == &AS_MINUS && isUnaryMinus()) && !(currentLine.compare(charNum + 1, 1, ";") == 0) && !(currentLine.compare(charNum + 1, 2, "::") == 0) ) appendSpaceAfter(); previousOperator = newHeader; continue; } } if (shouldPadParensOutside || shouldPadParensInside || shouldUnPadParens) { if (currentChar == '(') { int spacesOutsideToDelete = formattedLine.length() - 1; int spacesInsideToDelete = 0; // isInPotentialCalculation = true; // caused padding of * in pointers %%%%%%%%%%%% // compute spaces outside the opening paren to delete if (shouldUnPadParens) { char lastChar = ' '; prevIsParenHeader = false; size_t i = formattedLine.find_last_not_of(" \t"); if (i != string::npos) { spacesOutsideToDelete -= i; lastChar = formattedLine[i]; // was last word a paren header? int start; // start of the previous word for (start = i; start > 0; start--) { if (isLegalNameChar(formattedLine[start])) continue; start++; break; } // if previous word is a header, it will be a paren header const string *prevWord = ASBeautifier::findHeader(formattedLine, start, headers); if (prevWord != NULL || (formattedLine.compare(start, 6, "return") == 0 && !isLegalNameChar(formattedLine[6]))) { prevIsParenHeader = true; TRxtra(*prevWord); // trace macro } } // do not unpad operators, but leave them if already padded if (shouldPadParensOutside || prevIsParenHeader) spacesOutsideToDelete--; else if (lastChar == '|' // check for || || lastChar == '&' // check for && || lastChar == ',' || (lastChar == '>' && !foundCastOperator) || lastChar == '<' || lastChar == '?' || lastChar == ':' || lastChar == ';' || lastChar == '=' || lastChar == '+' || lastChar == '-' || (lastChar == '*' && isInPotentialCalculation) || lastChar == '/' || lastChar == '%') spacesOutsideToDelete--; if (spacesOutsideToDelete > 0) { formattedLine.erase(i + 1, spacesOutsideToDelete); spacePadNum -= spacesOutsideToDelete; } } // pad open paren outside char peekedCharOutside = peekNextChar(); if (shouldPadParensOutside) if (!(currentChar == '(' && peekedCharOutside == ')')) appendSpacePad(); appendCurrentChar(); // unpad open paren inside if (shouldUnPadParens) { size_t j = currentLine.find_first_not_of(" \t", charNum + 1); if (j != string::npos) spacesInsideToDelete = j - charNum - 1; if (shouldPadParensInside) spacesInsideToDelete--; if (spacesInsideToDelete > 0) { currentLine.erase(charNum + 1, spacesInsideToDelete); spacePadNum -= spacesInsideToDelete; } } // pad open paren inside char peekedCharInside = peekNextChar(); if (shouldPadParensInside) if (!(currentChar == '(' && peekedCharInside == ')')) appendSpaceAfter(); TRunpad('(', spacesOutsideToDelete, spacesInsideToDelete); // trace macro continue; } else if (currentChar == ')' /*|| currentChar == ']'*/) { int spacesOutsideToDelete = 0; int spacesInsideToDelete = formattedLine.length(); // unpad close paren inside if (shouldUnPadParens) { size_t i = formattedLine.find_last_not_of(" \t"); if (i != string::npos) spacesInsideToDelete = formattedLine.length() - 1 - i; if (shouldPadParensInside) spacesInsideToDelete--; if (spacesInsideToDelete > 0) { formattedLine.erase(i + 1, spacesInsideToDelete); spacePadNum -= spacesInsideToDelete; } } // pad close paren inside if (shouldPadParensInside) if (!(previousChar == '(' && currentChar == ')')) appendSpacePad(); appendCurrentChar(); // unpad close paren outside if (shouldUnPadParens) { // may have end of line comments size_t j = currentLine.find_first_not_of(" \t", charNum + 1); if (j != string::npos) if (currentLine[j] == '[' || currentLine[j] == ']') spacesOutsideToDelete = j - charNum - 1; if (shouldPadParensOutside) spacesOutsideToDelete--; // spacesOutsideToDelete--; // always leave 1 space if (spacesOutsideToDelete > 0) { currentLine.erase(charNum + 1, spacesOutsideToDelete); spacePadNum -= spacesOutsideToDelete; } } // pad close paren outside char peekedCharOutside = peekNextChar(); if (shouldPadParensOutside) if (peekedCharOutside != ';' && peekedCharOutside != ',' && peekedCharOutside != '.' && peekedCharOutside != '-') // check for -> // && !(currentChar == ']' && peekedCharOutside == '[')) appendSpaceAfter(); TRunpad(')', spacesInsideToDelete, 0 /*spacesOutsideToDelete*/); // trace macro continue; } } appendCurrentChar(); } // end of while loop * end of while loop * end of while loop * end of while loop // return a beautified (i.e. correctly indented) line. string beautifiedLine; int readyFormattedLineLength = trim(readyFormattedLine).length(); if (prependEmptyLine && readyFormattedLineLength > 0 && previousReadyFormattedLineLength > 0) { isLineReady = true; // signal that a readyFormattedLine is still waiting beautifiedLine = beautify(""); } else { isLineReady = false; beautifiedLine = beautify(readyFormattedLine); lineCommentNoBeautify = lineCommentNoIndent; lineCommentNoIndent = false; } prependEmptyLine = false; previousReadyFormattedLineLength = readyFormattedLineLength; enhance(beautifiedLine); // call the enhancer function return beautifiedLine; } /** * check if there are any indented lines ready to be read by nextLine() * * @return are there any indented lines ready? */ bool ASFormatter::hasMoreLines() const { return !endOfCodeReached; } /** * set the bracket formatting mode. * options: * astyle::NONE_MODE no formatting of brackets. * astyle::ATTACH_MODE Java, K&R style bracket placement. * astyle::BREAK_MODE ANSI C/C++ style bracket placement. * * @param mode the bracket formatting mode. */ void ASFormatter::setBracketFormatMode(BracketMode mode) { bracketFormatMode = mode; } /** * set closing header bracket breaking mode * options: * true brackets just before closing headers (e.g. 'else', 'catch') * will be broken, even if standard brackets are attached. * false closing header brackets will be treated as standard brackets. * * @param state the closing header bracket breaking mode. */ void ASFormatter::setBreakClosingHeaderBracketsMode(bool state) { shouldBreakClosingHeaderBrackets = state; } /** * set 'else if()' breaking mode * options: * true 'else' headers will be broken from their succeeding 'if' headers. * false 'else' headers will be attached to their succeeding 'if' headers. * * @param state the 'else if()' breaking mode. */ void ASFormatter::setBreakElseIfsMode(bool state) { shouldBreakElseIfs = state; } /** * set operator padding mode. * options: * true statement operators will be padded with spaces around them. * false statement operators will not be padded. * * @param state the padding mode. */ void ASFormatter::setOperatorPaddingMode(bool state) { shouldPadOperators = state; } /** * set parenthesis outside padding mode. * options: * true statement parenthesiss will be padded with spaces around them. * false statement parenthesiss will not be padded. * * @param state the padding mode. */ void ASFormatter::setParensOutsidePaddingMode(bool state) { shouldPadParensOutside = state; } /** * set parenthesis inside padding mode. * options: * true statement parenthesis will be padded with spaces around them. * false statement parenthesis will not be padded. * * @param state the padding mode. */ void ASFormatter::setParensInsidePaddingMode(bool state) { shouldPadParensInside = state; } /** * set parenthesis unpadding mode. * options: * true statement parenthesis will be unpadded with spaces removed around them. * false statement parenthesis will not be unpadded. * * @param state the padding mode. */ void ASFormatter::setParensUnPaddingMode(bool state) { shouldUnPadParens = state; } /** * set option to break/not break one-line blocks * * @param state true = break, false = don't break. */ void ASFormatter::setBreakOneLineBlocksMode(bool state) { shouldBreakOneLineBlocks = state; } /** * set option to break/not break lines consisting of multiple statements. * * @param state true = break, false = don't break. */ void ASFormatter::setSingleStatementsMode(bool state) { shouldBreakOneLineStatements = state; } /** * set option to convert tabs to spaces. * * @param state true = convert, false = don't convert. */ void ASFormatter::setTabSpaceConversionMode(bool state) { shouldConvertTabs = state; } /** * set option to break unrelated blocks of code with empty lines. * * @param state true = convert, false = don't convert. */ void ASFormatter::setBreakBlocksMode(bool state) { shouldBreakBlocks = state; } /** * set option to break closing header blocks of code (such as 'else', 'catch', ...) with empty lines. * * @param state true = convert, false = don't convert. */ void ASFormatter::setBreakClosingHeaderBlocksMode(bool state) { shouldBreakClosingHeaderBlocks = state; } /** * jump over several characters. * * @param i the number of characters to jump over. */ void ASFormatter::goForward(int i) { while (--i >= 0) getNextChar(); } /** * peek at the next unread character. * * @return the next unread character. */ char ASFormatter::peekNextChar() const { char ch = ' '; size_t peekNum = currentLine.find_first_not_of(" \t", charNum + 1); if (peekNum == string::npos) return ch; ch = currentLine[peekNum]; if (shouldConvertTabs && ch == '\t') ch = ' '; return ch; } /** * check if current placement is before a comment or line-comment * * @return is before a comment or line-comment. */ bool ASFormatter::isBeforeComment() const { bool foundComment = false; size_t peekNum = currentLine.find_first_not_of(" \t", charNum + 1); if (peekNum == string::npos) return foundComment; foundComment = (currentLine.compare(peekNum, 2, "/*") == 0 || currentLine.compare(peekNum, 2, "//") == 0); return foundComment; } /** * get the next character, increasing the current placement in the process. * the new character is inserted into the variable currentChar. * * @return whether succeded to recieve the new character. */ bool ASFormatter::getNextChar() { isInLineBreak = false; //// bool isAfterFormattedWhiteSpace = false; //// if (shouldPadOperators && !isInComment && !isInLineComment //// && !isInQuote && !doesLineStartComment && !isInPreprocessor //// && !isBeforeComment()) //// { //// int len = formattedLine.length(); //// if (len > 0 && isWhiteSpace(formattedLine[len-1])) //// isAfterFormattedWhiteSpace = true; //// } previousChar = currentChar; if (!isWhiteSpace(currentChar)) { previousNonWSChar = currentChar; if (!isInComment && !isInLineComment && !isInQuote && !isSequenceReached("/*") && !isSequenceReached("//")) previousCommandChar = previousNonWSChar; } int currentLineLength = currentLine.length(); if (charNum + 1 < currentLineLength && (!isWhiteSpace(peekNextChar()) || isInComment || isInLineComment)) { currentChar = currentLine[++charNum]; //// if (isAfterFormattedWhiteSpace) //// while (isWhiteSpace(currentChar) && charNum+1 < currentLineLength) //// currentChar = currentLine[++charNum]; if (shouldConvertTabs && currentChar == '\t') currentChar = ' '; return true; } else // end of line has been reached { if (sourceIterator->hasMoreLines()) { currentLine = sourceIterator->nextLine(); spacePadNum = 0; inLineNumber++; if (currentLine.length() == 0) { currentLine = string(" "); // a null is inserted if this is not done } // unless reading in the first line of the file, // break a new line. if (!isVirgin) isInLineBreak = true; else isVirgin = false; if (isInLineComment) isImmediatelyPostLineComment = true; isInLineComment = false; // check if is in preprocessor before line trimming if (previousNonWSChar != '\\') isInPreprocessor = false; trimNewLine(); currentChar = currentLine[charNum]; if (shouldConvertTabs && currentChar == '\t') currentChar = ' '; return true; } else { endOfCodeReached = true; return false; } } } /** * jump over the leading white space in the current line, * IF the line does not begin a comment or is in a preprocessor definition. */ void ASFormatter::trimNewLine() { int len = currentLine.length(); charNum = 0; if (isInComment || isInPreprocessor) return; while (isWhiteSpace(currentLine[charNum]) && charNum + 1 < len) ++charNum; doesLineStartComment = false; if (isSequenceReached("/*")) { charNum = 0; doesLineStartComment = true; } } /** * append a character to the current formatted line. * Unless disabled (via canBreakLine == false), first check if a * line-break has been registered, and if so break the * formatted line, and only then append the character into * the next formatted line. * * @param ch the character to append. * @param canBreakLine if true, a registered line-break */ void ASFormatter::appendChar(char ch, bool canBreakLine) { if (canBreakLine && isInLineBreak) breakLine(); formattedLine.append(1, ch); } /** * append a string sequence to the current formatted line. * Unless disabled (via canBreakLine == false), first check if a * line-break has been registered, and if so break the * formatted line, and only then append the sequence into * the next formatted line. * * @param sequence the sequence to append. * @param canBreakLine if true, a registered line-break */ void ASFormatter::appendSequence(const string &sequence, bool canBreakLine) { if (canBreakLine && isInLineBreak) breakLine(); formattedLine.append(sequence); } /** * append a space to the current formattedline, UNLESS the * last character is already a white-space character. */ void ASFormatter::appendSpacePad() { int len = formattedLine.length(); if (len > 0 && !isWhiteSpace(formattedLine[len-1])) { formattedLine.append(1, ' '); spacePadNum++; } } /** * append a space to the current formattedline, UNLESS the * next character is already a white-space character. */ void ASFormatter::appendSpaceAfter() { int len = currentLine.length(); if (charNum + 1 < len && !isWhiteSpace(currentLine[charNum+1])) { formattedLine.append(1, ' '); spacePadNum++; } } /** * register a line break for the formatted line. */ void ASFormatter::breakLine() { isLineReady = true; isInLineBreak = false; spacePadNum = 0; // queue an empty line prepend request if one exists prependEmptyLine = isPrependPostBlockEmptyLineRequested; readyFormattedLine = formattedLine; if (isAppendPostBlockEmptyLineRequested) { isAppendPostBlockEmptyLineRequested = false; isPrependPostBlockEmptyLineRequested = true; } else { isPrependPostBlockEmptyLineRequested = false; } formattedLine = ""; } /** * check if the currently reached open-bracket (i.e. '{') * opens a: * - a definition type block (such as a class or namespace), * - a command block (such as a method block) * - a static array * this method takes for granted that the current character * is an opening bracket. * * @return the type of the opened block. */ BracketType ASFormatter::getBracketType() const { BracketType returnVal; if (foundPreDefinitionHeader) returnVal = DEFINITION_TYPE; else { bool isCommandType; isCommandType = (foundPreCommandHeader || (currentHeader != NULL && isNonParenHeader) || (previousCommandChar == ')') || (previousCommandChar == ':' && !foundQuestionMark) || (previousCommandChar == ';') || ((previousCommandChar == '{' || previousCommandChar == '}') && isPreviousBracketBlockRelated)); returnVal = (isCommandType ? COMMAND_TYPE : ARRAY_TYPE); } if (isOneLineBlockReached()) returnVal = (BracketType)(returnVal | SINGLE_LINE_TYPE); return returnVal; } /** * check if the currently reached '*' or '&' character is * a pointer-or-reference symbol, or another operator. * this method takes for granted that the current character * is either a '*' or '&'. * * @return whether current character is a reference-or-pointer */ bool ASFormatter::isPointerOrReference() const { bool isPR; isPR = (!isInPotentialCalculation || IS_A(bracketTypeStack->back(), DEFINITION_TYPE) || (!isLegalNameChar(previousNonWSChar) && previousNonWSChar != ')' && previousNonWSChar != ']') ); if (!isPR) { char nextChar = peekNextChar(); isPR |= (!isWhiteSpace(nextChar) && nextChar != '-' && nextChar != '(' && nextChar != '[' && !isLegalNameChar(nextChar)); } return isPR; } /** * check if the currently reached '-' character is * a unary minus * this method takes for granted that the current character * is a '-'. * * @return whether the current '-' is a unary minus. */ bool ASFormatter::isUnaryMinus() const { return ((previousOperator == &AS_RETURN || !isalnum(previousCommandChar)) && previousCommandChar != '.' && previousCommandChar != ')' && previousCommandChar != ']'); } /** * check if the currently reached '-' or '+' character is * part of an exponent, i.e. 0.2E-5. * this method takes for granted that the current character * is a '-' or '+'. * * @return whether the current '-' is in an exponent. */ bool ASFormatter::isInExponent() const { int formattedLineLength = formattedLine.length(); if (formattedLineLength >= 2) { char prevPrevFormattedChar = formattedLine[formattedLineLength - 2]; char prevFormattedChar = formattedLine[formattedLineLength - 1]; return ((prevFormattedChar == 'e' || prevFormattedChar == 'E') && (prevPrevFormattedChar == '.' || isdigit(prevPrevFormattedChar))); } else return false; } /** * check if a one-line bracket has been reached, * i.e. if the currently reached '{' character is closed * with a complimentry '}' elsewhere on the current line, *. * @return has a one-line bracket been reached? */ bool ASFormatter::isOneLineBlockReached() const { bool isInComment = false; bool isInQuote = false; int bracketCount = 1; int currentLineLength = currentLine.length(); char quoteChar = ' '; for (int i = charNum + 1; i < currentLineLength; ++i) { char ch = currentLine[i]; if (isInComment) { if (currentLine.compare(i, 2, "*/") == 0) { isInComment = false; ++i; } continue; } if (ch == '\\') { ++i; continue; } if (isInQuote) { if (ch == quoteChar) isInQuote = false; continue; } if (ch == '"' || ch == '\'') { isInQuote = true; quoteChar = ch; continue; } if (currentLine.compare(i, 2, "//") == 0) break; if (currentLine.compare(i, 2, "/*") == 0) { isInComment = true; ++i; continue; } if (ch == '{') ++bracketCount; else if (ch == '}') --bracketCount; if (bracketCount == 0) return true; } return false; } /** * check if one of a set of headers has been reached in the * current position of the current line. * * @return a pointer to the found header. Or a NULL if no header has been reached. * @param headers a vector of headers. * @param checkBoundry */ const string *ASFormatter::findHeader(const vector &headers, bool checkBoundry) { return ASBeautifier::findHeader(currentLine, charNum, headers, checkBoundry); } /** * check if a line begins with the specified character * i.e. if the current line begins with a open bracket. * * @return true or false */ bool ASFormatter::lineBeginsWith(char charToCheck) const { bool beginsWith = false; size_t i = currentLine.find_first_not_of(" \t"); if (i != string::npos) if (currentLine[i] == charToCheck && (int) i == charNum) beginsWith = true; return beginsWith; } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/ASEnhancer.cpp0000644000175000017500000003037011362261064022235 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASEnhancer.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ // can trace only if _DEBUG is defined (Visual C) #ifdef _DEBUG // #define TRACEswitch // #define TRACEcase // #define TRACEmisc #endif #include "astyle.h" #include #include #include #ifdef TRACEswitch #define TRswitch(a,b) *traceOut << lineNumber << a << b << endl; #else #define TRswitch(a,b) ((void)0) #endif // TRACEswitch #ifdef TRACEcase #define TRcase(a,b) *traceOut << lineNumber << a << b << endl; #else #define TRcase(a,b) ((void)0) #endif // TRACEcase #ifdef TRACEmisc #define TRmisc(a) *traceOut << lineNumber << a << endl; #else #define TRmisc(a) ((void)0) #endif // TRACEmisc using namespace astyle; // ---------------------------- functions for ASEnhancer Class ------------------------------------- /** * ASEnhancer constructor */ ASEnhancer::ASEnhancer() { // variables are initialized by init() traceOut = new stringstream; } /** * Destructor of ASEnhancer * Display the TRACE entries. */ ASEnhancer::~ASEnhancer() { #if defined(TRACEswitch) || defined(TRACEcase) || defined(TRACEmisc) string line; string msg = "TRACE Entries\n\n"; char countLine[50]; int count = 0; while (getline(*traceOut, line)) { msg += line + '\n'; count++; } sprintf(countLine, "\n%d Entries", count); msg += countLine; // write a text file to "My Documents" (Windows) char filename [_MAX_PATH + _MAX_FNAME + _MAX_EXT + 1]; // full path and filename strcpy(filename, getenv("USERPROFILE")); strcat(filename, "\\My Documents\\trace.txt"); ofstream outfile(filename); outfile << msg; outfile.close(); #endif delete traceOut; } /** * initialize the ASEnhancer. * * init() is called each time an ASFormatter object is initialized. */ void ASEnhancer::init(int _indentLength, string _indentString, bool _isCStyle, bool _caseIndent) { // formatting variables from ASFormatter and ASBeautifier indentLength = _indentLength; if (_indentString.compare(0, 1, "\t") == 0) useTabs = true; else useTabs = false; isCStyle = _isCStyle; caseIndent = _caseIndent; // emptyLineFill = _emptyLineFill; // shouldPadOperators = _shouldPadOperators; // shouldPadParenthesies = _shouldPadParenthesies; // unindent variables lineNumber = 0; bracketCount = 0; isInComment = false; isInQuote = false; switchDepth = 0; lookingForCaseBracket = false; unindentNextLine = false; #if defined(TRACEswitch) || defined(TRACEcase) || defined(TRACEmisc) *traceOut << "New file -------------" << endl; #endif } /** * additional formatting for line of source code. * every line of source code in a source code file should be sent * one after the other to this function. * unindents the case blocks * * @param line the original formatted line will be updated if necessary. */ void ASEnhancer::enhance(string &line) { static vector swVector; // stack vector of switch variables static switchVariables sw; // switch variables struct bool isSpecialChar = false; size_t lineLength; // length of the line being parsed lineNumber++; lineLength = line.length(); if (lineLength == 0) return; // FIX ************************************** // remove whitespace added at the end of some comments and some preprocessor statements // problem when shouldPadOperators is used //if(isWhiteSpaceX(line[lineLength-1])) //{ // if((! emptyLineFill) || (line.find_first_not_of(" \t") != string::npos)) // { // size_t end = line.find_last_not_of(" \t"); // line.erase(end+1, lineLength); // lineLength = line.length(); // TRmisc (" trim line "); // } //} if (unindentNextLine) // test for unindent on attached brackets { sw.unindentDepth++; sw.unindentCase = true; unindentNextLine = false; TRcase(" unindent case ", sw.unindentDepth); } // parse characters in the current line. for (size_t i = 0; i < lineLength; i++) { char ch = line[i]; // bypass whitespace if (isWhiteSpaceX(ch)) continue; // handle special characters (i.e. backslash+character such as \n, \t, ...) if (isSpecialChar) { isSpecialChar = false; continue; } if (!(isInComment) && line.compare(i, 2, "\\\\") == 0) { i++; continue; } if (!(isInComment) && ch == '\\') { isSpecialChar = true; continue; } // handle quotes (such as 'x' and "Hello Dolly") if (!(isInComment) && (ch == '"' || ch == '\'')) if (!isInQuote) { quoteChar = ch; isInQuote = true; } else if (quoteChar == ch) { isInQuote = false; continue; } if (isInQuote) continue; // handle comments if (!(isInComment) && line.compare(i, 2, "//") == 0) { // check for windows line markers if (line.compare(i + 2, 1, "\xf0") > 0) lineNumber--; break; // finished with the line } else if (!(isInComment) && line.compare(i, 2, "/*") == 0) { isInComment = true; i++; continue; } else if ((isInComment) && line.compare(i, 2, "*/") == 0) { isInComment = false; i++; continue; } if (isInComment) continue; // if we have reached this far then we are NOT in a comment or string of special characters if (line[i] == '{') // if open bracket bracketCount++; if (line[i] == '}') // if close bracket bracketCount--; // FIX ************************************** // remove whitespace added at (-1) // problem when shouldPadOperators is used //if(line[i] == '(' && shouldPadOperators && ! shouldPadParenthesies) //{ // if(line[i+1] == ' ' && line[i+2] == '-') // { // line.erase(i+1, 1); // lineLength = line.length(); // TRmisc (" fix paren minus "); // } //} if (findHeaderX(line, i, "switch", true)) // if switch statement { switchDepth++; // bump switch depth TRswitch(" switch ", switchDepth); swVector.push_back(sw); // save current variables sw.switchBracketCount = 0; sw.unindentCase = false; // don't clear case until end of switch i += 5; // bypass switch statement continue; } // just want switch statements from this point if (caseIndent || switchDepth == 0) // from here just want switch statements continue; // get next char if (line[i] == '{') // if open bracket { sw.switchBracketCount++; if (lookingForCaseBracket) // if 1st after case statement { sw.unindentCase = true; // unindenting this case sw.unindentDepth++; // bump depth lookingForCaseBracket = false; // not looking now TRcase(" unindent case ", sw.unindentDepth); } continue; } lookingForCaseBracket = false; // no opening bracket, don't indent if (line[i] == '}') // if close bracket { sw.switchBracketCount--; if (sw.switchBracketCount == 0) // if end of switch statement { TRswitch(" endsw ", switchDepth); switchDepth--; // one less switch sw = swVector.back(); // restore sw struct swVector.pop_back(); // remove last entry from stack } continue; } // look for case or default header if (findHeaderX(line, i, "case", true) || findHeaderX(line, i, "default", true)) { if (sw.unindentCase) // if unindented last case { sw.unindentCase = false; // stop unindenting previous case sw.unindentDepth--; // reduct depth } for (; i < lineLength; i++) // bypass colon { if (line[i] == ':') break; } i++; for (; i < lineLength; i++) // bypass whitespace { if (!(isWhiteSpaceX(line[i]))) break; } if (i < lineLength) // check for bracket { if (line[i] == '{') // if bracket found { sw.switchBracketCount++; unindentNextLine = true; // start unindenting on next line continue; } } lookingForCaseBracket = true; // bracket must be on next line i--; // need to check for comments continue; } } // end of for loop if (sw.unindentDepth > 0) // if need to unindent unindentLine(line, sw.unindentDepth); // do it } /** * unindent a case line by a given number of tabsets * by erasing the leading whitespace from the line argument. * is inline to aid speed and is called from only one place. * * @param line a pointer to the line to unindent. * @param unindent the number of tabsets to erase. * @return the number of characters erased */ int ASEnhancer::unindentLine(string &line, int unindent) const { size_t charsToErase; // number of chars to erase size_t whitespace = line.find_first_not_of(" \t"); if (whitespace == string::npos) // if line is blank whitespace = line.length(); // must remove padding, if any if (whitespace == 0) return 0; if (line[0] == '\t') // if formatted with tabs { charsToErase = unindent; // indents to erase if (charsToErase <= whitespace) // if there is enough whitespace line.erase(0, charsToErase); // erase the tabs else charsToErase = 0; } else { charsToErase = unindent * indentLength; // compute chars to erase if (charsToErase <= whitespace) // if there is enough whitespace line.erase(0, charsToErase); // erase the spaces else charsToErase = 0; } return charsToErase; } /** * check if a specific line position contains a header, out of several possible headers. * * @return a pointer to the found header. if no header was found then return NULL. */ bool ASEnhancer::findHeaderX(const string &line, int i, const char *header, bool checkBoundry) const { if (line.compare(i, strlen(header), header) == 0) { // check that this is a header and not a part of a longer word // (e.g. not at its begining, not at its middle...) int lineLength = line.length(); int headerEnd = i + strlen(header); char startCh = header[0]; // first char of header char endCh = 0; // char just after header char prevCh = 0; // char just before header if (headerEnd < lineLength) { endCh = line[headerEnd]; } if (i > 0) { prevCh = line[i-1]; } if (!checkBoundry) { return true; } else if (prevCh != 0 && isLegalNameCharX(startCh) && isLegalNameCharX(prevCh)) { return false; } else if (headerEnd >= lineLength || !isLegalNameCharX(startCh) || !isLegalNameCharX(endCh)) { return true; } else { return false; } } return false; } qdevelop-v0.28/plugins/formatting-astyle/formatting-astyle.pro0000644000175000017500000000126411362261064023755 0ustar jlbrdjlbrdTARGET = formatting-astyle HEADERS = astyle.h \ astyleplugin.h \ astyledialogimpl.h SOURCES = ASBeautifier.cpp \ ASEnhancer.cpp \ ASFormatter.cpp \ ASResource.cpp \ astyle_main.cpp \ astyleplugin.cpp \ astyledialogimpl.cpp TRANSLATIONS = translations/AStyle_Russian.ts translations/AStyle_French.ts translations/AStyle_German.ts FORMS = astyle.ui CONFIG += release \ plugin DEPENDPATH = . INCLUDEPATH = . ../../src TEMPLATE = lib DESTDIR = ../../bin/plugins MOC_DIR = ../../build/moc UI_DIR = ../../build/ui macx { OBJECTS_DIR = ../../build/o/mac } unix { OBJECTS_DIR = ../../build/o/unix } win32 { OBJECTS_DIR = ../../build/o/win32 } qdevelop-v0.28/plugins/formatting-astyle/astyle.h0000644000175000017500000003475611362261064021250 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * astyle.h * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 ASTYLE_H #define ASTYLE_H #include #include #include using namespace std; // disable secure version deprecation warnings for .NET 2005 #ifdef _MSC_VER #pragma warning(disable: 4996) #endif namespace astyle { /* The enums below are not recognized by 'vectors' in Microsoft Visual C++ V5 when they are part of a namespace!!! Use Visual C++ V6 or higher. */ enum BracketMode { NONE_MODE, ATTACH_MODE, BREAK_MODE, BDAC_MODE }; enum BracketType { NULL_TYPE = 0, DEFINITION_TYPE = 1, COMMAND_TYPE = 2, ARRAY_TYPE = 4, SINGLE_LINE_TYPE = 8}; class ASSourceIterator { public: int eolWindows; int eolUnix; ASSourceIterator() { eolWindows = eolUnix = 0; } virtual ~ASSourceIterator() {} virtual bool hasMoreLines() const = 0; virtual string nextLine() = 0; }; class ASResource { public: void buildAssignmentOperators(vector &assignmentOperators); void buildCastOperators(vector &castOperators); void buildHeaders(vector &headers); void buildNonAssignmentOperators(vector &nonAssignmentOperators); void buildNonParenHeaders(vector &nonParenHeaders); void buildOperators(vector &operators); void buildPreBlockStatements(vector &preBlockStatements); void buildPreCommandHeaders(vector &preCommandHeaders); void buildPreDefinitionHeaders(vector &preDefinitionHeaders); public: static const string AS_IF, AS_ELSE; static const string AS_DO, AS_WHILE; static const string AS_FOR; static const string AS_SWITCH, AS_CASE, AS_DEFAULT; static const string AS_TRY, AS_CATCH, AS_THROWS, AS_FINALLY; static const string AS_PUBLIC, AS_PROTECTED, AS_PRIVATE; static const string AS_CLASS, AS_STRUCT, AS_UNION, AS_INTERFACE, AS_NAMESPACE, AS_EXTERN; static const string AS_STATIC; static const string AS_CONST; static const string AS_SYNCHRONIZED; static const string AS_OPERATOR, AS_TEMPLATE; static const string AS_OPEN_BRACKET, AS_CLOSE_BRACKET; static const string AS_OPEN_LINE_COMMENT, AS_OPEN_COMMENT, AS_CLOSE_COMMENT; static const string AS_BAR_DEFINE, AS_BAR_INCLUDE, AS_BAR_IF, AS_BAR_EL, AS_BAR_ENDIF; static const string AS_RETURN; static const string AS_ASSIGN, AS_PLUS_ASSIGN, AS_MINUS_ASSIGN, AS_MULT_ASSIGN; static const string AS_DIV_ASSIGN, AS_MOD_ASSIGN, AS_XOR_ASSIGN, AS_OR_ASSIGN, AS_AND_ASSIGN; static const string AS_GR_GR_ASSIGN, AS_LS_LS_ASSIGN, AS_GR_GR_GR_ASSIGN, AS_LS_LS_LS_ASSIGN; static const string AS_EQUAL, AS_PLUS_PLUS, AS_MINUS_MINUS, AS_NOT_EQUAL, AS_GR_EQUAL, AS_GR_GR_GR, AS_GR_GR; static const string AS_LS_EQUAL, AS_LS_LS_LS, AS_LS_LS, AS_ARROW, AS_AND, AS_OR; static const string AS_COLON_COLON, AS_PAREN_PAREN, AS_BLPAREN_BLPAREN; static const string AS_PLUS, AS_MINUS, AS_MULT, AS_DIV, AS_MOD, AS_GR, AS_LS; static const string AS_NOT, AS_BIT_XOR, AS_BIT_OR, AS_BIT_AND, AS_BIT_NOT; static const string AS_QUESTION, AS_COLON, AS_SEMICOLON, AS_COMMA; static const string AS_ASM; static const string AS_FOREACH, AS_LOCK, AS_UNSAFE, AS_FIXED; static const string AS_GET, AS_SET, AS_ADD, AS_REMOVE; static const string AS_CONST_CAST, AS_DYNAMIC_CAST, AS_REINTERPRET_CAST, AS_STATIC_CAST; }; class ASBeautifier : protected ASResource { public: ASBeautifier(); virtual ~ASBeautifier(); virtual void init(ASSourceIterator* iter); // pointer to dynamically created iterator. void init(); virtual bool hasMoreLines() const; virtual string nextLine(); virtual string beautify(const string &line); void setTabIndentation(int length = 4, bool forceTabs = false); void setSpaceIndentation(int length = 4); void setMaxInStatementIndentLength(int max); void setMinConditionalIndentLength(int min); void setClassIndent(bool state); void setSwitchIndent(bool state); void setCaseIndent(bool state); void setBracketIndent(bool state); void setBlockIndent(bool state); void setNamespaceIndent(bool state); void setLabelIndent(bool state); void setCStyle(); void setJavaStyle(); void setEmptyLineFill(bool state); void setPreprocessorIndent(bool state); int getIndentLength(void); string getIndentString(void); bool getCaseIndent(void); bool getCStyle(void); bool getEmptyLineFill(void); protected: int getNextProgramCharDistance(const string &line, int i); bool isLegalNameChar(char ch) const; const string *findHeader(const string &line, int i, const vector &possibleHeaders, bool checkBoundry = true); string trim(const string &str); int indexOf(vector &container, const string *element); bool lineCommentNoBeautify; int inLineNumber; // for debugging protected: // inline functions // check if a specific character is a whitespace character inline bool isWhiteSpace(char ch) const { return (ch == ' ' || ch == '\t'); } private: ASBeautifier(const ASBeautifier ©); void operator=(ASBeautifier&); // not to be implemented void initStatic(); void registerInStatementIndent(const string &line, int i, int spaceTabCount, int minIndent, bool updateParenStack); string preLineWS(int spaceTabCount, int tabCount); static vector headers; static vector nonParenHeaders; // static vector preprocessorHeaders; static vector preBlockStatements; static vector assignmentOperators; static vector nonAssignmentOperators; static bool calledInitStatic; ASSourceIterator *sourceIterator; vector *waitingBeautifierStack; vector *activeBeautifierStack; vector *waitingBeautifierStackLengthStack; vector *activeBeautifierStackLengthStack; vector *headerStack; vector< vector* > *tempStacks; vector *blockParenDepthStack; vector *blockStatementStack; vector *parenStatementStack; vector *inStatementIndentStack; vector *inStatementIndentStackSizeStack; vector *parenIndentStack; vector *bracketBlockStateStack; string indentString; const string *currentHeader; const string *previousLastLineHeader; const string *immediatelyPreviousAssignmentOp; const string *probationHeader; bool isInQuote; bool isInComment; bool isInCase; bool isInQuestion; bool isInStatement; bool isInHeader; bool isCStyle; bool isInOperator; bool isInTemplate; // bool isInConst; bool isInDefine; bool isInDefineDefinition; bool classIndent; bool isInClassHeader; bool isInClassHeaderTab; bool switchIndent; bool caseIndent; bool namespaceIndent; bool bracketIndent; bool blockIndent; bool labelIndent; bool preprocessorIndent; bool isInConditional; bool isMinimalConditinalIndentSet; bool shouldForceTabIndentation; int minConditionalIndent; int parenDepth; int indentLength; int blockTabCount; int leadingWhiteSpaces; int maxInStatementIndent; int templateDepth; char quoteChar; char prevNonSpaceCh; char currentNonSpaceCh; char currentNonLegalCh; char prevNonLegalCh; int prevFinalLineSpaceTabCount; int prevFinalLineTabCount; bool emptyLineFill; bool backslashEndsPrevLine; int defineTabCount; }; class ASEnhancer { public: // functions ASEnhancer(); ~ASEnhancer(); void init(int, string, bool, bool); void enhance(string &line); private: // set by init function int indentLength; bool useTabs; bool isCStyle; bool caseIndent; // bool emptyLineFill; // bool shouldPadOperators; // bool shouldPadParenthesies; // parsing variables int lineNumber; bool isInQuote; bool isInComment; char quoteChar; // unindent variables int bracketCount; int switchDepth; bool lookingForCaseBracket; bool unindentNextLine; // stringstream for trace stringstream *traceOut; private: // private functions bool findHeaderX(const string &line, int i, const char *header, bool checkBoundry = true) const; int unindentLine(string &line, int unindent) const; private: // struct used by ParseFormattedLine function // contains variables used to unindent the case blocks struct switchVariables { int switchBracketCount; int unindentDepth; bool unindentCase; switchVariables() { // constructor switchBracketCount = 0; unindentDepth = 0; unindentCase = false; } }; private: // inline functions // check if a specific character can be used in a legal variable/method/class name inline bool isLegalNameCharX(char ch) const { return (isalnum(ch) || ch == '.' || ch == '_' || (!isCStyle && ch == '$') || (isCStyle && ch == '~')); } // check if a specific character is a whitespace character inline bool isWhiteSpaceX(char ch) const { return (ch == ' ' || ch == '\t'); } }; class ASFormatter : public ASBeautifier, private ASEnhancer { public: ASFormatter(); virtual ~ASFormatter(); virtual void init(ASSourceIterator* iter); virtual bool hasMoreLines() const; virtual string nextLine(); void setBracketFormatMode(BracketMode mode); void setBreakClosingHeaderBracketsMode(bool state); void setOperatorPaddingMode(bool mode); void setParensOutsidePaddingMode(bool mode); void setParensInsidePaddingMode(bool mode); void setParensUnPaddingMode(bool state); void setBreakOneLineBlocksMode(bool state); void setSingleStatementsMode(bool state); void setTabSpaceConversionMode(bool state); void setBreakBlocksMode(bool state); void setBreakClosingHeaderBlocksMode(bool state); void setBreakElseIfsMode(bool state); private: void ASformatter(ASFormatter ©); // not to be imlpemented void operator=(ASFormatter&); // not to be implemented void staticInit(); void goForward(int i); bool getNextChar(); char peekNextChar() const; bool isBeforeComment() const; void trimNewLine(); BracketType getBracketType() const; bool isPointerOrReference() const; bool isUnaryMinus() const; bool isInExponent() const; bool isOneLineBlockReached() const; bool isNextCharWhiteSpace() const; // $$$$$$$$$$$$$$$$$$$$$ bool lineBeginsWith(char charToCheck) const; void appendChar(char ch, bool canBreakLine = true); void appendSequence(const string &sequence, bool canBreakLine = true); void appendSpacePad(); void appendSpaceAfter(); void breakLine(); const string *findHeader(const vector &headers, bool checkBoundry = true); static vector headers; static vector nonParenHeaders; // static vector preprocessorHeaders; static vector preDefinitionHeaders; static vector preCommandHeaders; static vector operators; static vector assignmentOperators; static vector castOperators; static bool calledInitStatic; ASSourceIterator *sourceIterator; vector *preBracketHeaderStack; vector *bracketTypeStack; vector *parenStack; string readyFormattedLine; string currentLine; string formattedLine; const string *currentHeader; const string *previousOperator; // used ONLY by pad=oper char currentChar; char previousChar; char previousNonWSChar; char previousCommandChar; char quoteChar; int charNum; int spacePadNum; BracketMode bracketFormatMode; bool isVirgin; bool shouldPadOperators; bool shouldPadParensOutside; bool shouldPadParensInside; bool shouldUnPadParens; bool shouldConvertTabs; bool isInLineComment; bool isInComment; bool isInPreprocessor; bool isInTemplate; // true both in template definitions (e.g. template) and template usage (e.g. F). bool doesLineStartComment; bool isInQuote; bool isInBlParen; bool isSpecialChar; bool isNonParenHeader; bool foundQuestionMark; bool foundPreDefinitionHeader; bool foundPreCommandHeader; bool foundCastOperator; bool isInLineBreak; bool isInClosingBracketLineBreak; bool endOfCodeReached; bool lineCommentNoIndent; bool isLineReady; bool isPreviousBracketBlockRelated; bool isInPotentialCalculation; bool shouldBreakOneLineBlocks; bool shouldReparseCurrentChar; bool shouldBreakOneLineStatements; bool shouldBreakLineAfterComments; bool shouldBreakClosingHeaderBrackets; bool shouldBreakElseIfs; bool passedSemicolon; bool passedColon; bool isImmediatelyPostComment; bool isImmediatelyPostLineComment; bool isImmediatelyPostEmptyBlock; bool shouldBreakBlocks; bool shouldBreakClosingHeaderBlocks; bool isPrependPostBlockEmptyLineRequested; bool isAppendPostBlockEmptyLineRequested; bool prependEmptyLine; bool foundClosingHeader; int previousReadyFormattedLineLength; bool isInHeader; bool isImmediatelyPostHeader; private: // inline functions // append the CURRENT character (curentChar)to the current formatted line. inline void appendCurrentChar(bool canBreakLine = true) { appendChar(currentChar, canBreakLine); } // check if a specific sequence exists in the current placement of the current line inline bool isSequenceReached(const char *sequence) const { return currentLine.compare(charNum, strlen(sequence), sequence) == 0; } }; } // end of namespace astyle #endif // closes ASTYLE_H qdevelop-v0.28/plugins/formatting-astyle/astyle_main.cpp0000644000175000017500000007430711362261064022603 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * astyle_main.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #include // for G++ implementation of string.compare: // compare((str), (place), (length)) instead of compare(place, length, str) #if defined(__GNUC__) && __GNUC__ < 3 #error - Use GNU C compiler release 3 or higher #endif // for namespace problem in version 5.0 #if defined(_MSC_VER) && _MSC_VER < 1200 // check for V6.0 #error - Use Microsoft compiler version 6 or higher #endif #ifdef _WIN32 #define STDCALL __stdcall #define EXPORT __declspec(dllexport) #else #define STDCALL #define EXPORT #endif #define IS_OPTION(arg,op) ((arg).compare(op)==0) #define IS_OPTIONS(arg,a,b) (IS_OPTION((arg),(a)) || IS_OPTION((arg),(b))) #define GET_PARAM(arg,op) ((arg).substr(strlen(op))) #define GET_PARAMS(arg,a,b) (isParamOption((arg),(a)) ? GET_PARAM((arg),(a)) : GET_PARAM((arg),(b))) using namespace astyle; const string _version = "1.19"; // some compilers want this declared bool parseOption(ASFormatter &formatter, const string &arg, const string &errorInfo); #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) // GUI function pointers typedef void (STDCALL *fpError)(int, char*); // pointer to callback error handler typedef char* (STDCALL *fpAlloc)(unsigned long); // pointer to callback memory allocation // GUI variables stringstream *_err = NULL; #else // console variables ostream *_err = &cerr; string _suffix = ".orig"; #endif bool _modeManuallySet; // typename will be istringstream for GUI and istream otherwise template class ASStreamIterator : public ASSourceIterator { public: ASStreamIterator(T *in); virtual ~ASStreamIterator(); bool hasMoreLines() const; string nextLine(); private: T * inStream; string buffer; }; template ASStreamIterator::ASStreamIterator(T *in) { inStream = in; buffer.reserve(200); } template ASStreamIterator::~ASStreamIterator() { // NEW operator has been removed // delete inStream; } template bool ASStreamIterator::hasMoreLines() const { return !inStream->eof(); } /** * read the input stream, delete any end of line characters, * and build a string that contains the input line. * * @return string containing the next input line minus any end of line characters */ template string ASStreamIterator::nextLine() { getline(*inStream, buffer); size_t lineLength = buffer.length(); if (lineLength > 0 && buffer[lineLength-1] == '\r') { eolWindows++; buffer.erase(lineLength - 1); } else eolUnix++; return string(buffer); } /* template string ASStreamIterator::nextLine() { char *srcPtr; char *filterPtr; inStream->getline(buffer, 2047); srcPtr = filterPtr = buffer; while (*srcPtr != 0) { if (*srcPtr != '\r') *filterPtr++ = *srcPtr; srcPtr++; } *filterPtr = 0; return string(buffer); } */ template bool parseOptions(ASFormatter &formatter, const ITER &optionsBegin, const ITER &optionsEnd, const string &errorInfo) { ITER option; bool ok = true; string arg, subArg; for (option = optionsBegin; option != optionsEnd; ++option) { arg = *option; if (arg.compare(0, 2, "--") == 0) ok &= parseOption(formatter, arg.substr(2), errorInfo); else if (arg[0] == '-') { size_t i; for (i = 1; i < arg.length(); ++i) { if (isalpha(arg[i]) && i > 1) { ok &= parseOption(formatter, subArg, errorInfo); subArg = ""; } subArg.append(1, arg[i]); } ok &= parseOption(formatter, subArg, errorInfo); subArg = ""; } else { ok &= parseOption(formatter, arg, errorInfo); subArg = ""; } } return ok; } bool isParamOption(const string &arg, const char *option) { bool retVal = arg.compare(0, strlen(option), option) == 0; // if comparing for short option, 2nd char of arg must be numeric if (retVal && strlen(option) == 1 && arg.length() > 1) if (!isdigit(arg[1])) retVal = false; return retVal; } bool isParamOption(const string &arg, const char *option1, const char *option2) { return isParamOption(arg, option1) || isParamOption(arg, option2); } void manuallySetJavaStyle(ASFormatter &formatter) { formatter.setJavaStyle(); _modeManuallySet = true; } void manuallySetCStyle(ASFormatter &formatter) { formatter.setCStyle(); _modeManuallySet = true; } bool parseOption(ASFormatter &formatter, const string &arg, const string &errorInfo) { if ( IS_OPTION(arg, "style=ansi") ) { formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(BREAK_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=gnu") ) { formatter.setBlockIndent(true); formatter.setSpaceIndentation(2); formatter.setBracketFormatMode(BREAK_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=java") ) { manuallySetJavaStyle(formatter); formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setSwitchIndent(false); } else if ( IS_OPTION(arg, "style=kr") ) { //manuallySetCStyle(formatter); formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=linux") ) { formatter.setBracketIndent(false); formatter.setSpaceIndentation(8); formatter.setBracketFormatMode(BDAC_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTIONS(arg, "c", "mode=c") ) { manuallySetCStyle(formatter); } else if ( IS_OPTIONS(arg, "j", "mode=java") ) { manuallySetJavaStyle(formatter); } else if ( isParamOption(arg, "t", "indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "t", "indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setTabIndentation(spaceNum, false); } else if ( isParamOption(arg, "T", "force-indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "T", "force-indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setTabIndentation(spaceNum, true); } else if ( IS_OPTION(arg, "indent=tab") ) { formatter.setTabIndentation(4); } else if ( isParamOption(arg, "s", "indent=spaces=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "s", "indent=spaces="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setSpaceIndentation(spaceNum); } else if ( IS_OPTION(arg, "indent=spaces") ) { formatter.setSpaceIndentation(4); } else if ( isParamOption(arg, "m", "min-conditional-indent=") ) { int minIndent = 8; string minIndentParam = GET_PARAMS(arg, "m", "min-conditional-indent="); if (minIndentParam.length() > 0) minIndent = atoi(minIndentParam.c_str()); if (minIndent > 40) (*_err) << "Error in param: " << arg << endl; else formatter.setMinConditionalIndentLength(minIndent); } else if ( isParamOption(arg, "M", "max-instatement-indent=") ) { int maxIndent = 40; string maxIndentParam = GET_PARAMS(arg, "M", "max-instatement-indent="); if (maxIndentParam.length() > 0) maxIndent = atoi(maxIndentParam.c_str()); if (maxIndent > 80) (*_err) << "Error in param: " << arg << endl; else formatter.setMaxInStatementIndentLength(maxIndent); } else if ( IS_OPTIONS(arg, "B", "indent-brackets") ) { formatter.setBracketIndent(true); } else if ( IS_OPTIONS(arg, "G", "indent-blocks") ) { formatter.setBlockIndent(true); } else if ( IS_OPTIONS(arg, "N", "indent-namespaces") ) { formatter.setNamespaceIndent(true); } else if ( IS_OPTIONS(arg, "C", "indent-classes") ) { formatter.setClassIndent(true); } else if ( IS_OPTIONS(arg, "S", "indent-switches") ) { formatter.setSwitchIndent(true); } else if ( IS_OPTIONS(arg, "K", "indent-cases") ) { formatter.setCaseIndent(true); } else if ( IS_OPTIONS(arg, "L", "indent-labels") ) { formatter.setLabelIndent(true); } else if ( IS_OPTION(arg, "brackets=break-closing-headers") ) { formatter.setBreakClosingHeaderBracketsMode(true); } else if ( IS_OPTIONS(arg, "b", "brackets=break") ) { formatter.setBracketFormatMode(BREAK_MODE); } else if ( IS_OPTIONS(arg, "a", "brackets=attach") ) { formatter.setBracketFormatMode(ATTACH_MODE); } else if ( IS_OPTIONS(arg, "l", "brackets=linux") ) { formatter.setBracketFormatMode(BDAC_MODE); } else if ( IS_OPTIONS(arg, "O", "one-line=keep-blocks") ) { formatter.setBreakOneLineBlocksMode(false); } else if ( IS_OPTIONS(arg, "o", "one-line=keep-statements") ) { formatter.setSingleStatementsMode(false); } else if ( IS_OPTIONS(arg, "P", "pad=paren") ) { formatter.setParensOutsidePaddingMode(true); formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "d", "pad=paren-out") ) { formatter.setParensOutsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "D", "pad=paren-in") ) { formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "U", "unpad=paren") ) { formatter.setParensUnPaddingMode(true); } else if ( IS_OPTIONS(arg, "p", "pad=oper") ) { formatter.setOperatorPaddingMode(true); } else if ( IS_OPTIONS(arg, "E", "fill-empty-lines") ) { formatter.setEmptyLineFill(true); } else if ( IS_OPTION(arg, "indent-preprocessor") ) { formatter.setPreprocessorIndent(true); } else if ( IS_OPTIONS(arg, "V", "convert-tabs") ) { formatter.setTabSpaceConversionMode(true); } else if ( IS_OPTION(arg, "break-blocks=all") ) { formatter.setBreakBlocksMode(true); formatter.setBreakClosingHeaderBlocksMode(true); } else if ( IS_OPTION(arg, "break-blocks") ) { formatter.setBreakBlocksMode(true); } else if ( IS_OPTION(arg, "break-elseifs") ) { formatter.setBreakElseIfsMode(true); } // Options used by GUI #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) else { if (_err->str().length() == 0) (*_err) << errorInfo << endl; (*_err) << endl << arg; return false; // unknown option } // Options used by console #else else if ( isParamOption(arg, "suffix=") ) { string suffixParam = GET_PARAM(arg, "suffix="); if (suffixParam.length() > 0) _suffix = suffixParam; } else if ( IS_OPTIONS(arg, "X", "errors-to-standard-output") ) { _err = &cout; } else if ( IS_OPTIONS(arg, "v", "version") ) { (*_err) << "Artistic Style " << _version << endl; exit(1); } else { (*_err) << errorInfo << arg << endl; return false; // unknown option } #endif // End of parseOption function return true; //o.k. } #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) // ************************* GUI functions ***************************************************** /* * IMPORTANT linker must have the command line parameter /EXPORT:AStyleMain=_AStyleMain@16 * For Dll only - "warning C4702: unreachable code" in the header * is caused by using the Optimization options . * /O2 Maximize speed * /Og Global optimizations * /Ob2 Any suitable inline expansion * This is a bug in the Microsoft compiler. The program runs over twice as fast * with the options set. There hasn't been any problem so far. */ extern "C" EXPORT char* STDCALL AStyleMain(char* lpTextIn, // pointer to the data to be formatted char* lpOptions, // pointer to AStyle options, separated by \n fpError fpErrorHandler, // pointer to error handler function fpAlloc fpMemoryAlloc) // pointer to memory allocation function { if (fpErrorHandler == NULL) return NULL; if (lpTextIn == NULL) { fpErrorHandler(101, "No pointer to text input.\n- File will not be formatted."); return NULL; } if (lpOptions == NULL) { fpErrorHandler(102, "No pointer to AStyle options.\n- File will not be formatted."); return NULL; } if (fpMemoryAlloc == NULL) { fpErrorHandler(103, "No pointer to memory allocation function.\n- File will not be formatted."); return NULL; } ASFormatter formatter; string arg; vector optionsVector; istringstream opt(lpOptions); _err = new stringstream; while (getline(opt, arg)) optionsVector.push_back(arg); parseOptions(formatter, optionsVector.begin(), optionsVector.end(), "Unknown Artistic Style options!"); if (_err->str().length() > 0) { (*_err) << "\n\n- These options will not be processed. "; fpErrorHandler(201, (char*) _err->str().c_str()); } delete _err; _err = NULL; istringstream in(lpTextIn); ASStreamIterator streamIterator(&in); ostringstream out; formatter.init(&streamIterator); while (formatter.hasMoreLines()) { out << formatter.nextLine(); if (streamIterator.eolWindows > streamIterator.eolUnix) out << '\r'; out << endl; } unsigned long textSizeOut = out.str().length(); char* textOut = fpMemoryAlloc(textSizeOut + 1); // call memory allocation function // textOut = NULL; // for testing if (textOut == NULL) { fpErrorHandler(110, "Allocation failure on Artistic Style output.\n- File will not be formatted."); return NULL; } strcpy(textOut, out.str().c_str()); return textOut; } #else void importOptions(istream &in, vector &optionsVector) { char ch; string currentToken; while (in) { currentToken = ""; do { in.get(ch); if (in.eof()) break; // treat '#' as line comments if (ch == '#') while (in) { in.get(ch); if (ch == '\n') break; } // break options on spaces, tabs or new-lines if (ch == ' ' || ch == '\t' || ch == '\n') break; else currentToken.append(1, ch); } while (in); if (currentToken.length() != 0) optionsVector.push_back(currentToken); } } bool stringEndsWith(const string &str, const string &suffix) { int strIndex = str.length() - 1; int suffixIndex = suffix.length() - 1; while (strIndex >= 0 && suffixIndex >= 0) { if (tolower(str[strIndex]) != tolower(suffix[suffixIndex])) return false; --strIndex; --suffixIndex; } return true; } void error(const char *why, const char* what) { (*_err) << why << ' ' << what << '\n' << endl; exit(1); } void printHelp() { (*_err) << endl; (*_err) << " Artistic Style " << _version.c_str() << endl; (*_err) << " by Tal Davidson\n"; (*_err) << " and Jim Pattee\n"; (*_err) << endl; (*_err) << "Usage : astyle [options] Source1.cpp Source2.cpp [...]\n"; (*_err) << " astyle [options] < Original > Beautified\n"; (*_err) << endl; (*_err) << "When indenting a specific file, the resulting indented file RETAINS the\n"; (*_err) << "original file-name. The original pre-indented file is renamed, with a\n"; (*_err) << "suffix of \".orig\" added to the original filename.\n"; (*_err) << endl; (*_err) << "By default, astyle is set up to indent C/C++/C# files, with 4 spaces per\n"; (*_err) << "indent, a maximal indentation of 40 spaces inside continuous statements,\n"; (*_err) << "and NO formatting.\n"; (*_err) << endl; (*_err) << "Option's Format:\n"; (*_err) << "----------------\n"; (*_err) << " Long options (starting with '--') must be written one at a time.\n"; (*_err) << " Short options (starting with '-') may be appended together.\n"; (*_err) << " Thus, -bps4 is the same as -b -p -s4.\n"; (*_err) << endl; (*_err) << "Predefined Style Options:\n"; (*_err) << "-------------------------\n"; (*_err) << " --style=ansi\n"; (*_err) << " ANSI style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=gnu\n"; (*_err) << " GNU style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=kr\n"; (*_err) << " Kernighan&Ritchie style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=linux\n"; (*_err) << " Linux mode (8 spaces per indent, break definition-block\n"; (*_err) << " brackets but attach command-block brackets).\n"; (*_err) << endl; (*_err) << " --style=java\n"; (*_err) << " Java mode, with standard java style formatting/indenting.\n"; (*_err) << endl; (*_err) << "Tab and Bracket Options:\n"; (*_err) << "------------------------\n"; (*_err) << " default indent option\n"; (*_err) << " If no indentation option is set,\n"; (*_err) << " the default option of 4 spaces will be used.\n"; (*_err) << endl; (*_err) << " --indent=spaces=# OR -s#\n"; (*_err) << " Indent using # spaces per indent. Not specifying #\n"; (*_err) << " will result in a default of 4 spaces per indent.\n"; (*_err) << endl; (*_err) << " --indent=tab OR --indent=tab=# OR -t OR -t#\n"; (*_err) << " Indent using tab characters, assuming that each\n"; (*_err) << " tab is # spaces long. Not specifying # will result\n"; (*_err) << " in a default assumption of 4 spaces per tab.\n"; (*_err) << endl; (*_err) << " --force-indent=tab=# OR -T#\n"; (*_err) << " Indent using tab characters, assuming that each\n"; (*_err) << " tab is # spaces long. Force tabs to be used in areas\n"; (*_err) << " Astyle would prefer to use spaces.\n"; (*_err) << endl; (*_err) << " default brackets option\n"; (*_err) << " If no brackets option is set,\n"; (*_err) << " the brackets will not be changed.\n"; (*_err) << endl; (*_err) << " --brackets=break OR -b\n"; (*_err) << " Break brackets from pre-block code (i.e. ANSI C/C++ style).\n"; (*_err) << endl; (*_err) << " --brackets=attach OR -a\n"; (*_err) << " Attach brackets to pre-block code (i.e. Java/K&R style).\n"; (*_err) << endl; (*_err) << " --brackets=linux OR -l\n"; (*_err) << " Break definition-block brackets and attach command-block\n"; (*_err) << " brackets.\n"; (*_err) << endl; (*_err) << " --brackets=break-closing-headers\n"; (*_err) << " Break brackets before closing headers (e.g. 'else', 'catch', ...).\n"; (*_err) << " Should be appended to --brackets=attach or --brackets=linux.\n"; (*_err) << endl; (*_err) << "Indentation options:\n"; (*_err) << "--------------------\n"; (*_err) << " --indent-classes OR -C\n"; (*_err) << " Indent 'class' blocks, so that the inner 'public:',\n"; (*_err) << " 'protected:' and 'private: headers are indented in\n"; (*_err) << " relation to the class block.\n"; (*_err) << endl; (*_err) << " --indent-switches OR -S\n"; (*_err) << " Indent 'switch' blocks, so that the inner 'case XXX:'\n"; (*_err) << " headers are indented in relation to the switch block.\n"; (*_err) << endl; (*_err) << " --indent-cases OR -K\n"; (*_err) << " Indent case blocks from the 'case XXX:' headers.\n"; (*_err) << " Case statements not enclosed in blocks are NOT indented.\n"; (*_err) << endl; (*_err) << " --indent-brackets OR -B\n"; (*_err) << " Add extra indentation to '{' and '}' block brackets.\n"; (*_err) << endl; (*_err) << " --indent-blocks OR -G\n"; (*_err) << " Add extra indentation entire blocks (including brackets).\n"; (*_err) << endl; (*_err) << " --indent-namespaces OR -N\n"; (*_err) << " Indent the contents of namespace blocks.\n"; (*_err) << endl; (*_err) << " --indent-labels OR -L\n"; (*_err) << " Indent labels so that they appear one indent less than\n"; (*_err) << " the current indentation level, rather than being\n"; (*_err) << " flushed completely to the left (which is the default).\n"; (*_err) << endl; (*_err) << " --indent-preprocessor\n"; (*_err) << " Indent multi-line #define statements.\n"; (*_err) << endl; (*_err) << " --max-instatement-indent=# OR -M#\n"; (*_err) << " Indent a maximal # spaces in a continuous statement,\n"; (*_err) << " relative to the previous line.\n"; (*_err) << endl; (*_err) << " --min-conditional-indent=# OR -m#\n"; (*_err) << " Indent a minimal # spaces in a continuous conditional\n"; (*_err) << " belonging to a conditional header.\n"; (*_err) << endl; (*_err) << "Formatting options:\n"; (*_err) << "-------------------\n"; (*_err) << " --break-blocks\n"; (*_err) << " Insert empty lines around unrelated blocks, labels, classes, ...\n"; (*_err) << endl; (*_err) << " --break-blocks=all\n"; (*_err) << " Like --break-blocks, except also insert empty lines \n"; (*_err) << " around closing headers (e.g. 'else', 'catch', ...).\n"; (*_err) << endl; (*_err) << " --break-elseifs\n"; (*_err) << " Break 'else if()' statements into two different lines.\n"; (*_err) << endl; (*_err) << " --pad=oper OR -p\n"; (*_err) << " Insert space paddings around operators.\n"; (*_err) << endl; (*_err) << " --pad=paren OR -P\n"; (*_err) << " Insert space padding around parenthesis on both the outside\n"; (*_err) << " and the inside.\n"; (*_err) << endl; (*_err) << " --pad=paren-out OR -d\n"; (*_err) << " Insert space padding around parenthesis on the outside only.\n"; (*_err) << endl; (*_err) << " --pad=paren-in OR -D\n"; (*_err) << " Insert space padding around parenthesis on the inside only.\n"; (*_err) << endl; (*_err) << " --unpad=paren OR -U\n"; (*_err) << " Remove unnecessary space padding around parenthesis. This\n"; (*_err) << " can be used in combination with the 'pad' options above.\n"; (*_err) << endl; (*_err) << " --one-line=keep-statements OR -o\n"; (*_err) << " Don't break lines containing multiple statements into\n"; (*_err) << " multiple single-statement lines.\n"; (*_err) << endl; (*_err) << " --one-line=keep-blocks OR -O\n"; (*_err) << " Don't break blocks residing completely on one line.\n"; (*_err) << endl; (*_err) << " --convert-tabs OR -V\n"; (*_err) << " Convert tabs to spaces.\n"; (*_err) << endl; (*_err) << " --fill-empty-lines OR -E\n"; (*_err) << " Fill empty lines with the white space of their\n"; (*_err) << " previous lines.\n"; (*_err) << endl; (*_err) << " --mode=c OR -c\n"; (*_err) << " Indent a C, C++ or C# source file (this is the default).\n"; (*_err) << endl; (*_err) << " --mode=java OR -j\n"; (*_err) << " Indent a Java(TM) source file.\n"; (*_err) << endl; (*_err) << "Other options:\n"; (*_err) << "--------------\n"; (*_err) << " --suffix=####\n"; (*_err) << " Append the suffix #### instead of '.orig' to original filename.\n"; (*_err) << endl; (*_err) << " --options=####\n"; (*_err) << " Specify an options file #### to read and use.\n"; (*_err) << endl; (*_err) << " --options=none\n"; (*_err) << " Disable the default options file.\n"; (*_err) << " Only the command-line parameters will be used.\n"; (*_err) << endl; (*_err) << " --errors-to-standard-output OR -X\n"; (*_err) << " Print errors and help information to standard-output rather than\n"; (*_err) << " to standard-error.\n"; (*_err) << endl; (*_err) << " --version OR -v\n"; (*_err) << " Print version number.\n"; (*_err) << endl; (*_err) << " --help OR -h OR -?\n"; (*_err) << " Print this help message.\n"; (*_err) << endl; (*_err) << "Default options file:\n"; (*_err) << "---------------------\n"; (*_err) << " Artistic Style looks for a default options file in the\n"; (*_err) << " following order:\n"; (*_err) << " 1. The contents of the ARTISTIC_STYLE_OPTIONS environment\n"; (*_err) << " variable if it exists.\n"; (*_err) << " 2. The file called .astylerc in the directory pointed to by the\n"; (*_err) << " HOME environment variable ( i.e. $HOME/.astylerc ).\n"; (*_err) << " 3. The file called astylerc in the directory pointed to by the\n"; (*_err) << " USERPROFILE environment variable ( i.e. %USERPROFILE%\\astylerc ).\n"; (*_err) << " If a default options file is found, the options in this file\n"; (*_err) << " will be parsed BEFORE the command-line options.\n"; (*_err) << " Long options within the default option file may be written without\n"; (*_err) << " the preliminary '--'.\n"; (*_err) << endl; } //int main(int argc, char *argv[]) int AStyle_plugin_main(int argc, char *argv[]) { ASFormatter formatter; vector fileNameVector; vector optionsVector; string optionsFileName = ""; string arg; bool ok = true; bool shouldPrintHelp = false; bool shouldParseOptionsFile = true; _err = &cerr; _suffix = ".orig"; _modeManuallySet = false; //(*_err) << "\nArtistic Style " << _version << endl; // begin formatting // manage flags for (int i = 1; i < argc; i++) { arg = string(argv[i]); if ( IS_OPTION(arg, "--options=none") ) { shouldParseOptionsFile = false; } else if ( isParamOption(arg, "--options=") ) { optionsFileName = GET_PARAM(arg, "--options="); } else if ( IS_OPTION(arg, "-h") || IS_OPTION(arg, "--help") || IS_OPTION(arg, "-?") ) { shouldPrintHelp = true; } else if (arg[0] == '-') { optionsVector.push_back(arg); } else // file-name { fileNameVector.push_back(arg); } } // parse options file if (shouldParseOptionsFile) { if (optionsFileName.compare("") == 0) { char* env = getenv("ARTISTIC_STYLE_OPTIONS"); if (env != NULL) optionsFileName = string(env); } if (optionsFileName.compare("") == 0) { char* env = getenv("HOME"); if (env != NULL) optionsFileName = string(env) + string("/.astylerc"); } if (optionsFileName.compare("") == 0) { char* env = getenv("USERPROFILE"); if (env != NULL) optionsFileName = string(env) + string("/astylerc"); } if (optionsFileName.compare("") != 0) { ifstream optionsIn(optionsFileName.c_str()); if (optionsIn) { (*_err) << "Using default options file " << optionsFileName << endl; vector fileOptionsVector; importOptions(optionsIn, fileOptionsVector); ok = parseOptions(formatter, fileOptionsVector.begin(), fileOptionsVector.end(), string("Unknown option in default options file: ")); } optionsIn.close(); if (!ok) { (*_err) << "For help on options, type 'astyle -h' " << endl; } } } // parse options from command line ok = parseOptions(formatter, optionsVector.begin(), optionsVector.end(), string("Unknown command line option: ")); if (!ok) { (*_err) << "For help on options, type 'astyle -h' \n" << endl; exit(1); } if (shouldPrintHelp) { printHelp(); exit(1); } // if no files have been given, use cin for input and cout for output if (fileNameVector.empty()) { // display file formatting message (*_err) << "formatting cin\n" << endl; ASStreamIterator streamIterator(&cin); formatter.init(&streamIterator); while (formatter.hasMoreLines()) { cout << formatter.nextLine(); if (formatter.hasMoreLines()) cout << endl; } cout.flush(); } else { // indent the given files for (size_t i = 0; i < fileNameVector.size(); i++) { string originalFileName = fileNameVector[i]; string inFileName = originalFileName + _suffix; remove(inFileName.c_str()); // check if the file is present before rename ifstream inCheck(originalFileName.c_str()); if (!inCheck) error("Could not open input file", originalFileName.c_str()); else inCheck.close(); if (rename(originalFileName.c_str(), inFileName.c_str()) < 0) error("Could not rename ", string(originalFileName + " to " + inFileName).c_str()); ifstream in(inFileName.c_str()); if (!in) error("Could not open input file", inFileName.c_str()); ofstream out(originalFileName.c_str()); if (!out) error("Could not open output file", originalFileName.c_str()); // Unless a specific language mode has been, set the language mode // according to the file's suffix. if (!_modeManuallySet) { if (stringEndsWith(originalFileName, string(".java"))) { formatter.setJavaStyle(); } else { formatter.setCStyle(); } } // display file formatting message //(*_err) << "formatting " << originalFileName.c_str() << endl; ASStreamIterator streamIterator(&in); formatter.init(&streamIterator); while (formatter.hasMoreLines()) { out << formatter.nextLine(); if (formatter.hasMoreLines()) { if (streamIterator.eolWindows > streamIterator.eolUnix) out << '\r'; out << endl; } } out.flush(); out.close(); in.close(); } (*_err) << endl; // all files formatted } return 0; } #endif // ************************* end of console functions ***************************************** qdevelop-v0.28/plugins/formatting-astyle/astyleplugin.h0000644000175000017500000000272311362261064022454 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef ASTYLEPLUGIN_H #define ASTYLEPLUGIN_H #include #include #include #include #include class AStylePlugin : public QObject, public TextEditInterface { Q_OBJECT Q_INTERFACES(TextEditInterface) public: AStylePlugin() : translator(0) {} QString menuName() const; QString text(QString text, QString selectedText, QTextCodec *codec); TextEditInterface::Action action() const; bool hasConfigDialog() const; void config(); private: mutable QTranslator * translator; }; #endif qdevelop-v0.28/plugins/formatting-astyle/ASBeautifier.cpp0000644000175000017500000014022511362261064022572 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASBeautifier.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } #define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container); } namespace astyle { bool ASBeautifier::calledInitStatic = false; vector ASBeautifier::headers; vector ASBeautifier::nonParenHeaders; vector ASBeautifier::preBlockStatements; vector ASBeautifier::assignmentOperators; vector ASBeautifier::nonAssignmentOperators; /* * initialize the static vars */ void ASBeautifier::initStatic() { if (calledInitStatic) return; calledInitStatic = true; ASResource::buildHeaders(headers); ASResource::buildNonParenHeaders(nonParenHeaders); ASResource::buildAssignmentOperators(assignmentOperators); ASResource::buildNonAssignmentOperators(nonAssignmentOperators); ASResource::buildPreBlockStatements(preBlockStatements); } /** * ASBeautifier's constructor */ ASBeautifier::ASBeautifier() { initStatic(); waitingBeautifierStack = NULL; activeBeautifierStack = NULL; waitingBeautifierStackLengthStack = NULL; activeBeautifierStackLengthStack = NULL; headerStack = NULL; tempStacks = NULL; blockParenDepthStack = NULL; blockStatementStack = NULL; parenStatementStack = NULL; bracketBlockStateStack = NULL; inStatementIndentStack = NULL; inStatementIndentStackSizeStack = NULL; parenIndentStack = NULL; sourceIterator = NULL; isMinimalConditinalIndentSet = false; shouldForceTabIndentation = false; setSpaceIndentation(4); setMaxInStatementIndentLength(40); setClassIndent(false); setSwitchIndent(false); setCaseIndent(false); setBlockIndent(false); setBracketIndent(false); setNamespaceIndent(false); setLabelIndent(false); setEmptyLineFill(false); setCStyle(); setPreprocessorIndent(false); } ASBeautifier::ASBeautifier(const ASBeautifier &other) { waitingBeautifierStack = NULL; activeBeautifierStack = NULL; waitingBeautifierStackLengthStack = NULL; activeBeautifierStackLengthStack = NULL; headerStack = new vector; *headerStack = *other.headerStack; tempStacks = new vector< vector* >; vector< vector* >::iterator iter; for (iter = other.tempStacks->begin(); iter != other.tempStacks->end(); ++iter) { vector *newVec = new vector; *newVec = **iter; tempStacks->push_back(newVec); } blockParenDepthStack = new vector; *blockParenDepthStack = *other.blockParenDepthStack; blockStatementStack = new vector; *blockStatementStack = *other.blockStatementStack; parenStatementStack = new vector; *parenStatementStack = *other.parenStatementStack; bracketBlockStateStack = new vector; *bracketBlockStateStack = *other.bracketBlockStateStack; inStatementIndentStack = new vector; *inStatementIndentStack = *other.inStatementIndentStack; inStatementIndentStackSizeStack = new vector; *inStatementIndentStackSizeStack = *other.inStatementIndentStackSizeStack; parenIndentStack = new vector; *parenIndentStack = *other.parenIndentStack; sourceIterator = other.sourceIterator; lineCommentNoBeautify = other.lineCommentNoBeautify; inLineNumber = other.inLineNumber; indentString = other.indentString; currentHeader = other.currentHeader; previousLastLineHeader = other.previousLastLineHeader; immediatelyPreviousAssignmentOp = other.immediatelyPreviousAssignmentOp; probationHeader = other.probationHeader; isInQuote = other.isInQuote; isInComment = other.isInComment; isInCase = other.isInCase; isInQuestion = other.isInQuestion; isInStatement = other.isInStatement; isInHeader = other.isInHeader; isCStyle = other.isCStyle; isInOperator = other.isInOperator; isInTemplate = other.isInTemplate; // isInConst = other.isInConst; isInDefine = other.isInDefine; isInDefineDefinition = other.isInDefineDefinition; classIndent = other.classIndent; isInClassHeader = other.isInClassHeader; isInClassHeaderTab = other.isInClassHeaderTab; switchIndent = other.switchIndent; caseIndent = other.caseIndent; namespaceIndent = other.namespaceIndent; bracketIndent = other.bracketIndent; blockIndent = other.blockIndent; labelIndent = other.labelIndent; preprocessorIndent = other.preprocessorIndent; isInConditional = other.isInConditional; isMinimalConditinalIndentSet = other.isMinimalConditinalIndentSet; shouldForceTabIndentation = other.shouldForceTabIndentation; minConditionalIndent = other.minConditionalIndent; parenDepth = other.parenDepth; indentLength = other.indentLength; blockTabCount = other.blockTabCount; leadingWhiteSpaces = other.leadingWhiteSpaces; maxInStatementIndent = other.maxInStatementIndent; templateDepth = other.templateDepth; quoteChar = other.quoteChar; prevNonSpaceCh = other.prevNonSpaceCh; currentNonSpaceCh = other.currentNonSpaceCh; currentNonLegalCh = other.currentNonLegalCh; prevNonLegalCh = other.prevNonLegalCh; prevFinalLineSpaceTabCount = other.prevFinalLineSpaceTabCount; prevFinalLineTabCount = other.prevFinalLineTabCount; emptyLineFill = other.emptyLineFill; backslashEndsPrevLine = other.backslashEndsPrevLine; defineTabCount = other.defineTabCount; } /** * ASBeautifier's destructor */ ASBeautifier::~ASBeautifier() { DELETE_CONTAINER(headerStack); DELETE_CONTAINER(tempStacks); DELETE_CONTAINER(blockParenDepthStack); DELETE_CONTAINER(blockStatementStack); DELETE_CONTAINER(parenStatementStack); DELETE_CONTAINER(bracketBlockStateStack); DELETE_CONTAINER(inStatementIndentStack); DELETE_CONTAINER(inStatementIndentStackSizeStack); DELETE_CONTAINER(parenIndentStack); //DELETE_CONTAINER( sourceIterator ); } /** * initialize the ASBeautifier. * * init() should be called every time a ABeautifier object is to start * beautifying a NEW source file. * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object * that will be used to iterate through the source code. This object will be * deleted during the ASBeautifier's destruction, and thus should not be * deleted elsewhere. * * @param iter a pointer to the DYNAMICALLY CREATED ASSourceIterator object. */ void ASBeautifier::init(ASSourceIterator *iter) { sourceIterator = iter; init(); } /** * initialize the ASBeautifier. */ void ASBeautifier::init() { INIT_CONTAINER(waitingBeautifierStack, new vector); INIT_CONTAINER(activeBeautifierStack, new vector); INIT_CONTAINER(waitingBeautifierStackLengthStack, new vector); INIT_CONTAINER(activeBeautifierStackLengthStack, new vector); INIT_CONTAINER(headerStack, new vector); INIT_CONTAINER(tempStacks, new vector*>); tempStacks->push_back(new vector); INIT_CONTAINER(blockParenDepthStack, new vector); INIT_CONTAINER(blockStatementStack, new vector); INIT_CONTAINER(parenStatementStack, new vector); INIT_CONTAINER(bracketBlockStateStack, new vector); bracketBlockStateStack->push_back(true); INIT_CONTAINER(inStatementIndentStack, new vector); INIT_CONTAINER(inStatementIndentStackSizeStack, new vector); inStatementIndentStackSizeStack->push_back(0); INIT_CONTAINER(parenIndentStack, new vector); immediatelyPreviousAssignmentOp = NULL; previousLastLineHeader = NULL; isInQuote = false; isInComment = false; isInStatement = false; isInCase = false; isInQuestion = false; isInClassHeader = false; isInClassHeaderTab = false; isInHeader = false; isInOperator = false; isInTemplate = false; // isInConst = false; isInConditional = false; templateDepth = 0; parenDepth = 0; blockTabCount = 0; leadingWhiteSpaces = 0; prevNonSpaceCh = '{'; currentNonSpaceCh = '{'; prevNonLegalCh = '{'; currentNonLegalCh = '{'; prevFinalLineSpaceTabCount = 0; prevFinalLineTabCount = 0; probationHeader = NULL; backslashEndsPrevLine = false; isInDefine = false; isInDefineDefinition = false; defineTabCount = 0; } /** * set indentation style to ANSI C/C++. */ void ASBeautifier::setCStyle() { isCStyle = true; } /** * set indentation style to Java / K&R. */ void ASBeautifier::setJavaStyle() { isCStyle = false; } /** * indent using one tab per indentation */ void ASBeautifier::setTabIndentation(int length, bool forceTabs) { indentString = "\t"; indentLength = length; shouldForceTabIndentation = forceTabs; if (!isMinimalConditinalIndentSet) minConditionalIndent = indentLength * 2; } /** * indent using a number of spaces per indentation. * * @param length number of spaces per indent. */ void ASBeautifier::setSpaceIndentation(int length) { indentString = string(length, ' '); indentLength = length; if (!isMinimalConditinalIndentSet) minConditionalIndent = indentLength * 2; } /** * set the maximum indentation between two lines in a multi-line statement. * * @param max maximum indentation length. */ void ASBeautifier::setMaxInStatementIndentLength(int max) { maxInStatementIndent = max; } /** * set the minimum indentation between two lines in a multi-line condition. * * @param min minimal indentation length. */ void ASBeautifier::setMinConditionalIndentLength(int min) { minConditionalIndent = min; isMinimalConditinalIndentSet = true; } /** * set the state of the bracket indentation option. If true, brackets will * be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setBracketIndent(bool state) { bracketIndent = state; } /** * set the state of the block indentation option. If true, entire blocks * will be indented one additional indent, similar to the GNU indent style. * * @param state state of option. */ void ASBeautifier::setBlockIndent(bool state) { if (state) setBracketIndent(false); // so that we don't have both bracket and block indent blockIndent = state; } /** * set the state of the class indentation option. If true, C++ class * definitions will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setClassIndent(bool state) { classIndent = state; } /** * set the state of the switch indentation option. If true, blocks of 'switch' * statements will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setSwitchIndent(bool state) { switchIndent = state; } /** * set the state of the case indentation option. If true, lines of 'case' * statements will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setCaseIndent(bool state) { caseIndent = state; } /** * set the state of the namespace indentation option. * If true, blocks of 'namespace' statements will be indented one * additional indent. Otherwise, NO indentation will be added. * * @param state state of option. */ void ASBeautifier::setNamespaceIndent(bool state) { namespaceIndent = state; } /** * set the state of the label indentation option. * If true, labels will be indented one indent LESS than the * current indentation level. * If false, labels will be flushed to the left with NO * indent at all. * * @param state state of option. */ void ASBeautifier::setLabelIndent(bool state) { labelIndent = state; } /** * set the state of the preprocessor indentation option. * If true, multiline #define statements will be indented. * * @param state state of option. */ void ASBeautifier::setPreprocessorIndent(bool state) { preprocessorIndent = state; } /** * set the state of the empty line fill option. * If true, empty lines will be filled with the whitespace. * of their previous lines. * If false, these lines will remain empty. * * @param state state of option. */ void ASBeautifier::setEmptyLineFill(bool state) { emptyLineFill = state; } /** * get the number of spaces per indent * * @return value of indentLength option. */ int ASBeautifier::getIndentLength(void) { return indentLength; } /** * get the char used for indentation, space or tab * * @return the char used for indentation. */ string ASBeautifier::getIndentString(void) { return indentString; } /** * get the state of the case indentation option. If true, lines of 'case' * statements will be indented one additional indent. * * @return state of caseIndent option. */ bool ASBeautifier::getCaseIndent(void) { return caseIndent; } /** * get C style identifier. * If true, a C source is being indented. * If false, a Java source is being indented. * * @return state of emptyLineFill option. */ bool ASBeautifier::getCStyle(void) { return isCStyle; } /** * get the state of the empty line fill option. * If true, empty lines will be filled with the whitespace. * of their previous lines. * If false, these lines will remain empty. * * @return state of emptyLineFill option. */ bool ASBeautifier::getEmptyLineFill(void) { return emptyLineFill; } /** * check if there are any indented lines ready to be read by nextLine() * * @return are there any indented lines ready? */ bool ASBeautifier::hasMoreLines() const { return sourceIterator->hasMoreLines(); } /** * get the next indented line. * * @return indented line. */ string ASBeautifier::nextLine() { return beautify(sourceIterator->nextLine()); } /** * beautify a line of source code. * every line of source code in a source code file should be sent * one after the other to the beautify method. * * @return the indented line. * @param originalLine the original unindented line. */ string ASBeautifier::beautify(const string &originalLine) { string line; bool isInLineComment = false; bool lineStartsInComment = false; bool isInClass = false; bool isInSwitch = false; bool isImmediatelyAfterConst = false; bool isSpecialChar = false; char ch = ' '; char prevCh; string outBuffer; // the newly idented line is bufferd here int tabCount = 0; const string *lastLineHeader = NULL; bool closingBracketReached = false; int spaceTabCount = 0; char tempCh; int headerStackSize = headerStack->size(); //bool isLineInStatement = isInStatement; bool shouldIndentBrackettedLine = true; int lineOpeningBlocksNum = 0; int lineClosingBlocksNum = 0; bool previousLineProbation = (probationHeader != NULL); int i; currentHeader = NULL; lineStartsInComment = isInComment; // handle and remove white spaces around the line: // If not in comment, first find out size of white space before line, // so that possible comments starting in the line continue in // relation to the preliminary white-space. if (!isInComment) { int strlen = originalLine.length(); leadingWhiteSpaces = 0; while (leadingWhiteSpaces < strlen && isWhiteSpace(originalLine[leadingWhiteSpaces])) leadingWhiteSpaces++; line = trim(originalLine); } else { // trim the comment leaving the new leading whitespace int strlen = originalLine.length(); int trimSize = 0; while (trimSize < strlen && trimSize < leadingWhiteSpaces && isWhiteSpace(originalLine[trimSize])) trimSize++; while (trimSize < strlen && isWhiteSpace(originalLine[strlen-1])) strlen--; line = originalLine.substr(trimSize, strlen); } if (line.length() == 0) { if (emptyLineFill) return preLineWS(prevFinalLineSpaceTabCount, prevFinalLineTabCount); else return line; } // handle preprocessor commands if (isCStyle && !isInComment && (line[0] == '#' || backslashEndsPrevLine)) { if (line[0] == '#') { string preproc = trim(string(line.c_str() + 1)); // When finding a multi-lined #define statement, the original beautifier // 1. sets its isInDefineDefinition flag // 2. clones a new beautifier that will be used for the actual indentation // of the #define. This clone is put into the activeBeautifierStack in order // to be called for the actual indentation. // The original beautifier will have isInDefineDefinition = true, isInDefine = false // The cloned beautifier will have isInDefineDefinition = true, isInDefine = true if (preprocessorIndent && preproc.compare(0, 6, "define") == 0 && line[line.length() - 1] == '\\') { if (!isInDefineDefinition) { ASBeautifier *defineBeautifier; // this is the original beautifier isInDefineDefinition = true; // push a new beautifier into the active stack // this breautifier will be used for the indentation of this define defineBeautifier = new ASBeautifier(*this); activeBeautifierStack->push_back(defineBeautifier); } else { // the is the cloned beautifier that is in charge of indenting the #define. isInDefine = true; } } else if (preproc.compare(0, 2, "if") == 0) { // push a new beautifier into the stack waitingBeautifierStackLengthStack->push_back(waitingBeautifierStack->size()); activeBeautifierStackLengthStack->push_back(activeBeautifierStack->size()); waitingBeautifierStack->push_back(new ASBeautifier(*this)); } else if (preproc.compare(0, 4/*2*/, "else") == 0) { if (!waitingBeautifierStack->empty()) { // MOVE current waiting beautifier to active stack. activeBeautifierStack->push_back(waitingBeautifierStack->back()); waitingBeautifierStack->pop_back(); } } else if (preproc.compare(0, 4, "elif") == 0) { if (!waitingBeautifierStack->empty()) { // append a COPY current waiting beautifier to active stack, WITHOUT deleting the original. activeBeautifierStack->push_back(new ASBeautifier(*(waitingBeautifierStack->back()))); } } else if (preproc.compare(0, 5, "endif") == 0) { int stackLength; ASBeautifier *beautifier; if (!waitingBeautifierStackLengthStack->empty()) { stackLength = waitingBeautifierStackLengthStack->back(); waitingBeautifierStackLengthStack->pop_back(); while ((int) waitingBeautifierStack->size() > stackLength) { beautifier = waitingBeautifierStack->back(); waitingBeautifierStack->pop_back(); delete beautifier; } } if (!activeBeautifierStackLengthStack->empty()) { stackLength = activeBeautifierStackLengthStack->back(); activeBeautifierStackLengthStack->pop_back(); while ((int) activeBeautifierStack->size() > stackLength) { beautifier = activeBeautifierStack->back(); activeBeautifierStack->pop_back(); delete beautifier; } } } } // check if the last char is a backslash if (line.length() > 0) backslashEndsPrevLine = (line[line.length() - 1] == '\\'); else backslashEndsPrevLine = false; // check if this line ends a multi-line #define // if so, use the #define's cloned beautifier for the line's indentation // and then remove it from the active beautifier stack and delete it. if (!backslashEndsPrevLine && isInDefineDefinition && !isInDefine) { string beautifiedLine; ASBeautifier *defineBeautifier; isInDefineDefinition = false; defineBeautifier = activeBeautifierStack->back(); activeBeautifierStack->pop_back(); beautifiedLine = defineBeautifier->beautify(line); delete defineBeautifier; return beautifiedLine; } // unless this is a multi-line #define, return this precompiler line as is. if (!isInDefine && !isInDefineDefinition) return originalLine; } // if there exists any worker beautifier in the activeBeautifierStack, // then use it instead of me to indent the current line. if (!isInDefine && activeBeautifierStack != NULL && !activeBeautifierStack->empty()) { return activeBeautifierStack->back()->beautify(line); } // calculate preliminary indentation based on data from past lines if (!inStatementIndentStack->empty()) spaceTabCount = inStatementIndentStack->back(); for (i = 0; i < headerStackSize; i++) { isInClass = false; if (blockIndent || (!(i > 0 && (*headerStack)[i-1] != &AS_OPEN_BRACKET && (*headerStack)[i] == &AS_OPEN_BRACKET))) ++tabCount; if (isCStyle && !namespaceIndent && i >= 1 && (*headerStack)[i-1] == &AS_NAMESPACE && (*headerStack)[i] == &AS_OPEN_BRACKET) --tabCount; if (isCStyle && i >= 1 && (*headerStack)[i-1] == &AS_CLASS && (*headerStack)[i] == &AS_OPEN_BRACKET) { if (classIndent) ++tabCount; isInClass = true; } // is the switchIndent option is on, indent switch statements an additional indent. else if (switchIndent && i > 1 && (*headerStack)[i-1] == &AS_SWITCH && (*headerStack)[i] == &AS_OPEN_BRACKET ) { ++tabCount; isInSwitch = true; } } if (!lineStartsInComment && isCStyle && isInClass && classIndent && headerStackSize >= 2 && (*headerStack)[headerStackSize-2] == &AS_CLASS && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET && line[0] == '}') --tabCount; else if (!lineStartsInComment && isInSwitch && switchIndent && headerStackSize >= 2 && (*headerStack)[headerStackSize-2] == &AS_SWITCH && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET && line[0] == '}') --tabCount; if (isInClassHeader) { isInClassHeaderTab = true; tabCount += 2; } if (isInConditional) { --tabCount; } // parse characters in the current line. for (i = 0; i < (int) line.length(); i++) { tempCh = line[i]; prevCh = ch; ch = tempCh; outBuffer.append(1, ch); if (isWhiteSpace(ch)) continue; // check for utf8 characters // isalnum() will display an assert message in debug if not bypassed here if (ch < 0) continue; // handle special characters (i.e. backslash+character such as \n, \t, ...) if (isSpecialChar) { isSpecialChar = false; continue; } if (!(isInComment || isInLineComment) && line.compare(i, 2, "\\\\") == 0) { outBuffer.append(1, '\\'); i++; continue; } if (!(isInComment || isInLineComment) && ch == '\\') { isSpecialChar = true; continue; } // handle quotes (such as 'x' and "Hello Dolly") if (!(isInComment || isInLineComment) && (ch == '"' || ch == '\'')) if (!isInQuote) { quoteChar = ch; isInQuote = true; } else if (quoteChar == ch) { isInQuote = false; isInStatement = true; continue; } if (isInQuote) continue; // handle comments if (!(isInComment || isInLineComment) && line.compare(i, 2, "//") == 0) { isInLineComment = true; outBuffer.append(1, '/'); i++; continue; } else if (!(isInComment || isInLineComment) && line.compare(i, 2, "/*") == 0) { isInComment = true; outBuffer.append(1, '*'); i++; continue; } else if ((isInComment || isInLineComment) && line.compare(i, 2, "*/") == 0) { isInComment = false; outBuffer.append(1, '/'); i++; continue; } if (isInComment || isInLineComment) continue; // if we have reached this far then we are NOT in a comment or string of special character... if (probationHeader != NULL) { if (((probationHeader == &AS_STATIC || probationHeader == &AS_CONST) && ch == '{') || (probationHeader == &AS_SYNCHRONIZED && ch == '(')) { // insert the probation header as a new header isInHeader = true; headerStack->push_back(probationHeader); // handle the specific probation header isInConditional = (probationHeader == &AS_SYNCHRONIZED); if (probationHeader == &AS_CONST) isImmediatelyAfterConst = true; // isInConst = true; /* TODO: revove all references to isInConst * There is actually no more need for the global isInConst variable. * The only reason for checking const is to see if there is a const * immediately before an open-bracket. * Since CONST is now put into probation and is checked during itspost-char, * isImmediatelyAfterConst can be set by its own... */ isInStatement = false; // if the probation comes from the previous line, then indent by 1 tab count. if (previousLineProbation && ch == '{') tabCount++; previousLineProbation = false; } // dismiss the probation header probationHeader = NULL; } prevNonSpaceCh = currentNonSpaceCh; currentNonSpaceCh = ch; if (!isLegalNameChar(ch) && ch != ',' && ch != ';') { prevNonLegalCh = currentNonLegalCh; currentNonLegalCh = ch; } //if (isInConst) //{ // isInConst = false; // isImmediatelyAfterConst = true; //} if (isInHeader) { isInHeader = false; currentHeader = headerStack->back(); } else currentHeader = NULL; if (isCStyle && isInTemplate && (ch == '<' || ch == '>') && findHeader(line, i, nonAssignmentOperators) == NULL) { if (ch == '<') { ++templateDepth; } else if (ch == '>') { if (--templateDepth <= 0) { if (isInTemplate) ch = ';'; else ch = 't'; isInTemplate = false; templateDepth = 0; } } } // handle parenthesies if (ch == '(' || ch == '[' || ch == ')' || ch == ']') { if (ch == '(' || ch == '[') { if (parenDepth == 0) { parenStatementStack->push_back(isInStatement); isInStatement = true; } parenDepth++; inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); if (currentHeader != NULL) registerInStatementIndent(line, i, spaceTabCount, minConditionalIndent/*indentLength*2*/, true); else registerInStatementIndent(line, i, spaceTabCount, 0, true); } else if (ch == ')' || ch == ']') { parenDepth--; if (parenDepth == 0) { isInStatement = parenStatementStack->back(); parenStatementStack->pop_back(); ch = ' '; isInConditional = false; } if (!inStatementIndentStackSizeStack->empty()) { int previousIndentStackSize = inStatementIndentStackSizeStack->back(); inStatementIndentStackSizeStack->pop_back(); while (previousIndentStackSize < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); if (!parenIndentStack->empty()) { int poppedIndent = parenIndentStack->back(); parenIndentStack->pop_back(); if (i == 0) spaceTabCount = poppedIndent; } } } continue; } if (ch == '{') { bool isBlockOpener = false; // first, check if '{' is a block-opener or an static-array opener isBlockOpener = ((prevNonSpaceCh == '{' && bracketBlockStateStack->back()) || prevNonSpaceCh == '}' || prevNonSpaceCh == ')' || prevNonSpaceCh == ';' || isInClassHeader || isBlockOpener || isImmediatelyAfterConst || (isInDefine && (prevNonSpaceCh == '(' || prevNonSpaceCh == '_' || isalnum(prevNonSpaceCh)))); isInClassHeader = false; if (!isBlockOpener && currentHeader != NULL) { for (size_t n = 0; n < nonParenHeaders.size(); n++) if (currentHeader == nonParenHeaders[n]) { isBlockOpener = true; break; } } bracketBlockStateStack->push_back(isBlockOpener); if (!isBlockOpener) { inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); registerInStatementIndent(line, i, spaceTabCount, 0, true); parenDepth++; if (i == 0) shouldIndentBrackettedLine = false; continue; } // this bracket is a block opener... ++lineOpeningBlocksNum; if (isInClassHeader) isInClassHeader = false; if (isInClassHeaderTab) { isInClassHeaderTab = false; // decrease tab count if bracket is broken size_t firstChar = originalLine.find_first_not_of(" \t"); if (firstChar != string::npos) if (originalLine[firstChar] == '{' && (int)firstChar == i) tabCount -= 2; } blockParenDepthStack->push_back(parenDepth); blockStatementStack->push_back(isInStatement); inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); blockTabCount += isInStatement ? 1 : 0; parenDepth = 0; isInStatement = false; tempStacks->push_back(new vector); headerStack->push_back(&AS_OPEN_BRACKET); lastLineHeader = &AS_OPEN_BRACKET; continue; } //check if a header has been reached if (prevCh == ' ') { bool isIndentableHeader = true; const string *newHeader = findHeader(line, i, headers); if (newHeader != NULL) { // if we reached here, then this is a header... isInHeader = true; vector *lastTempStack; if (tempStacks->empty()) lastTempStack = NULL; else lastTempStack = tempStacks->back(); // if a new block is opened, push a new stack into tempStacks to hold the // future list of headers in the new block. // take care of the special case: 'else if (...)' if (newHeader == &AS_IF && lastLineHeader == &AS_ELSE) { headerStack->pop_back(); } // take care of 'else' else if (newHeader == &AS_ELSE) { if (lastTempStack != NULL) { int indexOfIf = indexOf(*lastTempStack, &AS_IF); if (indexOfIf != -1) { // recreate the header list in headerStack up to the previous 'if' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfIf - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } /* * If the above if is not true, i.e. no 'if' before the 'else', * then nothing beautiful will come out of this... * I should think about inserting an Exception here to notify the caller of this... */ } } // check if 'while' closes a previous 'do' else if (newHeader == &AS_WHILE) { if (lastTempStack != NULL) { int indexOfDo = indexOf(*lastTempStack, &AS_DO); if (indexOfDo != -1) { // recreate the header list in headerStack up to the previous 'do' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfDo - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } } } // check if 'catch' closes a previous 'try' or 'catch' else if (newHeader == &AS_CATCH || newHeader == &AS_FINALLY) { if (lastTempStack != NULL) { int indexOfTry = indexOf(*lastTempStack, &AS_TRY); if (indexOfTry == -1) indexOfTry = indexOf(*lastTempStack, &AS_CATCH); if (indexOfTry != -1) { // recreate the header list in headerStack up to the previous 'try' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfTry - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } } } else if (newHeader == &AS_CASE) { isInCase = true; --tabCount; } else if (newHeader == &AS_DEFAULT) { isInCase = true; --tabCount; } // TODO: the following statement can never be true // because the headers have been commented out of the vector!!! //else if (newHeader == &AS_PUBLIC || newHeader == &AS_PROTECTED || newHeader == &AS_PRIVATE) //{ // if (isCStyle && !isInClassHeader) // --tabCount; // isIndentableHeader = false; //} else if (newHeader == &AS_STATIC || newHeader == &AS_SYNCHRONIZED || (newHeader == &AS_CONST && isCStyle)) { if (!headerStack->empty() && (headerStack->back() == &AS_STATIC || headerStack->back() == &AS_SYNCHRONIZED || headerStack->back() == &AS_CONST)) { isIndentableHeader = false; } else { isIndentableHeader = false; probationHeader = newHeader; } } else if (newHeader == &AS_CONST) { // this will be entered only if NOT in C style // since otherwise the CONST would be found to be a probstion header... //if (isCStyle) // isInConst = true; isIndentableHeader = false; } else if (newHeader == &AS_TEMPLATE) { if (isCStyle) isInTemplate = true; isIndentableHeader = false; } if (isIndentableHeader) { headerStack->push_back(newHeader); isInStatement = false; if (indexOf(nonParenHeaders, newHeader) == -1) { isInConditional = true; } lastLineHeader = newHeader; } else isInHeader = false; outBuffer.append(newHeader->substr(1)); i += newHeader->length() - 1; continue; } } if (isCStyle && !isalpha(prevCh) && line.compare(i, 8, "operator") == 0 && !isalnum(line[i+8])) { isInOperator = true; outBuffer.append(AS_OPERATOR.substr(1)); i += 7; continue; } if (ch == '?') isInQuestion = true; // special handling of 'case' statements if (ch == ':') { if ((int) line.length() > i + 1 && line[i+1] == ':') // look for :: { ++i; outBuffer.append(1, ':'); ch = ' '; continue; } else if (isCStyle && isInClass && prevNonSpaceCh != ')') { --tabCount; // found a 'private:' or 'public:' inside a class definition // so do nothing special } else if (isCStyle && isInClassHeader) { // found a 'class A : public B' definition // so do nothing special } else if (isInQuestion) { isInQuestion = false; } else if (isCStyle && prevNonSpaceCh == ')') { isInClassHeader = true; if (i == 0) tabCount += 2; } else { currentNonSpaceCh = ';'; // so that brackets after the ':' will appear as block-openers if (isInCase) { isInCase = false; ch = ';'; // from here on, treat char as ';' } else // is in a label (e.g. 'label1:') { if (labelIndent) --tabCount; // unindent label by one indent else tabCount = 0; // completely flush indent to left } } } if ((ch == ';' || (parenDepth > 0 && ch == ',')) && !inStatementIndentStackSizeStack->empty()) while ((int) inStatementIndentStackSizeStack->back() + (parenDepth > 0 ? 1 : 0) < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); // handle ends of statements if ((ch == ';' && parenDepth == 0) || ch == '}'/* || (ch == ',' && parenDepth == 0)*/) { if (ch == '}') { // first check if this '}' closes a previous block, or a static array... if (!bracketBlockStateStack->empty()) { bool bracketBlockState = bracketBlockStateStack->back(); bracketBlockStateStack->pop_back(); if (!bracketBlockState) { if (!inStatementIndentStackSizeStack->empty()) { // this bracket is a static array int previousIndentStackSize = inStatementIndentStackSizeStack->back(); inStatementIndentStackSizeStack->pop_back(); while (previousIndentStackSize < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); parenDepth--; if (i == 0) shouldIndentBrackettedLine = false; if (!parenIndentStack->empty()) { int poppedIndent = parenIndentStack->back(); parenIndentStack->pop_back(); if (i == 0) spaceTabCount = poppedIndent; } } continue; } } // this bracket is block closer... ++lineClosingBlocksNum; if (!inStatementIndentStackSizeStack->empty()) inStatementIndentStackSizeStack->pop_back(); if (!blockParenDepthStack->empty()) { parenDepth = blockParenDepthStack->back(); blockParenDepthStack->pop_back(); isInStatement = blockStatementStack->back(); blockStatementStack->pop_back(); if (isInStatement) blockTabCount--; } closingBracketReached = true; int headerPlace = indexOf(*headerStack, &AS_OPEN_BRACKET); if (headerPlace != -1) { const string *popped = headerStack->back(); while (popped != &AS_OPEN_BRACKET) { headerStack->pop_back(); popped = headerStack->back(); } headerStack->pop_back(); if (!tempStacks->empty()) { vector *temp = tempStacks->back(); tempStacks->pop_back(); delete temp; } } ch = ' '; // needed due to cases such as '}else{', so that headers ('else' tn tih case) will be identified... } /* * Create a temporary snapshot of the current block's header-list in the * uppermost inner stack in tempStacks, and clear the headerStack up to * the begining of the block. * Thus, the next future statement will think it comes one indent past * the block's '{' unless it specifically checks for a companion-header * (such as a previous 'if' for an 'else' header) within the tempStacks, * and recreates the temporary snapshot by manipulating the tempStacks. */ if (!tempStacks->back()->empty()) while (!tempStacks->back()->empty()) tempStacks->back()->pop_back(); while (!headerStack->empty() && headerStack->back() != &AS_OPEN_BRACKET) { tempStacks->back()->push_back(headerStack->back()); headerStack->pop_back(); } if (parenDepth == 0 && ch == ';') isInStatement = false; isInClassHeader = false; continue; } // check for preBlockStatements ONLY if not within parenthesies // (otherwise 'struct XXX' statements would be wrongly interpreted...) if (prevCh == ' ' && !isInTemplate && parenDepth == 0) { const string *newHeader = findHeader(line, i, preBlockStatements); if (newHeader != NULL) { isInClassHeader = true; outBuffer.append(newHeader->substr(1)); i += newHeader->length() - 1; //if (isCStyle) headerStack->push_back(newHeader); } } // Handle operators // //// // PRECHECK if a '==' or '--' or '++' operator was reached. //// // If not, then register an indent IF an assignment operator was reached. //// // The precheck is important, so that statements such as 'i--==2' are not recognized //// // to have assignment operators (here, '-=') in them . . . const string *foundAssignmentOp = NULL; const string *foundNonAssignmentOp = NULL; immediatelyPreviousAssignmentOp = NULL; // Check if an operator has been reached. foundAssignmentOp = findHeader(line, i, assignmentOperators, false); foundNonAssignmentOp = findHeader(line, i, nonAssignmentOperators, false); // Since findHeader's boundry checking was not used above, it is possible // that both an assignment op and a non-assignment op where found, // e.g. '>>' and '>>='. If this is the case, treat the LONGER one as the // found operator. if (foundAssignmentOp != NULL && foundNonAssignmentOp != NULL) if (foundAssignmentOp->length() < foundNonAssignmentOp->length()) foundAssignmentOp = NULL; else foundNonAssignmentOp = NULL; if (foundNonAssignmentOp != NULL) { if (foundNonAssignmentOp->length() > 1) { outBuffer.append(foundNonAssignmentOp->substr(1)); i += foundNonAssignmentOp->length() - 1; } } else if (foundAssignmentOp != NULL) { if (foundAssignmentOp->length() > 1) { outBuffer.append(foundAssignmentOp->substr(1)); i += foundAssignmentOp->length() - 1; } if (!isInOperator && !isInTemplate) { registerInStatementIndent(line, i, spaceTabCount, 0, false); immediatelyPreviousAssignmentOp = foundAssignmentOp; isInStatement = true; } } if (isInOperator) isInOperator = false; } // handle special cases of unindentation: /* * if '{' doesn't follow an immediately previous '{' in the headerStack * (but rather another header such as "for" or "if", then unindent it * by one indentation relative to its block. */ // indent #define lines with one less tab //if (isInDefine) // tabCount -= defineTabCount-1; if (!lineStartsInComment && !blockIndent && outBuffer.length() > 0 && outBuffer[0] == '{' && !(lineOpeningBlocksNum > 0 && lineOpeningBlocksNum == lineClosingBlocksNum) && !(headerStack->size() > 1 && (*headerStack)[headerStack->size()-2] == &AS_OPEN_BRACKET) && shouldIndentBrackettedLine) --tabCount; else if (!lineStartsInComment && outBuffer.length() > 0 && outBuffer[0] == '}' && shouldIndentBrackettedLine) --tabCount; // correctly indent one-line-blocks... else if (!lineStartsInComment && outBuffer.length() > 0 && lineOpeningBlocksNum > 0 && lineOpeningBlocksNum == lineClosingBlocksNum && previousLastLineHeader != NULL && previousLastLineHeader != &AS_OPEN_BRACKET) tabCount -= 1; //lineOpeningBlocksNum - (blockIndent ? 1 : 0); if (tabCount < 0) tabCount = 0; // take care of extra bracket indentatation option... if (bracketIndent && outBuffer.length() > 0 && shouldIndentBrackettedLine) if (outBuffer[0] == '{' || outBuffer[0] == '}') tabCount++; if (isInDefine) { if (outBuffer[0] == '#') { string preproc = trim(string(outBuffer.c_str() + 1)); if (preproc.compare(0, 6, "define") == 0) { if (!inStatementIndentStack->empty() && inStatementIndentStack->back() > 0) { defineTabCount = tabCount; } else { defineTabCount = tabCount - 1; tabCount--; } } } tabCount -= defineTabCount; } if (tabCount < 0) tabCount = 0; if (lineCommentNoBeautify) // ********************** tabCount = 0; // ********************** // finally, insert indentations into begining of line prevFinalLineSpaceTabCount = spaceTabCount; prevFinalLineTabCount = tabCount; if (shouldForceTabIndentation) { tabCount += spaceTabCount / indentLength; spaceTabCount = spaceTabCount % indentLength; } outBuffer = preLineWS(spaceTabCount, tabCount) + outBuffer; if (lastLineHeader != NULL) previousLastLineHeader = lastLineHeader; return outBuffer; } string ASBeautifier::preLineWS(int spaceTabCount, int tabCount) { string ws; for (int i = 0; i < tabCount; i++) ws += indentString; while ((spaceTabCount--) > 0) ws += string(" "); return ws; } /** * register an in-statement indent. */ void ASBeautifier::registerInStatementIndent(const string &line, int i, int spaceTabCount, int minIndent, bool updateParenStack) { int inStatementIndent; int remainingCharNum = line.length() - i; int nextNonWSChar = getNextProgramCharDistance(line, i); // if indent is around the last char in the line, indent instead 2 spaces from the previous indent if (nextNonWSChar == remainingCharNum) { int previousIndent = spaceTabCount; if (!inStatementIndentStack->empty()) previousIndent = inStatementIndentStack->back(); inStatementIndentStack->push_back(/*2*/ indentLength + previousIndent); if (updateParenStack) parenIndentStack->push_back(previousIndent); return; } if (updateParenStack) parenIndentStack->push_back(i + spaceTabCount); inStatementIndent = i + nextNonWSChar + spaceTabCount; if (i + nextNonWSChar < minIndent) inStatementIndent = minIndent + spaceTabCount; if (i + nextNonWSChar > maxInStatementIndent) inStatementIndent = indentLength * 2 + spaceTabCount; if (!inStatementIndentStack->empty() && inStatementIndent < inStatementIndentStack->back()) inStatementIndent = inStatementIndentStack->back(); inStatementIndentStack->push_back(inStatementIndent); } /** * get distance to the next non-white sspace, non-comment character in the line. * if no such character exists, return the length remaining to the end of the line. */ int ASBeautifier::getNextProgramCharDistance(const string &line, int i) { bool inComment = false; int remainingCharNum = line.length() - i; int charDistance; char ch; for (charDistance = 1; charDistance < remainingCharNum; charDistance++) { ch = line[i + charDistance]; if (inComment) { if (line.compare(i + charDistance, 2, "*/") == 0) { charDistance++; inComment = false; } continue; } else if (isWhiteSpace(ch)) continue; else if (ch == '/') { if (line.compare(i + charDistance, 2, "//") == 0) return remainingCharNum; else if (line.compare(i + charDistance, 2, "/*") == 0) { charDistance++; inComment = true; } } else return charDistance; } return charDistance; } /** * check if a specific character can be used in a legal variable/method/class name * * @return legality of the char. * @param ch the character to be checked. */ bool ASBeautifier::isLegalNameChar(char ch) const { return (isalnum(ch) || ch == '.' || ch == '_' || (!isCStyle && ch == '$') || (isCStyle && ch == '~')); } /** * check if a specific line position contains a header, out of several possible headers. * * @return a pointer to the found header. if no header was found then return NULL. */ const string *ASBeautifier::findHeader(const string &line, int i, const vector &possibleHeaders, bool checkBoundry) { int maxHeaders = possibleHeaders.size(); // const string *header = NULL; int p; for (p = 0; p < maxHeaders; p++) { const string *header = possibleHeaders[p]; if (line.compare(i, header->length(), header->c_str()) == 0) { // check that this is a header and not a part of a longer word // (e.g. not at its begining, not at its middle...) int lineLength = line.length(); int headerEnd = i + header->length(); char startCh = (*header)[0]; // first char of header char endCh = 0; // char just after header char prevCh = 0; // char just before header if (headerEnd < lineLength) { endCh = line[headerEnd]; } if (i > 0) { prevCh = line[i-1]; } if (!checkBoundry) { return header; } else if (prevCh != 0 && isLegalNameChar(startCh) && isLegalNameChar(prevCh)) { return NULL; } else if (headerEnd >= lineLength || !isLegalNameChar(startCh) || !isLegalNameChar(endCh)) { return header; } else { return NULL; } } } return NULL; } /** * find the index number of a string element in a container of strings * * @return the index number of element in the ocntainer. -1 if element not found. * @param container a vector of strings. * @param element the element to find . */ int ASBeautifier::indexOf(vector &container, const string *element) { vector::const_iterator where; where = find(container.begin(), container.end(), element); if (where == container.end()) return -1; else return where - container.begin(); } /** * trim removes the white space surrounding a line. * * @return the trimmed line. * @param str the line to trim. */ string ASBeautifier::trim(const string &str) { int start = 0; int end = str.length() - 1; while (start < end && isWhiteSpace(str[start])) start++; while (start <= end && isWhiteSpace(str[end])) end--; string returnStr(str, start, end + 1 - start); return returnStr; } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/astyledialogimpl.cpp0000644000175000017500000002647511362261064023644 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include #include #include #include "astyledialogimpl.h" // int AStyle_plugin_main(int argc, char *argv[]); // AStyleDialogImpl::AStyleDialogImpl( QWidget * parent, Qt::WFlags f) : QDialog(parent, f) { setupUi(this); comboBox->clear(); // No translation! comboBox->addItems(QStringList() << "none" << "break" << "attach" << "linux"); m_textSample = "namespace foospace\n{\nint Foo()\n{\nif (isBar)\n{\nbar();\nreturn 1;\n}\n" "else if(isNone)\n{\nswitch (foo){\ncase 1:\na+=1;\nbreak;\n" "case 2:\n{\na+=2;\nbreak;\n}\n}\n}\n}\n}"; // textEdit->setPlainText(m_textSample); indentation->setDisabled( true ); formatting->setDisabled( true ); #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Dialog"); ansi->setChecked( settings.value("ansi", false).toBool() ); kr->setChecked( settings.value("kr", false).toBool() ); Linux->setChecked( settings.value("linux", false).toBool() ); gnu->setChecked( settings.value("gnu", false).toBool() ); java->setChecked( settings.value("java", false).toBool() ); custom->setChecked( settings.value("custom", false).toBool() ); checkBox1->setChecked( settings.value("checkBox1", false).toBool() ); checkBox2->setChecked( settings.value("checkBox2", false).toBool() ); checkBox3->setChecked( settings.value("checkBox3", false).toBool() ); checkBox4->setChecked( settings.value("checkBox4", false).toBool() ); checkBox5->setChecked( settings.value("checkBox5", false).toBool() ); checkBox6->setChecked( settings.value("checkBox6", false).toBool() ); checkBox7->setChecked( settings.value("checkBox7", false).toBool() ); checkBox8->setChecked( settings.value("checkBox8", false).toBool() ); checkBox9->setChecked( settings.value("checkBox9", false).toBool() ); checkBox10->setChecked( settings.value("checkBox10", false).toBool() ); checkBox11->setChecked( settings.value("checkBox11", false).toBool() ); checkBox12->setChecked( settings.value("checkBox12", false).toBool() ); checkBox13->setChecked( settings.value("checkBox13", false).toBool() ); checkBox14->setChecked( settings.value("checkBox14", false).toBool() ); checkBox15->setChecked( settings.value("checkBox15", false).toBool() ); checkBox16->setChecked( settings.value("checkBox16", false).toBool() ); checkBox17->setChecked( settings.value("checkBox17", false).toBool() ); checkBox18->setChecked( settings.value("checkBox18", false).toBool() ); spacesSize->setValue( settings.value("spacesSize", false).toInt() ); comboBox->setCurrentIndex( settings.value("comboBox", false).toInt() ); settings.endGroup(); } // QStringList AStyleDialogImpl::args() { QStringList s; if( ansi->isChecked() ) s << "--style=ansi"; else if( kr->isChecked() ) s << "--style=kr"; else if( Linux->isChecked() ) s << "--style=linux"; else if( gnu->isChecked() ) s << "--style=gnu"; else if( java->isChecked() ) s << "--style=java"; else { if( checkBox1->isChecked() ) s << QString().sprintf("--indent=tab=%d", spacesSize->value()); else s << QString().sprintf("--indent=spaces=%d", spacesSize->value()); if( checkBox2->isChecked() ) s << QString().sprintf("--force-indent=tab=%d", spacesSize->value()); if( checkBox3->isChecked() ) s << "--convert-tabs"; if( checkBox4->isChecked() ) s << "--fill-empty-lines"; if( checkBox5->isChecked() ) s << "--indent-classes"; if( checkBox6->isChecked() ) s << "--indent-switches"; if( checkBox7->isChecked() ) s << "--indent-cases"; if( checkBox8->isChecked() ) s << "--indent-brackets"; if( checkBox9->isChecked() ) s << "--indent-blocks"; if( checkBox10->isChecked() ) s << "--indent-namespaces"; if( checkBox11->isChecked() ) s << "--indent-labels"; if( checkBox12->isChecked() ) s << "--indent-preprocessor"; if( comboBox->currentText() != "none" ) s << "--brackets="+comboBox->currentText(); // Formatting tab if( checkBox13->isChecked() ) s << "--break-blocks=all"; if( checkBox14->isChecked() ) s << "--break-elseifs"; if( checkBox15->isChecked() ) s << "--pad=oper"; if( checkBox16->isChecked() ) s << "--pad=paren"; if( checkBox17->isChecked() ) s << "--one-line=keep-statements"; if( checkBox18->isChecked() ) s << "--one-line=keep-blocks"; } return s; } // void AStyleDialogImpl::on_okButton_clicked() { #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Arguments"); settings.setValue("arguments", args()); settings.endGroup(); settings.beginGroup("Dialog"); settings.setValue("ansi", ansi->isChecked()); settings.setValue("kr", kr->isChecked()); settings.setValue("linux", Linux->isChecked()); settings.setValue("gnu", gnu->isChecked()); settings.setValue("java", java->isChecked()); settings.setValue("custom", custom->isChecked()); settings.setValue("checkBox1", checkBox1->isChecked()); settings.setValue("checkBox2", checkBox2->isChecked()); settings.setValue("checkBox3", checkBox3->isChecked()); settings.setValue("checkBox4", checkBox4->isChecked()); settings.setValue("checkBox5", checkBox5->isChecked()); settings.setValue("checkBox6", checkBox6->isChecked()); settings.setValue("checkBox7", checkBox7->isChecked()); settings.setValue("checkBox8", checkBox8->isChecked()); settings.setValue("checkBox9", checkBox9->isChecked()); settings.setValue("checkBox10", checkBox10->isChecked()); settings.setValue("checkBox11", checkBox11->isChecked()); settings.setValue("checkBox12", checkBox12->isChecked()); settings.setValue("checkBox13", checkBox13->isChecked()); settings.setValue("checkBox14", checkBox14->isChecked()); settings.setValue("checkBox15", checkBox15->isChecked()); settings.setValue("checkBox16", checkBox16->isChecked()); settings.setValue("checkBox17", checkBox17->isChecked()); settings.setValue("checkBox18", checkBox18->isChecked()); settings.setValue("spacesSize", spacesSize->value()); settings.setValue("comboBox", comboBox->currentIndex()); settings.endGroup(); } // void AStyleDialogImpl::on_gnu_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_ansi_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_Linux_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_java_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_kr_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_custom_toggled(bool checked) { if( !checked ) return; indentation->setEnabled( checked ); formatting->setEnabled( checked ); sample(); } // #include void AStyleDialogImpl::sample() { textEdit->setPlainText(m_textSample); // Find temp filename QString f; int numTempFile = 0; do { numTempFile++; f = QDir::tempPath()+"/astyle-plugin_"+QString::number(numTempFile)+".cpp"; } while( QFile::exists( f ) ); // Open temp file for writing QFile file( f ); if (!file.open(QIODevice::WriteOnly | QIODevice::Text ) ) { textEdit->setPlainText( m_textSample ); return; } file.write( textEdit->toPlainText().toLocal8Bit() ); file.close(); // int nbArgs = args().count(); char **argv = new char*[nbArgs+2]; // argv[0] = NULL; int n = 1; foreach(QString s, args() ) { argv[n] = new char[s.length()+1]; strcpy(argv[n], s.toLocal8Bit().data()); n++; } // QByteArray array( f.toLocal8Bit() ); argv[n] = new char[f.length()+1]; strcpy(argv[n], array.data()); // Call astyle formatter AStyle_plugin_main(n+1, argv); for(int i=1; isetPlainText( formattedContent ); else textEdit->setPlainText( m_textSample ); textArgs->setText( "astyle "+args().join(" ") ); } // void AStyleDialogImpl::on_comboBox_currentIndexChanged(QString ) { sample(); } // void AStyleDialogImpl::on_checkBox13_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox14_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox16_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox17_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox15_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox18_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox12_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox11_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox10_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox9_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox8_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox3_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox2_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_spacesSize_valueChanged(int ) { sample(); } // void AStyleDialogImpl::on_qt_spinbox_lineedit_textChanged(QString ) { sample(); } // void AStyleDialogImpl::on_checkBox5_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox7_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox1_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox4_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox6_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_aboutButton_clicked() { QMessageBox::about(0, tr("Artistic Style Formatter Plugin"), tr(" AStyle plugin for QDevelop\n" " Copyright (c) 2006 Jean-Luc Biord\n\n" " jlbiord@qtfr.org\n\n" "Part of this plugin is Artistic Style - an indentation and\n" " reformatting tool for C, C++, C# and Java source files.\n" " http://astyle.sourceforge.net\n\n") ); } // qdevelop-v0.28/plugins/formatting-astyle/astyleplugin.cpp0000644000175000017500000000776711362261064023024 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include #include #include #include #include "astyledialogimpl.h" #include "astyleplugin.h" // int AStyle_plugin_main(int argc, char *argv[]); // QString AStylePlugin::menuName() const { if (!translator) { QString language = QLocale::languageToString( QLocale::system().language() ); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/../translations/formatting-astyle"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations/formatting-astyle"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); translator = new QTranslator; translator->load(translationsDir.absoluteFilePath("AStyle_"+language+".qm")); if (translator->isEmpty()) { // CMake workaround if (QFile::exists(QCoreApplication::applicationDirPath() + "/AStyle_"+language+".qm")) translator->load(QCoreApplication::applicationDirPath() + "/AStyle_"+language+".qm"); if (translator->isEmpty()) { // Qmake workaround translator->load(QCoreApplication::applicationDirPath() + "/../plugins/formatting-astyle/translations/AStyle_"+language+".qm"); } } QCoreApplication::installTranslator(translator); } return tr("Artistic Style Formatter Plugin"); } // TextEditInterface::Action AStylePlugin::action() const { return TextEditInterface::ReplaceAll; } // QString AStylePlugin::text(QString text, QString selectedText, QTextCodec *codec) { #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Arguments"); QStringList arguments = settings.value("arguments", "--style=ansi").toStringList(); settings.endGroup(); // Find temp filename QString f; int numTempFile = 0; do { numTempFile++; f = QDir::tempPath()+"/astyle-plugin_"+QString::number(numTempFile)+".cpp"; } while( QFile::exists( f ) ); // Open temp file for writing QFile file( f ); if (!file.open(QIODevice::WriteOnly | QIODevice::Text ) ) return QString(); file.write( text.toLocal8Bit() ); file.close(); // int nbArgs = arguments.count(); char **argv = new char*[nbArgs+2]; // argv[0] = NULL; int n = 1; foreach(QString s, arguments ) { argv[n] = new char[s.length()+1]; strcpy(argv[n], s.toLocal8Bit().data()); n++; } // QByteArray array( f.toLocal8Bit() ); argv[n] = new char[f.length()+1]; strcpy(argv[n], array.data()); // Call astyle formatter AStyle_plugin_main(n+1, argv); for(int i=1; iexec(); delete dialog; } // Q_EXPORT_PLUGIN2(pnp_textplugin, AStylePlugin) qdevelop-v0.28/plugins/tools-regexp-planner/qpjvalidindicatorlabel.h0000644000175000017500000000424411362261064025057 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJVIALIDINDICATORLABEL_H #define MY_QPJVIALIDINDICATORLABEL_H #include /********************** CLASS DECLARATION **************************/ class QpjValidIndicatorLabel : public QLabel { Q_OBJECT public: QpjValidIndicatorLabel( const QString& text = QString(), QWidget* parent = 0 ); public slots: void setView(const QString& pattern); }; // END OF CLASS DECLARATION #endif // END OF ifndef... qdevelop-v0.28/plugins/tools-regexp-planner/replugin.h0000644000175000017500000000255511362261064022200 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2009 Dmitrij "Divius" Tantsur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef REPLUGIN_H #define REPLUGIN_H #include #include #include #include class RePlugin : public QObject, public SimplePluginInterface { Q_OBJECT Q_INTERFACES(SimplePluginInterface) public: RePlugin() : translator(0) {} QString menuName() const; void start(QWidget * owner = 0); bool hasConfigDialog() const; void config(); private: mutable QTranslator * translator; }; #endif qdevelop-v0.28/plugins/tools-regexp-planner/qpjregexpplannerdialog.h0000644000175000017500000000523511362261064025116 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJREGEXPPLANNERDIALOG_H #define MY_QPJREGEXPPLANNERDIALOG_H // header files: #include // predeclarations: class QpjCheckTextEdit; class QpjValidIndicatorLabel; class QLineEdit; class QLabel; /********************** CLASS DECLARATION **************************/ class QpjRegExpPlannerDialog : public QDialog { Q_OBJECT public: QpjRegExpPlannerDialog(QWidget* parent = 0); private: QLineEdit* regExpEditor; QpjValidIndicatorLabel* indicator; QpjCheckTextEdit* checker; QLabel* labelEdit; QLabel* labelEmpty; QLabel* labelCheck; QLabel* labelColour; QLabel* labelGreen; QLabel* labelBlue; QLabel* labelRed; private slots: void aboutBox(); }; // END OF CLASS DECLARATION #endif // END OF ifndef... /******************* COMMENTS AND ANNOTATIONS ************************ 1, If you use the predeclarations, you do not have to load the header files. So the compiling is little bit faster. */ qdevelop-v0.28/plugins/tools-regexp-planner/qpjchecktextedit.h0000644000175000017500000000442011362261064023707 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJCHECKTEXTEDIT_H #define MY_QPJCHECKTEXTEDIT_H #include /********************** CLASS DECLARATION **************************/ class QpjCheckTextEdit : public QTextEdit { Q_OBJECT public: QpjCheckTextEdit(QWidget* parent = 0); public slots: void setPatternString(const QString& pattern); protected: virtual void focusInEvent(QFocusEvent* event); private slots: void formatText(); private: QRegExp regExp; void connectToFormating(bool yes); }; // END OF CLASS DECLARATION #endif // END OF ifndef... qdevelop-v0.28/plugins/tools-regexp-planner/qpjvalidindicatorlabel.cpp0000644000175000017500000000455311362261064025415 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjvalidindicatorlabel.h" /********************** IMPLEMENTATION *****************************/ QpjValidIndicatorLabel::QpjValidIndicatorLabel(const QString& text, QWidget* parent) : QLabel(text, parent) { if (text.isEmpty()) { setText("" + tr("Invalid") + ""); } } void QpjValidIndicatorLabel::setView(const QString& pattern) { QRegExp regExp(pattern); if (regExp.isValid() && pattern != "") { setText("" + tr("Valid") + ""); } else { setText("" + tr("Invalid") + ""); } } // END OF IMPLEMENTATION qdevelop-v0.28/plugins/tools-regexp-planner/replugin.cpp0000644000175000017500000000474211362261064022533 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include "qpjregexpplannerdialog.h" #include "replugin.h" #include #include #include #include // QString RePlugin::menuName() const { if (!translator) { QString language = QLocale::languageToString( QLocale::system().language() ); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/../translations/tools-regexp-planner"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations/tools-regexp-planner"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); translator = new QTranslator; translator->load(translationsDir.absoluteFilePath("RePlanner_"+language+".qm")); if (translator->isEmpty()) { // CMake workaround if (QFile::exists(QCoreApplication::applicationDirPath() + "/RePlanner_"+language+".qm")) translator->load(QCoreApplication::applicationDirPath() + "/RePlanner_"+language+".qm"); if (translator->isEmpty()) { // Qmake workaround translator->load(QCoreApplication::applicationDirPath() + "/../plugins/tools-regexp-planner/translations/RePlanner_"+language+".qm"); } } QCoreApplication::installTranslator(translator); } return tr("RegExp Planner"); } // void RePlugin::start(QWidget * owner) { QpjRegExpPlannerDialog* dialog = new QpjRegExpPlannerDialog; dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowFlags(Qt::WindowStaysOnTopHint); dialog->show(); Q_UNUSED(owner); } // bool RePlugin::hasConfigDialog() const { return false; } void RePlugin::config() { // Noop } // Q_EXPORT_PLUGIN2(tools-regexp-planner, RePlugin) qdevelop-v0.28/plugins/tools-regexp-planner/qpjregexpplannerdialog.cpp0000644000175000017500000001075311362261064025452 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjregexpplannerdialog.h" #include "qpjchecktextedit.h" #include "qpjvalidindicatorlabel.h" /********************** IMPLEMENTATION *****************************/ QpjRegExpPlannerDialog::QpjRegExpPlannerDialog(QWidget* parent) : QDialog(parent) { // making objects: regExpEditor = new QLineEdit(); indicator = new QpjValidIndicatorLabel(); checker = new QpjCheckTextEdit(); labelEdit = new QLabel(tr ("Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2}") ); labelEmpty = new QLabel(""); labelCheck = new QLabel(tr("Regular Expression Checker")); labelColour = new QLabel(tr("Meaning of Colours:")); labelGreen = new QLabel("" + tr("Acceptable") + ""); labelBlue = new QLabel("" + tr("Intermediate") + ""); labelRed = new QLabel("" + tr("Invalid") + ""); // by Divius [for QDevelop] QPushButton * buttonClose = new QPushButton(tr("Close")); connect(buttonClose, SIGNAL(clicked()), SLOT(close())); QPushButton * buttonAbout = new QPushButton(tr("About plugin")); connect(buttonAbout, SIGNAL(clicked()), SLOT(aboutBox())); // ! by Divius // making tha layout: QHBoxLayout* h1Layout = new QHBoxLayout; h1Layout->addWidget(regExpEditor); h1Layout->addWidget(indicator); QVBoxLayout* v1Layout = new QVBoxLayout; v1Layout->addStretch(); v1Layout->addWidget(labelColour); v1Layout->addWidget(labelGreen); v1Layout->addWidget(labelBlue); v1Layout->addWidget(labelRed); v1Layout->addStretch(); v1Layout->addWidget(buttonAbout); v1Layout->addWidget(buttonClose); QHBoxLayout* h2Layout = new QHBoxLayout; h2Layout->addWidget(checker); h2Layout->addLayout(v1Layout); QVBoxLayout* theLayout = new QVBoxLayout; theLayout->addWidget(labelEdit); theLayout->addLayout(h1Layout); theLayout->addWidget(labelEmpty); theLayout->addWidget(labelCheck); theLayout->addLayout(h2Layout); setLayout(theLayout); // the main layout // Removed by Divius [for QDevelop] setWindowIcon(QIcon("images/pj.png")); // my icon setWindowTitle(tr("RegExp Planner")); // title of dialog // making the connections between objects: connect( regExpEditor, SIGNAL(textChanged(const QString&)), indicator, SLOT (setView (const QString&)) ); connect( regExpEditor, SIGNAL(textChanged (const QString&)), checker, SLOT (setPatternString(const QString&)) ); } void QpjRegExpPlannerDialog::aboutBox() { QMessageBox::about(this, tr("About plugin"), trUtf8 ( " RegExp Planner plugin for QDevelop\n" "Original work: Copyright (C) 2008 by Prém József\n" " Adapted for using with QDevelop by\n" "Dmitrij \"Divius\" Tantsur " )+"\n\n"+tr("Plugin license: GPLv2")); } // END OF IMPLEMENTATION qdevelop-v0.28/plugins/tools-regexp-planner/rep.pro0000644000175000017500000000120211362261064021476 0ustar jlbrdjlbrdTARGET = rep SOURCES += replugin.cpp qpjregexpplannerdialog.cpp qpjchecktextedit.cpp qpjvalidindicatorlabel.cpp HEADERS += replugin.h qpjregexpplannerdialog.h qpjchecktextedit.h qpjvalidindicatorlabel.h TRANSLATIONS += translations/RePlanner_Russian.ts translations/RePlanner_French.ts translations/RePlanner_German.ts CONFIG += release \ plugin DEPENDPATH = . INCLUDEPATH = . ../../src TEMPLATE = lib DESTDIR = ../../bin/plugins MOC_DIR = ../../build/moc UI_DIR = ../../build/ui macx { OBJECTS_DIR = ../../build/o/mac } unix { OBJECTS_DIR = ../../build/o/unix } win32 { OBJECTS_DIR = ../../build/o/win32 } qdevelop-v0.28/plugins/tools-regexp-planner/qpjchecktextedit.cpp0000644000175000017500000001075411362261064024251 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjchecktextedit.h" /********************** IMPLEMENTATION *****************************/ QpjCheckTextEdit::QpjCheckTextEdit(QWidget* parent) : QTextEdit(parent) { connectToFormating(true); setText(""); regExp.setPattern(""); } void QpjCheckTextEdit::focusInEvent(QFocusEvent* event) { QTextEdit::focusInEvent(event); formatText(); } void QpjCheckTextEdit::connectToFormating(bool yes) { if (yes) { connect( this->document(), SIGNAL(contentsChanged()), this, SLOT (formatText ()) ); } else { disconnect( this->document(), SIGNAL(contentsChanged()), this, SLOT (formatText ()) ); } } void QpjCheckTextEdit::formatText() { connectToFormating(false); if (regExp.isValid() && regExp.pattern() != "") { QRegExpValidator* validator = new QRegExpValidator(regExp, this); QString text = document()->toPlainText(); int startSize = text.size(); int n = 0; while ( text.size() > 0 && validator->validate(text, n) == QValidator::Invalid) { text.resize(text.size() - 1); } QTextCursor highlightCursor(document()); highlightCursor.movePosition(QTextCursor::End); QTextCharFormat colorFormat(highlightCursor.charFormat()); if (startSize > text.size()) { colorFormat.setForeground(Qt::red); highlightCursor.movePosition( QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, startSize - text.size() ); highlightCursor.mergeCharFormat(colorFormat); } highlightCursor.setPosition(text.size()); if (text.size() > 0) { switch(validator->validate(text, n)) { case QValidator::Acceptable: colorFormat.setForeground(Qt::darkGreen); break; case QValidator::Intermediate: colorFormat.setForeground(Qt::blue); break; default: break; } highlightCursor.movePosition(QTextCursor::Start, QTextCursor::KeepAnchor); highlightCursor.mergeCharFormat(colorFormat); } delete validator; } else setText(""); if (!isActiveWindow()) show(); connectToFormating(true); } void QpjCheckTextEdit::setPatternString(const QString& pattern) { regExp.setPattern(pattern); if (regExp.isValid()) formatText(); } // END OF IMPLEMENTATION /******************* COMMENTS AND ANNOTATIONS ************************ 1, I write newly the focusInEvent() function, because I wanted to fomat the text when the TextEditor comes in focus. If the user do not write a valid regular expression, I stop the editing in the checker field. 2, I used the connectToFormating() function for switching the connection between the document and formatText() function. I had to do this, because without this switching I can make a endless rekursion with the formatText(). 3, formatText() checks the text, and write the characters with colours. */ qdevelop-v0.28/plugins/.svn/entries0000444000175000017500000000040211362261064016360 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/plugins http://qdevelop.googlecode.com/svn 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd tools-regexp-planner dir formatting-astyle dir qdevelop-v0.28/plugins/.svn/all-wcprops0000444000175000017500000000011511362261064017153 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 36 /svn/!svn/ver/465/tags/v0.28/plugins END qdevelop-v0.28/src/QIComplete/readtags.cpp0000644000175000017500000004314111362261065017520 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Darren Hiebert and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the ctags project ********************************************************************************************************/ /* * This module contains functions for reading tag files. */ /* * INCLUDE FILES */ #include #include #include #include #include #include /* to declare off_t */ #include "readtags.h" /* * MACROS */ #define TAB '\t' #include /* * DATA DECLARATIONS */ typedef struct { size_t size; char *buffer; } vstring; /* Information about current tag file */ struct sTagFile { /* has the file been opened and this structure initialized? */ short initialized; /* format of tag file */ short format; /* how is the tag file sorted? */ sortType sortMethod; /* pointer to file structure */ FILE *fp; /* file position of first character of `line' */ off_t pos; /* size of tag file in seekable positions */ off_t size; /* last line read */ vstring line; /* name of tag in last line read */ vstring name; /* defines tag search state */ struct { /* file position of last match for tag */ off_t pos; /* name of tag last searched for */ const char *name; /* length of name for partial matches */ size_t nameLength; /* peforming partial match */ short partial; /* ignoring case */ short ignorecase; } search; /* miscellaneous extension fields */ struct { /* number of entries in `list' */ unsigned short max; /* list of key value pairs */ tagExtensionField *list; } fields; /* buffers to be freed at close */ struct { /* name of program author */ char *author; /* name of program */ char *name; /* URL of distribution */ char *url; /* program version */ char *version; } program; }; /* * DATA DEFINITIONS */ const char *const EmptyString = ""; const char *const PseudoTagPrefix = "!_"; /* * FUNCTION DEFINITIONS */ /* * Compare two strings, ignoring case. * Return 0 for match, < 0 for smaller, > 0 for bigger * Make sure case is folded to uppercase in comparison (like for 'sort -f') * This makes a difference when one of the chars lies between upper and lower * ie. one of the chars [ \ ] ^ _ ` for ascii. (The '_' in particular !) */ static int struppercmp(const char *s1, const char *s2) { int result; do { result = toupper((int) *s1) - toupper((int) *s2); } while (result == 0 && *s1++ != '\0' && *s2++ != '\0'); return result; } static int strnuppercmp(const char *s1, const char *s2, size_t n) { int result; do { result = toupper((int) *s1) - toupper((int) *s2); } while (result == 0 && --n > 0 && *s1++ != '\0' && *s2++ != '\0'); return result; } static int growString(vstring * s) { int result = 0; size_t newLength; char *newLine; if (s->size == 0) { newLength = 128; newLine = (char *) malloc(newLength); *newLine = '\0'; } else { newLength = 2 * s->size; newLine = (char *) realloc(s->buffer, newLength); } if (newLine == NULL) perror("string too large"); else { s->buffer = newLine; s->size = newLength; result = 1; } return result; } /* Copy name of tag out of tag line */ static void copyName(tagFile * const file) { size_t length; const char *end = strchr(file->line.buffer, '\t'); if (end == NULL) { end = strchr(file->line.buffer, '\n'); if (end == NULL) end = strchr(file->line.buffer, '\r'); } if (end != NULL) length = end - file->line.buffer; else length = strlen(file->line.buffer); while (length >= file->name.size) growString(&file->name); strncpy(file->name.buffer, file->line.buffer, length); file->name.buffer[length] = '\0'; } static int readTagLineRaw(tagFile * const file) { int result = 1; int reReadLine; /* If reading the line places any character other than a null or a * newline at the last character position in the buffer (one less than * the buffer size), then we must resize the buffer and reattempt to read * the line. */ do { char *const pLastChar = file->line.buffer + file->line.size - 2; char *line; file->pos = ftell(file->fp); reReadLine = 0; *pLastChar = '\0'; line = fgets(file->line.buffer, (int) file->line.size, file->fp); if (line == NULL) { /* read error */ if (!feof(file->fp)) perror("readTagLine"); result = 0; } else if (*pLastChar != '\0' && *pLastChar != '\n' && *pLastChar != '\r') { /* buffer overflow */ growString(&file->line); fseek(file->fp, file->pos, SEEK_SET); reReadLine = 1; } else { size_t i = strlen(file->line.buffer); while (i > 0 && (file->line.buffer[i - 1] == '\n' || file->line.buffer[i - 1] == '\r')) { file->line.buffer[i - 1] = '\0'; --i; } } } while (reReadLine && result); if (result) copyName(file); return result; } static int readTagLine(tagFile * const file) { int result; do { result = readTagLineRaw(file); } while (result && *file->name.buffer == '\0'); return result; } static tagResult growFields(tagFile * const file) { tagResult result = TagFailure; unsigned short newCount = 2 * file->fields.max; tagExtensionField *newFields = (tagExtensionField *) realloc(file->fields.list, newCount * sizeof(tagExtensionField)); if (newFields == NULL) perror("too many extension fields"); else { file->fields.list = newFields; file->fields.max = newCount; result = TagSuccess; } return result; } static void parseExtensionFields(tagFile * const file, tagEntry * const entry, char *const string) { char *p = string; while (p != NULL && *p != '\0') { while (*p == TAB) *p++ = '\0'; if (*p != '\0') { char *colon; char *field = p; p = strchr(p, TAB); if (p != NULL) *p++ = '\0'; colon = strchr(field, ':'); if (colon == NULL) entry->kind = field; else { const char *key = field; const char *value = colon + 1; *colon = '\0'; if (strcmp(key, "kind") == 0) entry->kind = value; else if (strcmp(key, "file") == 0) entry->fileScope = 1; else if (strcmp(key, "line") == 0) entry->address.lineNumber = atol(value); else { if (entry->fields.count == file->fields.max) growFields(file); file->fields.list[entry->fields.count].key = key; file->fields.list[entry->fields.count].value = value; ++entry->fields.count; } } } } } static void parseTagLine(tagFile * file, tagEntry * const entry) { int i; char *p = file->line.buffer; char *tab = strchr(p, TAB); int fieldsPresent = 0; entry->fields.list = NULL; entry->fields.count = 0; entry->kind = NULL; entry->fileScope = 0; entry->name = p; if (tab != NULL) { *tab = '\0'; p = tab + 1; entry->file = p; tab = strchr(p, TAB); if (tab != NULL) { *tab = '\0'; p = tab + 1; if (*p == '/' || *p == '?') { /* parse pattern */ int delimiter = *(unsigned char *) p; entry->address.lineNumber = 0; entry->address.pattern = p; do { p = strchr(p + 1, delimiter); } while (p != NULL && *(p - 1) == '\\'); if (p == NULL) { /* invalid pattern */ } else ++p; } else if (isdigit((int) *(unsigned char *) p)) { /* parse line number */ entry->address.pattern = p; entry->address.lineNumber = atol(p); while (isdigit((int) *(unsigned char *) p)) ++p; } else { /* invalid pattern */ } fieldsPresent = (strncmp(p, ";\"", 2) == 0); *p = '\0'; if (fieldsPresent) parseExtensionFields(file, entry, p + 2); } } if (entry->fields.count > 0) entry->fields.list = file->fields.list; for (i = entry->fields.count; i < file->fields.max; ++i) { file->fields.list[i].key = NULL; file->fields.list[i].value = NULL; } } static char *duplicate(const char *str) { char *result = NULL; if (str != NULL) { result = (char *) malloc(strlen(str) + 1); if (result == NULL) perror(NULL); else strcpy(result, str); } return result; } static void readPseudoTags(tagFile * const file, tagFileInfo * const info) { fpos_t startOfLine; const size_t prefixLength = strlen(PseudoTagPrefix); if (info != NULL) { info->file.format = 1; info->file.sort = TAG_UNSORTED; info->program.author = NULL; info->program.name = NULL; info->program.url = NULL; info->program.version = NULL; } while (1) { fgetpos(file->fp, &startOfLine); if (!readTagLine(file)) break; if (strncmp(file->line.buffer, PseudoTagPrefix, prefixLength) != 0) break; else { tagEntry entry; const char *key, *value; parseTagLine(file, &entry); key = entry.name + prefixLength; value = entry.file; if (strcmp(key, "TAG_FILE_SORTED") == 0) file->sortMethod = (sortType) atoi(value); else if (strcmp(key, "TAG_FILE_FORMAT") == 0) file->format = atoi(value); else if (strcmp(key, "TAG_PROGRAM_AUTHOR") == 0) file->program.author = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_NAME") == 0) file->program.name = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_URL") == 0) file->program.url = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_VERSION") == 0) file->program.version = duplicate(value); if (info != NULL) { info->file.format = file->format; info->file.sort = file->sortMethod; info->program.author = file->program.author; info->program.name = file->program.name; info->program.url = file->program.url; info->program.version = file->program.version; } } } fsetpos(file->fp, &startOfLine); } static void gotoFirstLogicalTag(tagFile * const file) { fpos_t startOfLine; const size_t prefixLength = strlen(PseudoTagPrefix); rewind(file->fp); while (1) { fgetpos(file->fp, &startOfLine); if (!readTagLine(file)) break; if (strncmp(file->line.buffer, PseudoTagPrefix, prefixLength) != 0) break; } fsetpos(file->fp, &startOfLine); } static tagFile *initialize(const char *const filePath, tagFileInfo * const info) { tagFile *result = (tagFile *) malloc(sizeof(tagFile)); if (result != NULL) { memset(result, 0, sizeof(tagFile)); growString(&result->line); growString(&result->name); result->fields.max = 20; result->fields.list = (tagExtensionField *) malloc(result->fields.max * sizeof(tagExtensionField)); result->fp = fopen(filePath, "r"); if (result->fp == NULL) { free(result); result = NULL; info->status.error_number = errno; } else { fseek(result->fp, 0, SEEK_END); result->size = ftell(result->fp); rewind(result->fp); readPseudoTags(result, info); info->status.opened = 1; result->initialized = 1; } } return result; } static void terminate(tagFile * const file) { fclose(file->fp); free(file->line.buffer); free(file->name.buffer); free(file->fields.list); if (file->program.author != NULL) free(file->program.author); if (file->program.name != NULL) free(file->program.name); if (file->program.url != NULL) free(file->program.url); if (file->program.version != NULL) free(file->program.version); memset(file, 0, sizeof(tagFile)); free(file); } static tagResult readNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file == NULL || !file->initialized) result = TagFailure; else if (!readTagLine(file)) result = TagFailure; else { if (entry != NULL) parseTagLine(file, entry); result = TagSuccess; } return result; } static const char *readFieldValue(const tagEntry * const entry, const char *const key) { const char *result = NULL; int i; if (strcmp(key, "kind") == 0) result = entry->kind; else if (strcmp(key, "file") == 0) result = EmptyString; else for (i = 0; i < entry->fields.count && result == NULL; ++i) if (strcmp(entry->fields.list[i].key, key) == 0) result = entry->fields.list[i].value; return result; } static int readTagLineSeek(tagFile * const file, const off_t pos) { int result = 0; if (fseek(file->fp, pos, SEEK_SET) == 0) { result = readTagLine(file); /* read probable partial line */ if (pos > 0 && result) result = readTagLine(file); /* read complete line */ } return result; } static int nameComparison(tagFile * const file) { int result; if (file->search.ignorecase) { if (file->search.partial) result = strnuppercmp(file->search.name, file->name.buffer, file->search.nameLength); else result = struppercmp(file->search.name, file->name.buffer); } else { if (file->search.partial) result = strncmp(file->search.name, file->name.buffer, file->search.nameLength); else result = strcmp(file->search.name, file->name.buffer); } return result; } static void findFirstNonMatchBefore(tagFile * const file) { #define JUMP_BACK 512 int more_lines; int comp; off_t start = file->pos; off_t pos = start; do { if (pos < (off_t) JUMP_BACK) pos = 0; else pos = pos - JUMP_BACK; more_lines = readTagLineSeek(file, pos); comp = nameComparison(file); } while (more_lines && comp == 0 && pos > 0 && pos < start); } static tagResult findFirstMatchBefore(tagFile * const file) { tagResult result = TagFailure; int more_lines; off_t start = file->pos; findFirstNonMatchBefore(file); do { more_lines = readTagLine(file); if (nameComparison(file) == 0) result = TagSuccess; } while (more_lines && result != TagSuccess && file->pos < start); return result; } static tagResult findBinary(tagFile * const file) { tagResult result = TagFailure; off_t lower_limit = 0; off_t upper_limit = file->size; off_t last_pos = 0; off_t pos = upper_limit / 2; while (result != TagSuccess) { if (!readTagLineSeek(file, pos)) { /* in case we fell off end of file */ result = findFirstMatchBefore(file); break; } else if (pos == last_pos) { /* prevent infinite loop if we backed up to beginning of file */ break; } else { const int comp = nameComparison(file); last_pos = pos; if (comp < 0) { upper_limit = pos; pos = lower_limit + ((upper_limit - lower_limit) / 2); } else if (comp > 0) { lower_limit = pos; pos = lower_limit + ((upper_limit - lower_limit) / 2); } else if (pos == 0) result = TagSuccess; else result = findFirstMatchBefore(file); } } return result; } static tagResult findSequential(tagFile * const file) { tagResult result = TagFailure; if (file->initialized) { while (result == TagFailure && readTagLine(file)) { if (nameComparison(file) == 0) result = TagSuccess; } } return result; } static tagResult find(tagFile * const file, tagEntry * const entry, const char *const name, const int options) { tagResult result = TagFailure; file->search.name = name; file->search.nameLength = strlen(name); file->search.partial = (options & TAG_PARTIALMATCH) != 0; file->search.ignorecase = (options & TAG_IGNORECASE) != 0; fseek(file->fp, 0, SEEK_END); file->size = ftell(file->fp); rewind(file->fp); if ((file->sortMethod == TAG_SORTED && !file->search.ignorecase) || (file->sortMethod == TAG_FOLDSORTED && file->search.ignorecase)) result = findBinary(file); else result = findSequential(file); if (result != TagSuccess) file->search.pos = file->size; else { file->search.pos = file->pos; if (entry != NULL) parseTagLine(file, entry); } return result; } static tagResult findNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if ((file->sortMethod == TAG_SORTED && !file->search.ignorecase) || (file->sortMethod == TAG_FOLDSORTED && file->search.ignorecase)) { result = tagsNext(file, entry); if (result == TagSuccess && nameComparison(file) != 0) result = TagFailure; } else { result = findSequential(file); if (result == TagSuccess && entry != NULL) parseTagLine(file, entry); } return result; } /* * EXTERNAL INTERFACE */ extern tagFile *tagsOpen(const char *const filePath, tagFileInfo * const info) { return initialize(filePath, info); } extern tagResult tagsSetSortType(tagFile * const file, const sortType type) { tagResult result = TagFailure; if (file != NULL && file->initialized) { file->sortMethod = type; result = TagSuccess; } return result; } extern tagResult tagsFirst(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) { gotoFirstLogicalTag(file); result = readNext(file, entry); } return result; } extern tagResult tagsNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = readNext(file, entry); return result; } extern const char *tagsField(const tagEntry * const entry, const char *const key) { const char *result = NULL; if (entry != NULL) result = readFieldValue(entry, key); return result; } extern tagResult tagsFind(tagFile * const file, tagEntry * const entry, const char *const name, const int options) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = find(file, entry, name, options); return result; } extern tagResult tagsFindNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = findNext(file, entry); return result; } extern tagResult tagsClose(tagFile * const file) { tagResult result = TagFailure; if (file != NULL && file->initialized) { terminate(file); result = TagSuccess; } return result; } /* vi:set tabstop=8 shiftwidth=4: */ qdevelop-v0.28/src/QIComplete/parse.cpp0000644000175000017500000003764411362261065017053 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #include #include #include #include #include "parse.h" #include "tree.h" #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); char* Parse::scanForIdent(const char **expr) { static char ident[256]; int valid_chars = 0; /* number of identified characters in the ident string */ char c; while ((c = **expr) != '\0') { if (valid_chars == 0 && isspace(c)) { (*expr)++; continue; } // XXX: Namespace support else if (isalpha(c) || c == '_') // ???: || c == ':') { ident[valid_chars] = c; if (++valid_chars == 255) { ident[255] = '\0'; return ident; } } /* a digit may be part of an ident but not from the start */ else if (isdigit(c)) { if (valid_chars) { ident[valid_chars] = c; if (++valid_chars == 255) { ident[255] = '\0'; return ident; } } else return NULL; } else break; (*expr)++; } if (valid_chars) { ident[valid_chars] = '\0'; return ident; } else return NULL; } bool Parse::scanForFuncdef(const QString &expr) { const char *pExpr = expr.toAscii(); char c; while ((c = *pExpr) != '\0') { switch (c) { case ' ': case '\t': case '\n': pExpr++; continue; case '(': return true; default: return false; } } return false; } QString Parse::getTypeOfToken(const QString &ident, const QString &className, Scope * scope, bool token_is_function) { /* if we have a variable and already found a local definition, just return it after duplicating */ if (!token_is_function && scope->localdef.length() && ident!="this") return scope->localdef; /* if the identifier is this-> return the current class */ if (ident == "this") { return scope->scope; } Tree *tree = NULL; if (className.length()) { tree = Tree::buildInheritanceTree(className); if (!tree) return NULL; } tagFileInfo info; tagEntry entry; tagFile *tfile = tagsOpen(tagsFilePath.toAscii(), &info); if (tfile && info.status.opened) { if (tagsFind(tfile, &entry, ident.toAscii(), TAG_OBSERVECASE | TAG_FULLMATCH) == TagSuccess) { do { if (tree && !tree->isMemberOfScope(&entry, scope)) continue; const char *kind = tagsField(&entry, "kind"); if (token_is_function) /* only list if tag is a function */ { if (!kind || (strcmp(kind, "function") && strcmp(kind, "prototype"))) continue; } else /* or a variable */ { //brc: add externvar for extern variables like cout if (!kind || (strcmp(kind, "variable") && strcmp(kind, "externvar") //brc: namespace workarround: add namespace && strcmp(kind, "namespace") && strcmp(kind, "member"))) continue; } /* need to duplicate the pattern, don't ask me why */ QString type = extractTypeQualifier(entry.address.pattern, ident); if(tree) tree->freeTree(); tagsClose(tfile); return type; } while (tagsFindNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } return NULL; } QString Parse::extractTypeQualifier(const QString &str, const QString &varName) { #define STRING "\".*\"" #define BRACKETEXPR "\\{.*\\}" //#define IDENT "[a-zA-Z_][a-zA-Z0-9_]*" //#define IDENT "[a-zA-Z_:][a-zA-Z0-9_:]*" #define IDENT "[a-zA-Z_:][a-zA-Z0-9_:]*" #define WS "[ \t\r\n]*" #define PTR "[\\*&]?\\*?" #define INITIALIZER "=(" WS IDENT WS ")|=(" WS STRING WS ")|=(" WS BRACKETEXPR WS ")" #define CONSTRUCTOR "(\\(" WS IDENT WS "\\))|(\\(" WS STRING WS "\\))" #define ARRAY WS "\\[" WS "[0-9]*" WS "\\]" WS QString pattern = "(" IDENT ")" // the 'std' in example a) "(::" IDENT ")*" // ::vector "(" WS "<[^>;]*>)?[ \t\n*&]{1}" // "(" WS PTR WS IDENT WS "(" ARRAY ")*" WS "((" INITIALIZER ")?|(" CONSTRUCTOR ")?)" WS "," WS ")*" // other variables for the same ident (string i,j,k;) "(" WS "[*&])?"; // check again for pointer/reference type QRegExp rx(pattern + WS + varName + "[^.-\\w]"); if( varName.isEmpty() ) return QString(); QString text = simplifiedText( str ); int pos = -1; int begin = -1; while( (pos = text.lastIndexOf(varName, begin) ) != -1 ) { begin = pos; while( begin>0 && text.at(begin)!= '\n' ) begin--; int end = pos; while( end and ( */ QByteArray array(expr.toLocal8Bit() ); if( !array.count() ) return false; unsigned long len = array.length(); const char *first = array.data(), *start = first + len; while (--start >= first && start < (first + len) ) { /* skip brackets */ if (brackets > 0 || square_brackets > 0) { if (*start == '(') --brackets; else if (*start == ')') ++brackets; else if (*start == '[') --square_brackets; else if (*start == ']') ++square_brackets; continue; } /* identifier */ if (isdigit(*start)) in_ident = false; else if (isalpha(*start) || *start == '_') in_ident = true; else { switch (*start) { /* skip whitespace */ case ' ': case '\t': if (in_ident) goto extract; else { in_ident = false; continue; } /* continue searching to the left, if we * have a . or -> accessor */ case '.': if (in_ident && extract_ident) { const char *ident = start + 1; if (num_stack < max_items) stack[num_stack++] = ident; else return false; } in_ident = false; extract_ident = true; continue; case '>': /* pointer access */ case ':': /* static access */ if ((*start == '>' && (start - 1 >= first && *(start - 1) == '-')) || (*start == ':' && (start - 1 >= first && *(start - 1) == ':'))) { if (in_ident && extract_ident) { const char *ident = start + 1; if (num_stack < max_items) stack[num_stack++] = ident; else return false; } in_ident = false; extract_ident = true; --start; continue; } else { start++; goto extract; } case '(': /* start of a function */ if (extract_ident) { start++; goto extract; } else { extract_ident = true; in_ident = false; break; } case ')': if (in_ident) /* probably a cast - (const char*)str */ { start++; goto extract; } brackets++; break; case ']': if (in_ident) { start++; goto extract; } square_brackets++; break; default: start++; goto extract; } } } extract: /* ident is the leftmost token, stack[*] the ones to the right * Example: str.left(2,5).toUpper() * ^^^ ^^^^ ^^^^^^^ * ident stack[1] stack[0] */ ident = scanForIdent(&start); if (!ident) return false; /* we need this little kludge with old_type to avoid mem leaks */ QString type, old_type; /* for static access, parsing is done, just return the identifier */ if (exp->access != AccessStatic) { QString saved_start = start; // start can change, so we save it getScopeAndLocals(scope, expr, ident); /* if we have the start of a function/method, don't return the type * of this function, but className, which it is member of */ type = getTypeOfToken(ident, NULL, scope, scanForFuncdef(saved_start)); /* members can't be local variables */ scope->localdef[0] = '\0'; while (type!="" && num_stack > 0) { ident = scanForIdent(&stack[--num_stack]); old_type = type; //: namespace workaround: if the "type" of an identifier is namespace ignore it if (type == "namespace") old_type = ""; //<\end brc code> type = getTypeOfToken(ident, old_type.toAscii(), scope, scanForFuncdef(stack[num_stack])); } } else /* static member */ type = ident; /* copy result into passed Expression argument */ if (type!="" && !(exp->access == AccessInFunction)) { exp->className = type; exp->function[0] = '\0'; return true; } else if (exp->access == AccessInFunction) { exp->className = old_type; exp->function = ident; return true; } return false; } Expression Parse::parseExpression(QString expression, Scope * scope, bool showAllResults) { Expression exp; exp.access = ParseError; int len = expression.length(); if (len < 1) return exp; // we found that the user has beginning to write if(!showAllResults) { QByteArray array(expression.toLocal8Bit() ); if( !array.count() ) return exp; const char *start = array.data(), *p = start; //const char *start = expression.toLocal8Bit(), *p = start; while (*p) p++; p--; while (p != start && *p != '.' && *p != '\n' && *p != '\r' && *p != ' ' && *p != '\t' && *p != ';' && *p != '{' && *p != '}' && *p != '(' && *p != ',' && (p-1) != start && (*p != '>' || *(p - 1) != '-') && (*p != ':' || *(p - 1) != ':')) p--; exp.writing = p+1; } /* A global function should be completed, if nothing else is found */ exp.access = AccessGlobal; bool allow_AccessInFunction = true; // false, when other characters than whitespace were typed /* search for the type of the correct completion */ while (--len >= 0) { char last = ((const char*)expression.toAscii())[len]; switch (last) { case ' ': case '\t': /* skip initial spaces */ if (exp.access == AccessGlobal) { /* exp.access = ParseError;*/ continue; } else { exp.access = AccessGlobal; goto extract; } case '>': if (len && expression[len - 1] == '-') { exp.access = AccessPointer; expression[len + 1] = '\0'; /* truncate the string */ goto extract; } else { exp.access = AccessGlobal; /* XXX: AccessError ? */ goto extract; } case '.': exp.access = AccessMembers; expression[len + 1] = '\0'; /* truncate the string */ goto extract; case ':': if (len && expression[len - 1] == ':') { exp.access = AccessStatic; expression[len + 1] = '\0'; /* truncate the string */ goto extract; } else { exp.access = AccessGlobal; goto extract; } case '(': if (allow_AccessInFunction) { exp.access = AccessInFunction; expression[len + 1] = '\0'; /* truncate the string */ } goto extract; default: if (isalpha(last) || last == '_') { /* we only list function definitions if after the opening * ( bracket of the function is no identifier */ allow_AccessInFunction = false; break; } else goto extract; } } extract: /* now extract the type out of the string */ if (exp.access == AccessMembers || exp.access == AccessPointer || exp.access == AccessStatic || exp.access == AccessInFunction) { if (!getTypeOfExpression(expression.toAscii(), &exp, scope)) exp.access = ParseError; } else if (exp.access == AccessGlobal) getScopeAndLocals(scope, expression.toAscii(), NULL); return exp; } Tag Parse::prettifyTag(const tagEntry * entry) { Tag tag; tag.name = entry->name; tag.kind = tagsField(entry, "kind"); tag.access = tagsField(entry, "access"); tag.signature = tagsField(entry, "signature"); tag.isFunction = (tag.signature.length()); char *p = (char *) entry->address.pattern; /* for a macro the pattern is already parsed */ if (tag.kind == "macro") { /* NOTE: exuberant-ctags 5.5.4 does not provide a valid pattern for found macros * work around it, by getting the line myself */ char pat_macro[512]; unsigned long line = entry->address.lineNumber; if (line == 0) /* sometimes ctags can't find the correct line */ return tag; FILE *fileMacro = fopen(entry->file, "r"); if (fileMacro) { while ((p = fgets(pat_macro, 512, fileMacro)) != NULL) { line--; if (line <= 0) { /* remove leading spaces */ p++; /* skip over # - it is added later again */ while (*p == ' ' || *p == '\t') p++; tag.longName = '#' + p; /* remove new line at the end */ tag.longName.remove(tag.longName.length() - 1, 1); break; } } tag.longName += " [macro]"; fclose(fileMacro); return tag; } } /* special handling for enumerator */ if (tag.kind == "enumerator") { /* skip whitespace from variable/function patterns */ size_t skip = strspn(p, "/^ \t"); p += skip; /* remove trailing $/ characters */ char *pos = NULL; if ((pos = strstr(p, "$/")) != NULL) *pos = '\0'; /* replace \/\/ and \/ * *\/ to correctly show comments */ while ((pos = strstr(p, "\\/\\/")) != NULL) memcpy(pos, " //", 4); while ((pos = strstr(p, "\\/*")) != NULL) memcpy(pos, " /*", 3); while ((pos = strstr(p, "*\\/")) != NULL) memcpy(pos, " */", 3); tag.longName += QString(p) + " [enumerator]"; return tag; } size_t skip = strspn(p, "/^ \t"); p += skip; /* remove trailing $/ characters */ char *pos = NULL; if ((pos = strstr(p, "$/")) != NULL) *pos = '\0'; tag.longName += p; /* if it is a function, add signature as well */ if (tag.signature.length()) tag.parameters += tag.signature; if (tag.access.length() && tag.access == "private" || tag.access == "protected") tag.longName += '[' + tag.access + ']'; return tag; } bool Parse::getScopeAndLocals(Scope * sc, const QString &expr, const QString &ident) { // initialize scope if nothing better is found sc->scope = ""; sc->localdef = ""; /* create a tags file for `expr' with function names only. * The function with the highest line number is our valid scope * --sort=no, because tags generation probably faster, and * so I just have to look for the last entry to find 'my' tag */ QString command = ctagsCmdPath + " --language-force=c++ --sort=no --fields=fKmnsz --c++-kinds=fn -o \"" + smallTagsFilePath + "\" \"" + parsedFilePath + '\"'; // I don't process any user input, so system() should be safe enough QProcess ctags; ctags.execute(command); QFile::remove (parsedFilePath); if (ctags.exitStatus() == QProcess::CrashExit) return false; /* find the last entry, this is our current scope */ tagFileInfo info; tagFile *tfile = tagsOpen(smallTagsFilePath.toAscii(), &info); tagEntry entry; const char *scope = NULL; if (tfile && info.status.opened) { if (tagsFirst(tfile, &entry) == TagSuccess) { do scope = tagsField(&entry, "class"); while (tagsNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } /* must be before the 'type = extract_type_qualifier()' code, which modifies scope */ if (scope) sc->scope = scope; /* get local definition (if any) */ if (ident!="") { QString type = extractTypeQualifier(expr, ident); if (type.length()) { sc->localdef = type; } else sc->localdef = ""; } QFile::remove (smallTagsFilePath); return true; } qdevelop-v0.28/src/QIComplete/tree.h0000644000175000017500000000413411362261065016331 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #ifndef __TREE_H__ #define __TREE_H__ #include #include #include "../InitCompletion.h" #include "parse.h" typedef enum { NOT_FOUND = 0, DIRECT_HIT, SUBCLASS } Match; /* this struct holds the inheritance information */ class Tree { public: static InitCompletion *parent; QString name; // the name of the class QList inherits; // next elements in the tree /* * Build an inheritance tree for classes * Looks like: * * --- subclass1 * rootclass < * --- subclass2 -- subclass2_1 --> subclass3 * \ subclass2_2 * * Caller must free the tree with * freeTree() after calling this function */ static Tree *buildInheritanceTree(const QString &className); /* free()'s all memory allocated of a Tree* */ void freeTree(); /* * This function searches a given Tree for a className name * and returns if the className is the root element of the tree * (=DIRECT_HIT), or a subclass */ Match findInTree(const QString &className); /* when we find a tag, the following conditions must be met, to show the tag: * - method must be part of a className (key=className) * - access permissions (private, protected, public) must match. * - FIXME: method must not be pure virtual * - no static method */ bool isMemberOfScope(const tagEntry * entry, const Scope * scope); /* * parses a tags file to show all className members * relative to the scope of another className */ static QList < Tag > findEntries(const Expression * exp, const Scope * scope); private: void addTreeChild(const QString &className); }; #endif /* __TREE_H__ */ qdevelop-v0.28/src/QIComplete/readtags.h0000644000175000017500000002124211362261065017163 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Darren Hiebert and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the ctags project ********************************************************************************************************/ /* * This file defines the public interface for looking up tag entries in tag * files. * * The functions defined in this interface are intended to provide tag file * support to a software tool. The tag lookups provided are sufficiently fast * enough to permit opening a sorted tag file, searching for a matching tag, * then closing the tag file each time a tag is looked up (search times are * on the order of hundreths of a second, even for huge tag files). This is * the recommended use of this library for most tool applications. Adhering * to this approach permits a user to regenerate a tag file at will without * the tool needing to detect and resynchronize with changes to the tag file. * Even for an unsorted 24MB tag file, tag searches take about one second. */ #ifndef READTAGS_H #define READTAGS_H #ifdef __cplusplus extern "C" { #endif /* * MACROS */ /* Options for tagsSetSortType() */ typedef enum { TAG_UNSORTED, TAG_SORTED, TAG_FOLDSORTED } sortType; /* Options for tagsFind() */ #define TAG_FULLMATCH 0x0 #define TAG_PARTIALMATCH 0x1 #define TAG_OBSERVECASE 0x0 #define TAG_IGNORECASE 0x2 /* * DATA DECLARATIONS */ typedef enum { TagFailure = 0, TagSuccess = 1 } tagResult; struct sTagFile; typedef struct sTagFile tagFile; /* This structure contains information about the tag file. */ typedef struct { struct { /* was the tag file successfully opened? */ int opened; /* errno value when 'opened' is false */ int error_number; } status; /* information about the structure of the tag file */ struct { /* format of tag file (1 = original, 2 = extended) */ short format; /* how is the tag file sorted? */ sortType sort; } file; /* information about the program which created this tag file */ struct { /* name of author of generating program (may be null) */ const char *author; /* name of program (may be null) */ const char *name; /* URL of distribution (may be null) */ const char *url; /* program version (may be null) */ const char *version; } program; } tagFileInfo; /* This structure contains information about an extension field for a tag. * These exist at the end of the tag in the form "key:value"). */ typedef struct { /* the key of the extension field */ const char *key; /* the value of the extension field (may be an empty string) */ const char *value; } tagExtensionField; /* This structure contains information about a specific tag. */ typedef struct { /* name of tag */ const char *name; /* path of source file containing definition of tag */ const char *file; /* address for locating tag in source file */ struct { /* pattern for locating source line * (may be NULL if not present) */ const char *pattern; /* line number in source file of tag definition * (may be zero if not known) */ unsigned long lineNumber; } address; /* kind of tag (may by name, character, or NULL if not known) */ const char *kind; /* is tag of file-limited scope? */ short fileScope; /* miscellaneous extension fields */ struct { /* number of entries in `list' */ unsigned short count; /* list of key value pairs */ tagExtensionField *list; } fields; } tagEntry; /* * FUNCTION PROTOTYPES */ /* * This function must be called before calling other functions in this * library. It is passed the path to the tag file to read and a (possibly * null) pointer to a structure which, if not null, will be populated with * information about the tag file. If successful, the function will return a * handle which must be supplied to other calls to read information from the * tag file, and info.status.opened will be set to true. If unsuccessful, * info.status.opened will be set to false and info.status.error_number will * be set to the errno value representing the system error preventing the tag * file from being successfully opened. */ extern tagFile *tagsOpen(const char *const filePath, tagFileInfo * const info); /* * This function allows the client to override the normal automatic detection * of how a tag file is sorted. Permissible values for `type' are * TAG_UNSORTED, TAG_SORTED, TAG_FOLDSORTED. Tag files in the new extended * format contain a key indicating whether or not they are sorted. However, * tag files in the original format do not contain such a key even when * sorted, preventing this library from taking advantage of fast binary * lookups. If the client knows that such an unmarked tag file is indeed * sorted (or not), it can override the automatic detection. Note that * incorrect lookup results will result if a tag file is marked as sorted when * it actually is not. The function will return TagSuccess if called on an * open tag file or TagFailure if not. */ extern tagResult tagsSetSortType(tagFile * const file, const sortType type); /* * Reads the first tag in the file, if any. It is passed the handle to an * opened tag file and a (possibly null) pointer to a structure which, if not * null, will be populated with information about the first tag file entry. * The function will return TagSuccess another tag entry is found, or * TagFailure if not (i.e. it reached end of file). */ extern tagResult tagsFirst(tagFile * const file, tagEntry * const entry); /* * Step to the next tag in the file, if any. It is passed the handle to an * opened tag file and a (possibly null) pointer to a structure which, if not * null, will be populated with information about the next tag file entry. The * function will return TagSuccess another tag entry is found, or TagFailure * if not (i.e. it reached end of file). It will always read the first tag in * the file immediately after calling tagsOpen(). */ extern tagResult tagsNext(tagFile * const file, tagEntry * const entry); /* * Retrieve the value associated with the extension field for a specified key. * It is passed a pointer to a structure already populated with values by a * previous call to tagsNext(), tagsFind(), or tagsFindNext(), and a string * containing the key of the desired extension field. If no such field of the * specified key exists, the function will return null. */ extern const char *tagsField(const tagEntry * const entry, const char *const key); /* * Find the first tag matching `name'. The structure pointed to by `entry' * will be populated with information about the tag file entry. If a tag file * is sorted using the C locale, a binary search algorithm is used to search * the tag file, resulting in very fast tag lookups, even in huge tag files. * Various options controlling the matches can be combined by bit-wise or-ing * certain values together. The available values are: * * TAG_PARTIALMATCH * Tags whose leading characters match `name' will qualify. * * TAG_FULLMATCH * Only tags whose full lengths match `name' will qualify. * * TAG_IGNORECASE * Matching will be performed in a case-insenstive manner. Note that * this disables binary searches of the tag file. * * TAG_OBSERVECASE * Matching will be performed in a case-senstive manner. Note that * this enables binary searches of the tag file. * * The function will return TagSuccess if a tag matching the name is found, or * TagFailure if not. */ extern tagResult tagsFind(tagFile * const file, tagEntry * const entry, const char *const name, const int options); /* * Find the next tag matching the name and options supplied to the most recent * call to tagsFind() for the same tag file. The structure pointed to by * `entry' will be populated with information about the tag file entry. The * function will return TagSuccess if another tag matching the name is found, * or TagFailure if not. */ extern tagResult tagsFindNext(tagFile * const file, tagEntry * const entry); /* * Call tagsTerminate() at completion of reading the tag file, which will * close the file and free any internal memory allocated. The function will * return TagFailure is no file is currently open, TagSuccess otherwise. */ extern tagResult tagsClose(tagFile * const file); #ifdef __cplusplus }; #endif #endif /* vi:set tabstop=8 shiftwidth=4: */ qdevelop-v0.28/src/QIComplete/tree.cpp0000644000175000017500000002563711362261065016677 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" #include #include "tree.h" #include "parse.h" #include "readtags.h" InitCompletion* Tree::parent = NULL; //brc: new subroutine void Tree::addTreeChild(const QString &className) { /* check this class if not already in the tree to * avoid a hangup with a broken (=cirular) tags file */ if (findInTree(className) == NOT_FOUND) { Tree *child = Tree::buildInheritanceTree(className); inherits << child; } } Tree* Tree::buildInheritanceTree(const QString &className) { Tree *root = new Tree; root->name = className; tagEntry entry; tagFileInfo info; tagFile *tfile = tagsOpen(parent->tagsFilePath.toAscii(), &info); //brc: split namespace part and classname char nbuffer[256]; char *nspace = NULL; strncpy(nbuffer, className.toAscii(), 256); nbuffer[255] = '\0'; char *cname = nbuffer; char *p = nbuffer; char *np = NULL; while ((np = strstr(p, "::"))) p = np + 2; if (p != nbuffer) { *(p - 2) = '\0'; nspace = nbuffer; cname = p; } Tree *tree = root; //brc: namespace workaround: if no namespace is present, try to find the class // also in std:: if (!nspace) { char buffer[512]; strcpy(buffer, "std::"); strcat(buffer, cname); tree->addTreeChild(buffer); } int i = 0; // counters if (tfile && info.status.opened) { if (tagsFind(tfile, &entry, cname, TAG_OBSERVECASE | TAG_FULLMATCH) == TagSuccess) { do { //brc:follow typedefs ... if (!strcmp(entry.kind, "typedef") && entry.address.pattern) { const char *field_namespace = tagsField(&entry, "namespace"); if ((nspace && field_namespace && !strcmp(field_namespace, nspace)) || !nspace) { char pattern[256]; strncpy(pattern, entry.address.pattern, 256); pattern[255] = '\0'; char *p = strstr(pattern, "typedef"); if (p && strstr(pattern, cname)) { p += strlen("typedef"); char *p1; if ((p1 = strstr(p, "typename"))) p = p1 + strlen("typename"); if (strstr(p, "struct")) continue; if ((p = strtok(p, " \n\t<"))) { tree->freeTree(); if (nspace) { char buffer[512]; strcpy(buffer, nspace); strcat(buffer, "::"); strcat(buffer, p); return Tree::buildInheritanceTree(buffer); } else { return Tree::buildInheritanceTree(p); } } } } } /* need to get the entry for the class definition */ if (!strcmp(entry.kind, "class") || !strcmp(entry.kind, "struct") || !strcmp(entry.kind, "union")) { /* and look for the entry "inherits" to see which are superclassNamees of className */ for (; i < entry.fields.count; i++) { if (!strcmp(entry.fields.list[i].key, "inherits")) { /* split the inherits string to single classNamees for multiple inheritance */ //char *allinherits = strdup(entry.fields.list[i].value); QString allinherits = entry.fields.list[i].value; char *buffer = NULL; //char *inherit = strtok(allinherits, ","); QString inherit = allinherits.section(",", 0, 0); while (inherit != NULL) { tree->addTreeChild(inherit); /* next token */ //inherit = strtok(buffer, ","); inherit = QString(buffer).section(",", 0, 0); } //free(allinherits); goto end; } } // no more superclassNamees goto end; } } while (tagsFindNext(tfile, &entry)); } end: tagsClose(tfile); } return root; } void Tree::freeTree() { for (int i = 0; i < inherits.size(); i++) inherits[i]->freeTree(); } Match Tree::findInTree(const QString &className) { if ( name == className) return DIRECT_HIT; for (int i = 0; i < inherits.size(); i++) if (inherits[i]->findInTree(className) >= DIRECT_HIT) return SUBCLASS; return NOT_FOUND; } bool Tree::isMemberOfScope(const tagEntry * entry, const Scope * scope) { const char *field_className = tagsField(entry, "class"); const char *field_struct = tagsField(entry, "struct"); const char *field_union = tagsField(entry, "union"); //const char *field_namespace = tagsField(entry, "namespace"); const char *field_access = tagsField(entry, "access"); const char *tag_className = NULL; if (field_className) tag_className = field_className; else if (field_struct) tag_className = field_struct; else if (field_union) tag_className = field_union; else return false; /* tag must be part of (inherited) className to show it */ Match match_tag = findInTree(tag_className); if (match_tag == NOT_FOUND) return false; if (field_union) return true; if (!field_access) return false; if (!strcmp(field_access, "public")) return true; /* if access is not public, current scope must be in one of the * (inherited) classNamees */ Match match_curscope = findInTree(scope->scope); if (!strcmp(field_access, "protected") && match_curscope >= DIRECT_HIT) return true; else if (!strcmp(field_access, "private") && match_curscope == DIRECT_HIT) return true; return false; } TagList Tree::findEntries(const Expression * exp, const Scope * scope) { QList < Tag > TagList; tagEntry entry; tagFileInfo info; tagFile *tfile = tagsOpen(parent->tagsFilePath.toAscii(), &info); char lasttag[256] = ""; /* store last tag to avoid duplicates */ /* create an inheritance tree of our class or current scope, depending what we want to complete */ Tree *tree = NULL; if (exp->access & AccessMembers || exp->access & AccessPointer || exp->access & AccessStatic || exp->access & AccessInFunction) tree = Tree::buildInheritanceTree(exp->className); else if (exp->access & AccessGlobal) tree = Tree::buildInheritanceTree(scope->scope); if (!tree) { printf("Couldn't build inheritance tree\n"); return QList < Tag > (); } /* parse the tags file */ if (tfile && info.status.opened) { /* we can do a binary search for function definitions */ if (exp->access == AccessInFunction && tagsFind(tfile, &entry, exp->function.toAscii(), TAG_FULLMATCH | TAG_OBSERVECASE) == TagSuccess) { do { bool show_this_tag = false; const char *field_kind = tagsField(&entry, "kind"); if (field_kind && (!strcmp(field_kind, "member") || !strcmp(field_kind, "method"))) show_this_tag = tree->isMemberOfScope(&entry, scope); else if (!strcmp(field_kind, "function") || !strcmp(field_kind, "prototype")) { if (exp->className == "") // only a function, not method of a class show_this_tag = true; else show_this_tag = tree->isMemberOfScope(&entry, scope); } if (!show_this_tag) continue; /* output the tag if it is valid and no duplicate either to stdout * or to a file if the -o flag was given */ Tag tag; tag = Parse::prettifyTag(&entry); if ( ( exp->writing.length() && exp->writing[0] == 0 ) || tag.name.startsWith(exp->writing)) TagList << tag; } while (tagsFindNext(tfile, &entry) == TagSuccess); } // otherwise loop through all tags // and filter those which match one of our inherited class names else if (tagsFirst(tfile, &entry) == TagSuccess) { do { bool show_this_tag = false; const char *field_kind = tagsField(&entry, "kind"); const char *field_className = tagsField(&entry, "class"); const char *field_struct = tagsField(&entry, "struct"); const char *field_union = tagsField(&entry, "union"); const char *field_namespace = tagsField(&entry, "namespace"); const char *field_access = tagsField(&entry, "access"); switch (exp->access) { /* * find MEMBERS of classes/structs */ case AccessMembers: case AccessPointer: if (strstr(entry.address.pattern, "static ")) continue; /* Qt 3 defines this, and checking for it does not harm other users */ if (strstr(entry.address.pattern, "QT_STATIC_CONST ")) continue; // don't show destructors, can't call them directly anyways. if ( QString(entry.name).length() && entry.name[0] == '~') { show_this_tag = false; break; } // TODO: namespace support if (field_kind && (!strcmp(field_kind, "member") || !strcmp(field_kind, "function") || !strcmp(field_kind, "prototype") || !strcmp(field_kind, "method"))) show_this_tag = tree->isMemberOfScope(&entry, scope); break; /* * find STATIC functions/variables (everything after a ::) */ case AccessStatic: /* when we find a tag, the following conditions must be met, to show the tag: * - must be part of a className or namespace * - must contain "static" on the line * - must be "public" */ if (field_className) { if (exp->className == QString(field_className) && field_access && !strcmp(field_access, "public")) /* XXX: Workaround ctags limitation and try to find out * ourselves, if this tag is a static one, if it * has "static" in the pattern */ if (strstr(entry.address.pattern, "static ") || strstr(entry.address.pattern, "QT_STATIC_CONST ")) show_this_tag = true; } else if (field_namespace) if (exp->className == QString(field_namespace)) show_this_tag = true; break; // find GLOBAL functions/variables/defines case AccessGlobal: // everthing which is not part of a className or struct matches if (!field_className && !field_struct && !field_union) show_this_tag = true; else // also show locals of current scope show_this_tag = tree->isMemberOfScope(&entry, scope); break; default: // things like if() while() for(), etc. break; } /* output the tag if it is valid and no duplicate either to stdout * or to a file if the -o flag was given */ if (show_this_tag ) { Tag tag; if (exp->access & AccessInFunction) tag = Parse::prettifyTag(&entry); else { strncpy(lasttag, entry.name, 256); tag = Parse::prettifyTag(&entry); } if ( ( exp->writing.length() && exp->writing[0] == 0 ) || tag.name.startsWith(exp->writing)) { TagList << tag; } } } while (tagsNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } else return QList < Tag > (); tree->freeTree(); return TagList; } qdevelop-v0.28/src/QIComplete/parse.h0000644000175000017500000000664211362261065016512 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #ifndef __PARSE_H__ #define __PARSE_H__ #include #include #include "readtags.h" #include "../InitCompletion.h" typedef enum { /* for now, these options are exclusive * but define them as a bitfield for possible * future improvements */ ParseError = 0x00, AccessPointer = 0x01, AccessMembers = 0x02, AccessStatic = 0x04, AccessGlobal = 0x08, AccessInFunction = 0x10 } Access; struct Expression { Access access; QString className; QString function; QString writing; QString text; }; struct Scope { QString scope; // if the cursor is in a function Foo::bar(), store Foo as the scope QString localdef; // stores the type of a local definition or "" if none found }; class Parse { QString ctagsCmdPath; QString tagsFilePath; QString parsedFilePath; QString smallTagsFilePath; public: Parse (const QString &CtagsCmdPath, const QString &TagsFilePath, const QString &ParsedFilePath, const QString &SmallTagsFilePath ) : ctagsCmdPath(CtagsCmdPath), tagsFilePath(TagsFilePath), parsedFilePath(ParsedFilePath), smallTagsFilePath(SmallTagsFilePath) {}; /* * for a given expr="str" and a string="std::string *str = new std::string("test");" * return the type qualifier "std::string" */ QString extractTypeQualifier(const QString &string, const QString &expr); /* * For a given expr "var->xy" or "var::" return `var' * and the AccessModifier (static, member,...) */ Expression parseExpression(QString expr, Scope * scope, bool showAllResults = false); /* fills the passed *exp pointer with information about the current expression * "QWidget w; w.getRect()." will return exp.className=QRect and exp.function=getRect */ bool getTypeOfExpression(const QString &expr, Expression * exp, Scope * scope); /* * prettified tags entry look like these: * rect\nQRect r; * setRect()\nvoid setRect (QRect &rect); */ static Tag prettifyTag(const tagEntry * entry); /* * extracts the scope at the end of a given code `expr' * and save the line of a local variable definition * Example: * * namespace Test { * void MyclassName::function(int var) * { * * If expr is the above code and ident is 'var', return: * scope = "Test::MyclassName" * localdef = "int" */ bool getScopeAndLocals(Scope * sc, const QString &expr, const QString &ident); /* * for a given expression "myvar->getX().toFloat" * the function should just return "myvar" * and move the **expr pointer after the ident * returns NULL, if no identifier is found, and then the value of expr is undefined */ char* scanForIdent(const char **expr); /* if the current identfier is the name of a function */ bool scanForFuncdef(const QString &expr); /* for ident=getRect and className=QWidget return QRect * @param token_is_function = true, if the token is a function or false if a variable * caller must free() the returned string */ QString getTypeOfToken(const QString &ident, const QString &className, Scope * scope, bool token_is_function); }; #endif /* __PARSE_H__ */ qdevelop-v0.28/src/.svn/all-wcprops0000444000175000017500000001720511362261066016273 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 32 /svn/!svn/ver/467/tags/v0.28/src END misc.h K 25 svn:wc:ra_dav:version-url V 39 /svn/!svn/ver/465/tags/v0.28/src/misc.h END cpphighlighter.cpp K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/cpphighlighter.cpp END logbuild.cpp K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/src/logbuild.cpp END newprojectimpl.cpp K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/newprojectimpl.cpp END build.h K 25 svn:wc:ra_dav:version-url V 40 /svn/!svn/ver/465/tags/v0.28/src/build.h END subclassingimpl.h K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/subclassingimpl.h END projectmanager.h K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/projectmanager.h END addnewclassimpl.cpp K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/addnewclassimpl.cpp END shortcutsimpl.cpp K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/shortcutsimpl.cpp END addnewclassvariableimpl.h K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/src/addnewclassvariableimpl.h END parametersimpl.cpp K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/parametersimpl.cpp END projectpropertieimpl.h K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/src/projectpropertieimpl.h END toolscontrolimpl.h K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/toolscontrolimpl.h END addnewimpl.h K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/src/addnewimpl.h END addexistantimpl.cpp K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/addexistantimpl.cpp END debug.h K 25 svn:wc:ra_dav:version-url V 40 /svn/!svn/ver/465/tags/v0.28/src/debug.h END misc.cpp K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/465/tags/v0.28/src/misc.cpp END build.cpp K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/src/build.cpp END textEdit.h K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/textEdit.h END subclassingimpl.cpp K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/subclassingimpl.cpp END designer.cpp K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/src/designer.cpp END projectmanager.cpp K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/projectmanager.cpp END lineedit.h K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/lineedit.h END mainimpl.cpp K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/467/tags/v0.28/src/mainimpl.cpp END newprojectimpl.h K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/newprojectimpl.h END assistant.h K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/src/assistant.h END addnewclassimpl.h K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/addnewclassimpl.h END addnewclassmethodimpl.h K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/src/addnewclassmethodimpl.h END toolscontrolimpl.cpp K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/src/toolscontrolimpl.cpp END shortcutsimpl.h K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/shortcutsimpl.h END addsetgetimpl.cpp K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/addsetgetimpl.cpp END openfileimpl.h K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/465/tags/v0.28/src/openfileimpl.h END lineedit.cpp K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/src/lineedit.cpp END registersimpl.h K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/registersimpl.h END addexistantimpl.h K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/addexistantimpl.h END findfileimpl.cpp K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/findfileimpl.cpp END addscopeimpl.cpp K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/addscopeimpl.cpp END designer.h K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/designer.h END assistant.cpp K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/assistant.cpp END tabwidget.cpp K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/tabwidget.cpp END mainimpl.h K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/mainimpl.h END addnewclassmethodimpl.cpp K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/src/addnewclassmethodimpl.cpp END optionsimpl.h K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/optionsimpl.h END treeclasses.h K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/treeclasses.h END openfileimpl.cpp K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/openfileimpl.cpp END main.cpp K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/467/tags/v0.28/src/main.cpp END treeproject.cpp K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/treeproject.cpp END editor.cpp K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/editor.cpp END linenumbers.h K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/linenumbers.h END selectionborder.h K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/selectionborder.h END registersimpl.cpp K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/registersimpl.cpp END addsetgetimpl.h K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/addsetgetimpl.h END stackimpl.h K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/src/stackimpl.h END InitCompletion.h K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/InitCompletion.h END logbuild.h K 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/logbuild.h END cpphighlighter.h K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/cpphighlighter.h END findfileimpl.h K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/465/tags/v0.28/src/findfileimpl.h END addscopeimpl.h K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/465/tags/v0.28/src/addscopeimpl.h END optionsimpl.cpp K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/optionsimpl.cpp END treeclasses.cpp K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/treeclasses.cpp END tabwidget.h K 25 svn:wc:ra_dav:version-url V 44 /svn/!svn/ver/465/tags/v0.28/src/tabwidget.h END addnewclassvariableimpl.cpp K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/src/addnewclassvariableimpl.cpp END projectpropertieimpl.cpp K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/src/projectpropertieimpl.cpp END linenumbers.cpp K 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/src/linenumbers.cpp END selectionborder.cpp K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/selectionborder.cpp END addnewimpl.cpp K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/465/tags/v0.28/src/addnewimpl.cpp END debug.cpp K 25 svn:wc:ra_dav:version-url V 42 /svn/!svn/ver/465/tags/v0.28/src/debug.cpp END stackimpl.cpp K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/stackimpl.cpp END textEdit.cpp K 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/src/textEdit.cpp END pluginsinterfaces.h K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/pluginsinterfaces.h END parametersimpl.h K 25 svn:wc:ra_dav:version-url V 49 /svn/!svn/ver/465/tags/v0.28/src/parametersimpl.h END editor.h K 25 svn:wc:ra_dav:version-url V 41 /svn/!svn/ver/465/tags/v0.28/src/editor.h END treeproject.h K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/465/tags/v0.28/src/treeproject.h END InitCompletion.cpp K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/InitCompletion.cpp END qdevelop-v0.28/src/.svn/entries0000444000175000017500000002654111362261066015504 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/src http://qdevelop.googlecode.com/svn 2010-04-14T10:43:21.472790Z 467 jlbiord 31becf8c-a71e-0410-8e62-47ffcaada4dd misc.h file 2010-04-17T07:24:38.206880Z b04c6502a0b4fa15a0619320350e142f 2010-03-20T08:50:41.072009Z 462 jlbiord 1366 cpphighlighter.cpp file 2010-04-17T07:24:38.206880Z 3a1e39e0739440be375971df7e103c11 2010-03-20T08:50:41.072009Z 462 jlbiord 13707 logbuild.cpp file 2010-04-17T07:24:38.206880Z 799ba11f30eb3506737f288868e358f3 2010-03-20T08:50:41.072009Z 462 jlbiord 4628 newprojectimpl.cpp file 2010-04-17T07:24:38.206880Z f1392579ae6d20cf3081db2a61d6e557 2010-03-20T08:50:41.072009Z 462 jlbiord 11335 build.h file 2010-04-17T07:24:38.210878Z 1db75eb9e210a4ac2a9af1c06617ddec 2010-03-20T08:50:41.072009Z 462 jlbiord 1922 subclassingimpl.h file 2010-04-17T07:24:38.210878Z 68b4bc2f34095f07f36b377c4acaf6df 2010-03-20T08:50:41.072009Z 462 jlbiord 2166 projectmanager.h file 2010-04-17T07:24:38.210878Z c88ff8282d2d8c093260f8b0df9db00f 2010-03-20T08:50:41.072009Z 462 jlbiord 5229 addnewclassimpl.cpp file 2010-04-17T07:24:38.210878Z ef35c5e3765cbae1d1fe7c1da50993fd 2010-03-20T08:50:41.072009Z 462 jlbiord 7162 shortcutsimpl.cpp file 2010-04-17T07:24:38.210878Z 6c2f52717d49104a07b3d53aeed65080 2010-03-20T08:50:41.072009Z 462 jlbiord 3272 addnewclassvariableimpl.h file 2010-04-17T07:24:38.214881Z ea5330b95491cb65992247e94b7cfdbe 2010-03-20T08:50:41.072009Z 462 jlbiord 2066 parametersimpl.cpp file 2010-04-17T07:24:38.214881Z be61c15da830f58003d4ee184580f431 2010-03-20T08:50:41.072009Z 462 jlbiord 4558 projectpropertieimpl.h file 2010-04-17T07:24:38.214881Z 4a202bf8b55b0fb26906454f9188c7ba 2010-03-20T08:50:41.072009Z 462 jlbiord 2436 toolscontrolimpl.h file 2010-04-17T07:24:38.214881Z 3f65c0f077c54059aeba70cfacb3a521 2010-03-20T08:50:41.072009Z 462 jlbiord 2317 addnewimpl.h file 2010-04-17T07:24:38.218880Z 3439017616a8504879ce3b50b93a3621 2010-03-20T08:50:41.072009Z 462 jlbiord 1396 addexistantimpl.cpp file 2010-04-17T07:24:38.218880Z 0134d2788bcf924478d280390d66c4e4 2010-03-20T08:50:41.072009Z 462 jlbiord 3865 debug.h file 2010-04-17T07:24:38.218880Z 01399c23badfb2ce6f8a96a050841a41 2010-03-20T08:50:41.072009Z 462 jlbiord 2507 misc.cpp file 2010-04-17T07:24:38.218880Z af6af19d2696e67f9ff0b0147774398d 2010-03-20T08:50:41.072009Z 462 jlbiord 8832 build.cpp file 2010-04-17T07:24:38.222880Z 9ff95f506e6dd66e5a7155205dcbc28a 2010-03-20T08:50:41.072009Z 462 jlbiord 7825 textEdit.h file 2010-04-17T07:24:38.222880Z b29dfcfcc9a6dca420f73579059e7ba4 2010-03-20T08:50:41.072009Z 462 jlbiord 6830 subclassingimpl.cpp file 2010-04-17T07:24:38.222880Z b9e8bf3a1a0d419abc732a7d24aa5663 2010-03-20T08:50:41.072009Z 462 jlbiord 16908 designer.cpp file 2010-04-17T07:24:38.222880Z 9b3f80b02e83ca39878aaf9ebde56a67 2010-03-20T08:50:41.072009Z 462 jlbiord 2135 projectmanager.cpp file 2010-04-17T07:24:38.222880Z e695a5dabe340de78a8a549e0a72caf4 2010-03-20T08:50:41.072009Z 462 jlbiord 85775 lineedit.h file 2010-04-17T07:24:38.226880Z b8a0fd9106bd09bd08e6dc95fcac22cc 2010-03-20T08:50:41.072009Z 462 jlbiord 1205 mainimpl.cpp file 2010-04-17T07:24:38.226880Z 4c4a9232b7694d47c45083ecbece9b30 2010-04-14T10:43:21.472790Z 467 jlbiord 97160 newprojectimpl.h file 2010-04-17T07:24:38.226880Z e74153bb6fe6239064fb65b3c118a552 2010-03-20T08:50:41.072009Z 462 jlbiord 1632 assistant.h file 2010-04-17T07:24:38.226880Z 099e290c9ce536202fffbccb673285c2 2010-03-20T08:50:41.072009Z 462 jlbiord 1622 addnewclassimpl.h file 2010-04-17T07:24:38.226880Z 6dccbc0c8b7de7e25daa851a154e3b17 2010-03-20T08:50:41.072009Z 462 jlbiord 1494 addnewclassmethodimpl.h file 2010-04-17T07:24:38.230879Z 6577e1f29ee8d74b0d7d4107d6331f12 2010-03-20T08:50:41.072009Z 462 jlbiord 1494 QIComplete dir toolscontrolimpl.cpp file 2010-04-17T07:24:38.230879Z 7fdd73f43a8a091d1df6d71004850593 2010-03-20T08:50:41.072009Z 462 jlbiord 9536 shortcutsimpl.h file 2010-04-17T07:24:38.230879Z 563af7de744ca2efe7718ff0bac5d5fd 2010-03-20T08:50:41.072009Z 462 jlbiord 1279 addsetgetimpl.cpp file 2010-04-17T07:24:38.230879Z 1687377c892ede2206b8598dd8101518 2010-03-20T08:50:41.072009Z 462 jlbiord 7252 openfileimpl.h file 2010-04-17T07:24:38.230879Z 323152068879c44d4822c3a44db3c07b 2010-03-20T08:50:41.072009Z 462 jlbiord 1559 lineedit.cpp file 2010-04-17T07:24:38.230879Z b319433ab44a53c4e50e40399a89add6 2010-03-20T08:50:41.072009Z 462 jlbiord 1092 registersimpl.h file 2010-04-17T07:24:38.234878Z a406922e06a0aecdf75fcfa80497c534 2007-10-06T15:18:52.329759Z 250 jlbiord 366 addexistantimpl.h file 2010-04-17T07:24:38.234878Z bc0f0fb47d148fe0d120d53fafc97751 2010-03-20T08:50:41.072009Z 462 jlbiord 1392 findfileimpl.cpp file 2010-04-17T07:24:38.234878Z 8549ea6cc03ce800712c011dee99981c 2010-03-20T08:50:41.072009Z 462 jlbiord 6826 addscopeimpl.cpp file 2010-04-17T07:24:38.234878Z 2ce942506c8fb91ddd6f8558351e2600 2010-03-20T08:50:41.072009Z 462 jlbiord 1169 designer.h file 2010-04-17T07:24:38.234878Z 50527b1a3eac7c0ad9954964727948d6 2010-03-20T08:50:41.072009Z 462 jlbiord 1388 assistant.cpp file 2010-04-17T07:24:38.234878Z 7e87cb43f36bc3a636257739e3673dae 2010-03-20T08:50:41.072009Z 462 jlbiord 2976 tabwidget.cpp file 2010-04-17T07:24:38.238878Z 37c3b20e8bba1d779f1030dfa5d14592 2010-03-20T08:50:41.072009Z 462 jlbiord 7348 mainimpl.h file 2010-04-17T07:24:38.238878Z a17c0917722b81277751888712b54612 2010-03-20T08:50:41.072009Z 462 jlbiord 9242 addnewclassmethodimpl.cpp file 2010-04-17T07:24:38.238878Z 1cc9ae28b4759077ddfa83fbc75a99e5 2010-03-20T08:50:41.072009Z 462 jlbiord 8042 optionsimpl.h file 2010-04-17T07:24:38.238878Z 9639de1c92187685d4ff8be295874461 2010-03-20T08:50:41.072009Z 462 jlbiord 2603 treeclasses.h file 2010-04-17T07:24:38.238878Z 7c3e2b5efa8a2db242c861342264c4c4 2010-03-20T08:50:41.072009Z 462 jlbiord 4006 openfileimpl.cpp file 2010-04-17T07:24:38.242876Z 4d03c4ac7fcef8d2c6e123c7afc8a532 2010-03-20T08:50:41.072009Z 462 jlbiord 4555 main.cpp file 2010-04-17T07:24:38.242876Z c5ad26c1d13d8d52cb647048d7bb73ee 2010-04-14T10:43:21.472790Z 467 jlbiord 4978 treeproject.cpp file 2010-04-17T07:24:38.242876Z f6d0a141306ea5d82830d93d8c5bd824 2010-03-20T08:50:41.072009Z 462 jlbiord 11135 editor.cpp file 2010-04-17T07:24:38.242876Z 2f012b3a779942b61f4fa8a532c3af90 2010-03-20T08:50:41.072009Z 462 jlbiord 35988 linenumbers.h file 2010-04-17T07:24:38.242876Z 6b0fb370c668cc4c784ee0f64477c75b 2010-03-20T08:50:41.072009Z 462 jlbiord 2686 selectionborder.h file 2010-04-17T07:24:38.242876Z 93e9fbca599ae1f7cca17d80443e16eb 2010-03-20T08:50:41.072009Z 462 jlbiord 1570 registersimpl.cpp file 2010-04-17T07:24:38.246875Z fd899bf782ba38773f7f18777678e7d5 2007-10-11T16:15:32.582213Z 253 ralfjung-e@gmx.de 1803 addsetgetimpl.h file 2010-04-17T07:24:38.246875Z 5945749a6e1de20aac6e282a31a4c9cc 2010-03-20T08:50:41.072009Z 462 jlbiord 1693 stackimpl.h file 2010-04-17T07:24:38.246875Z 2f55e76c34db476052fa93286bd76911 2010-03-20T08:50:41.072009Z 462 jlbiord 1541 InitCompletion.h file 2010-04-17T07:24:38.246875Z cbc2621f0c51c5dd9ffd5eabc84eddb1 2008-05-06T17:00:37.401664Z 319 jlbiord 3564 logbuild.h file 2010-04-17T07:24:38.246875Z 75da966a204897a6cab8d3ff26d552e9 2010-03-20T08:50:41.072009Z 462 jlbiord 2293 cpphighlighter.h file 2010-04-17T07:24:38.246875Z 77957d0b097b2c0d20c6cde9f84187b3 2010-03-20T08:50:41.072009Z 462 jlbiord 4785 findfileimpl.h file 2010-04-17T07:24:38.250877Z 102c0976bfa32ab44d933e564cc2a4e8 2010-03-20T08:50:41.072009Z 462 jlbiord 1689 addscopeimpl.h file 2010-04-17T07:24:38.250877Z 3033392384fa7992bb054f530790ca0f 2010-03-20T08:50:41.072009Z 462 jlbiord 1244 optionsimpl.cpp file 2010-04-17T07:24:38.254879Z 9f928260de9aee0e79e92564e5933cb7 2010-03-20T08:50:41.072009Z 462 jlbiord 14413 treeclasses.cpp file 2010-04-17T07:24:38.250877Z 4d8ed0d0e75dea50a7db183c08fa1a02 2010-03-20T08:50:41.072009Z 462 jlbiord 34754 tabwidget.h file 2010-04-17T07:24:38.254879Z 507539c4705954126699c4c9bd4219fe 2010-03-20T08:50:41.072009Z 462 jlbiord 1761 addnewclassvariableimpl.cpp file 2010-04-17T07:24:38.254879Z 3948637a511e7b7a88cf86a19af5226f 2010-03-20T08:50:41.072009Z 462 jlbiord 8402 projectpropertieimpl.cpp file 2010-04-17T07:24:38.254879Z 778ae314ba07f9c02736276e4cc007d2 2010-03-20T08:50:41.072009Z 462 jlbiord 38146 linenumbers.cpp file 2010-04-17T07:24:38.254879Z 9b81dbefe4f95b8293af83845a9695c6 2010-03-20T08:50:41.072009Z 462 jlbiord 9228 selectionborder.cpp file 2010-04-17T07:24:38.258878Z 32ac0d28f2f76d0eedcb56571b4b8463 2010-03-20T08:50:41.072009Z 462 jlbiord 2653 addnewimpl.cpp file 2010-04-17T07:24:38.258878Z 5f407843c6a8c05b11d34c3604663374 2010-03-20T08:50:41.072009Z 462 jlbiord 4706 debug.cpp file 2010-04-17T07:24:38.258878Z aaafe7d5e14f469ffded12f5909def8d 2010-03-20T08:50:41.072009Z 462 jlbiord 12733 stackimpl.cpp file 2010-04-17T07:24:38.258878Z 739c816f26378a075b07b9f0ea4e9fee 2010-03-20T08:50:41.072009Z 462 jlbiord 2234 textEdit.cpp file 2010-04-17T07:24:38.262878Z e64ba3de6879836ef52d0e8d6c53a37f 2010-03-20T08:50:41.072009Z 462 jlbiord 59241 pluginsinterfaces.h file 2010-04-17T07:24:38.262878Z 24bacf19a339291431a52a29c6065fab 2009-03-29T16:21:33.517681Z 448 Lord.Divius 2276 parametersimpl.h file 2010-04-17T07:24:38.262878Z dc4ce8c4850d8d9dbe6746da82439e6e 2010-03-20T08:50:41.072009Z 462 jlbiord 1477 editor.h file 2010-04-17T07:24:38.262878Z 5f24028f881d1abdddc0ae28bcc05353 2010-03-20T08:50:41.072009Z 462 jlbiord 8953 treeproject.h file 2010-04-17T07:24:38.262878Z 3778974db472d5b63ded29260cff517c 2010-03-20T08:50:41.072009Z 462 jlbiord 2728 InitCompletion.cpp file 2010-04-17T07:24:38.266879Z 0fabd489c9a6e6565594b57b8f6d6806 2009-01-27T15:00:53.236107Z 358 jlbiord 32657 qdevelop-v0.28/.svn/prop-base/README.cmake.svn-base0000444000175000017500000000004211362261070020644 0ustar jlbrdjlbrdK 13 svn:eol-style V 6 native END qdevelop-v0.28/.svn/text-base/QDevelop.pro.svn-base0000444000175000017500000000733611362261070021167 0ustar jlbrdjlbrdCONFIG += qt uitools warn_on release DESTDIR += bin FORMS += ui/about.ui \ ui/addexistant.ui \ ui/addnew.ui \ ui/addnewclass.ui \ ui/addnewclassmethod.ui \ ui/addnewclassvariable.ui \ ui/addscope.ui \ ui/addsetget.ui \ ui/exechoice.ui \ ui/findfiles.ui \ ui/findwidget.ui \ ui/gotoline.ui \ ui/main.ui \ ui/newimplementation.ui \ ui/newproject.ui \ ui/newvariable.ui \ ui/openfile.ui \ ui/options.ui \ ui/parameters.ui \ ui/projectpropertie.ui \ ui/replacewidget.ui \ ui/shortcuts.ui \ ui/subclassing.ui \ ui/toolsControl.ui \ ui/warning.ui \ ui/breakpointcondition.ui \ ui/registers.ui HEADERS += src/InitCompletion.h \ src/QIComplete/parse.h \ src/QIComplete/readtags.h \ src/QIComplete/tree.h \ src/addexistantimpl.h \ src/addnewclassimpl.h \ src/addnewclassmethodimpl.h \ src/addnewclassvariableimpl.h \ src/addnewimpl.h \ src/addscopeimpl.h \ src/addsetgetimpl.h \ src/assistant.h \ src/build.h \ src/cpphighlighter.h \ src/debug.h \ src/designer.h \ src/editor.h \ src/findfileimpl.h \ src/lineedit.h \ src/linenumbers.h \ src/logbuild.h \ src/mainimpl.h \ src/misc.h \ src/newprojectimpl.h \ src/openfileimpl.h \ src/optionsimpl.h \ src/parametersimpl.h \ src/pluginsinterfaces.h \ src/projectmanager.h \ src/projectpropertieimpl.h \ src/selectionborder.h \ src/shortcutsimpl.h \ src/stackimpl.h \ src/subclassingimpl.h \ src/tabwidget.h \ src/textEdit.h \ src/toolscontrolimpl.h \ src/treeclasses.h \ src/treeproject.h \ src/registersimpl.h INCLUDEPATH += . src src/ui MOC_DIR += build/moc QT += core gui network sql RCC_DIR += build/rcc RC_FILE += QDevelop.rc RESOURCES += resources/resources.qrc SOURCES += src/InitCompletion.cpp \ src/QIComplete/parse.cpp \ src/QIComplete/readtags.cpp \ src/QIComplete/tree.cpp \ src/addexistantimpl.cpp \ src/addnewclassimpl.cpp \ src/addnewclassmethodimpl.cpp \ src/addnewclassvariableimpl.cpp \ src/addnewimpl.cpp \ src/addscopeimpl.cpp \ src/addsetgetimpl.cpp \ src/assistant.cpp \ src/build.cpp \ src/cpphighlighter.cpp \ src/debug.cpp \ src/designer.cpp \ src/editor.cpp \ src/findfileimpl.cpp \ src/lineedit.cpp \ src/linenumbers.cpp \ src/logbuild.cpp \ src/main.cpp \ src/mainimpl.cpp \ src/misc.cpp \ src/newprojectimpl.cpp \ src/openfileimpl.cpp \ src/optionsimpl.cpp \ src/parametersimpl.cpp \ src/projectmanager.cpp \ src/projectpropertieimpl.cpp \ src/selectionborder.cpp \ src/shortcutsimpl.cpp \ src/stackimpl.cpp \ src/subclassingimpl.cpp \ src/tabwidget.cpp \ src/textEdit.cpp \ src/toolscontrolimpl.cpp \ src/treeclasses.cpp \ src/treeproject.cpp \ src/registersimpl.cpp TEMPLATE = app TRANSLATIONS += resources/translations/QDevelop_Chinese.ts \ resources/translations/QDevelop_Czech.ts \ resources/translations/QDevelop_Dutch.ts \ resources/translations/QDevelop_French.ts \ resources/translations/QDevelop_German.ts \ resources/translations/QDevelop_Italian.ts \ resources/translations/QDevelop_Polish.ts \ resources/translations/QDevelop_Portuguese.ts \ resources/translations/QDevelop_Russian.ts \ resources/translations/QDevelop_Spanish.ts \ resources/translations/QDevelop_Turkish.ts \ resources/translations/QDevelop_Ukrainian.ts \ resources/translations/QDevelop_Hungarian.ts \ resources/translations/QDevelop_Japanese.ts \ resources/translations/QDevelop_Vietnamese.ts UI_DIR += build/ui macx { TARGET = QDevelop ICON += resources/images/qdevelop.icns OBJECTS_DIR += build/o/mac } unix { TARGET = qdevelop OBJECTS_DIR += build/o/unix target.path += /usr/bin/ INSTALLS += target } win32 { TARGET = QDevelop OBJECTS_DIR += build/o/win32 CONFIG -= debug_and_release } !exists(resources/translations/QDevelop_Russian.qm) { error(Please run \"lrelease QDevelop.pro\" before building the project) } qdevelop-v0.28/.svn/text-base/CMakeLists.txt.svn-base0000444000175000017500000001636711362261070021472 0ustar jlbrdjlbrd# qdevelop CMakeLists.txt # # To build qdevelop, you will need cmake 2.4.3 (should also work with 2.4.0 and above # but not tested). To build the application run this commands: # # mkdir cbuild # cd cbuild # cmake ../ # make # # Please indent this file using tabs, and set the tabs to 8 spaces :) # # If you don't konw cmake, here are some links for you: # http://wiki.qtcentre.org/index.php?title=Compiling_Qt4_apps_with_CMake # http://qtnode.net/wiki/Qt_with_cmake#cmake_for_Qt_4 PROJECT(QDevelop) CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0) SET(QDEV "qdevelop" CACHE STRING "Name of the executeable") # verbose - off # SET( CMAKE_VERBOSE_MAKEFILE ON ) # do optimizations on GCC based compilers # if you want to speed up compilations, set this to -O0, # which reduces compilation time from 2:30 to 1:30 on my system SET( OPTIMIZATION_FLAGS "-O2") ## TODO mmmm.... # CHECK_C_COMPILER_FLAG( ${OPTIMIZATION_FLAGS} HAS_OPTIMIZATION_FLAGS ) # if (HAS_OPTIMIZATION_FLAGS) # ADD_DEFINITIONS( ${OPTIMIZATION_FLAGS} ) # endif (HAS_OPTIMIZATION_FLAGS) ADD_DEFINITIONS( ${OPTIMIZATION_FLAGS} ) # input files SET( qdevelop_UIS ui/about.ui ui/addexistant.ui ui/addnew.ui ui/addnewclass.ui ui/addnewclassmethod.ui ui/addnewclassvariable.ui ui/addsetget.ui ui/addscope.ui ui/breakpointcondition.ui ui/exechoice.ui ui/findfiles.ui ui/findwidget.ui ui/gotoline.ui ui/main.ui ui/newimplementation.ui ui/newproject.ui ui/newvariable.ui ui/options.ui ui/openfile.ui ui/parameters.ui ui/projectpropertie.ui ui/registers.ui ui/replacewidget.ui ui/shortcuts.ui ui/subclassing.ui ui/toolsControl.ui ui/warning.ui ) SET( qdevelop_SRCS src/InitCompletion.cpp src/QIComplete/parse.cpp src/QIComplete/readtags.cpp src/QIComplete/tree.cpp src/addexistantimpl.cpp src/addnewimpl.cpp src/addnewclassimpl.cpp src/addscopeimpl.cpp src/addsetgetimpl.cpp src/addnewclassmethodimpl.cpp src/addnewclassvariableimpl.cpp src/assistant.cpp src/build.cpp src/cpphighlighter.cpp src/debug.cpp src/designer.cpp src/editor.cpp src/findfileimpl.cpp src/lineedit.cpp src/logbuild.cpp src/linenumbers.cpp src/main.cpp src/mainimpl.cpp src/misc.cpp src/newprojectimpl.cpp src/optionsimpl.cpp src/openfileimpl.cpp src/parametersimpl.cpp src/projectmanager.cpp src/projectpropertieimpl.cpp src/registersimpl.cpp src/selectionborder.cpp src/shortcutsimpl.cpp src/stackimpl.cpp src/subclassingimpl.cpp src/tabwidget.cpp src/textEdit.cpp src/treeclasses.cpp src/treeproject.cpp src/toolscontrolimpl.cpp ) SET( qdevelop_MOC_HDRS src/InitCompletion.h src/addexistantimpl.h src/addnewimpl.h src/addnewclassimpl.h src/addnewclassmethodimpl.h src/addnewclassvariableimpl.h src/addscopeimpl.h src/addsetgetimpl.h src/assistant.h src/build.h src/debug.h src/editor.h src/findfileimpl.h src/linenumbers.h src/logbuild.h src/mainimpl.h src/newprojectimpl.h src/optionsimpl.h src/openfileimpl.h src/parametersimpl.h src/projectmanager.h src/projectpropertieimpl.h src/registersimpl.h src/shortcutsimpl.h src/stackimpl.h src/subclassingimpl.h src/tabwidget.h src/textEdit.h src/treeclasses.h src/treeproject.h src/toolscontrolimpl.h ) SET( qdevelop_RCS QDevelop.rc ) SET( qdevelop_RESOURCES resources/resources.qrc ) SET( qdevelop_TS resources/translations/QDevelop_Chinese.ts resources/translations/QDevelop_Czech.ts resources/translations/QDevelop_Dutch.ts resources/translations/QDevelop_French.ts resources/translations/QDevelop_German.ts resources/translations/QDevelop_Hungarian.ts resources/translations/QDevelop_Italian.ts resources/translations/QDevelop_Japanese.ts resources/translations/QDevelop_Polish.ts resources/translations/QDevelop_Portuguese.ts resources/translations/QDevelop_Russian.ts resources/translations/QDevelop_Spanish.ts resources/translations/QDevelop_Turkish.ts resources/translations/QDevelop_Ukrainian.ts resources/translations/QDevelop_Vietnamese.ts ) FIND_PACKAGE( Qt4 REQUIRED ) INCLUDE(${QT_USE_FILE}) SET( QT_USE_QTASSISTANT ) SET( QT_USE_QTDESIGNER ) SET( QT_USE_QTNETWORK ) SET( QT_USE_QTSQL ) SET( QT_USE_QTXML ) SET( QT_USE_QTUITOOLS ) # qt4 definitinos QT4_WRAP_UI ( qdevelop_UIS_H ${qdevelop_UIS} ) QT4_WRAP_CPP ( qdevelop_MOC_SRCS ${qdevelop_MOC_HDRS} ) QT4_ADD_RESOURCES ( qdevelop_RESOURCES ${qdevelop_RESOURCES} ) QT4_AUTOMOC ( ${qdevelop_SRCS} ) QT4_ADD_TRANSLATION ( qdevelop_QM ${qdevelop_TS} ) # definitions for the project ADD_DEFINITIONS( -Wall -DQT_NO_DEBUG ${QT_DEFINITIONS} ) # include directories INCLUDE_DIRECTORIES( ${QT_INCLUDES} ${QT_INCLUDE_DIR}/QtUiTools ${CMAKE_BINARY_DIR} . src src/ui ) IF( MINGW ) # resource compilation for MinGW ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/QDevelop.rc -o ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o ) SET( qdevelop_SRCS ${qdevelop_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/qdevelop_ico.o) SET( QT_UITOOLSLIB QtUiTools QtDesigner4 ) ELSE( MINGW ) SET(qdevelop_SRCS ${qdevelop_SRCS} QDevelop.rc) SET(QT_UITOOLSLIB ${QT_QTUITOOLS_LIBRARY} QtDesigner ) ENDIF( MINGW ) # the main build target ADD_EXECUTABLE( ${QDEV} ${qdevelop_SRCS} ${qdevelop_UIS_H} ${qdevelop_MOC_SRCS} ${qdevelop_UIS} ${qdevelop_RESOURCES} ${qdevelop_QM} ) IF( MINGW ) SET_TARGET_PROPERTIES( ${QDEV} PROPERTIES LINK_FLAGS "-mwindows" ) ENDIF( MINGW ) TARGET_LINK_LIBRARIES( ${QDEV} ${QT_UITOOLSLIB} ${QT_QTSQL_LIBRARY} ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTNETWORK_LIBRARY} ) # Plugins support IF (AUTOPLUGINS) FILE (GLOB PLUGINS ${QDevelop_SOURCE_DIR}/plugins/*) FOREACH (PLG ${PLUGINS}) STRING (REGEX MATCH \\.svn FAIL ${PLG}) STRING (COMPARE EQUAL "${FAIL}" "" IS_EMPTY) IF (IS_EMPTY) SET (PLG_HXX "") SET (PLG_CXX "") SET (PLG_UI "") SET (PLG_MOC "") SET (PLG_UIC "") SET (PLG_TS "") SET (PLG_QM "") STRING (REPLACE "${QDevelop_SOURCE_DIR}/plugins/" "" PLG_NAME ${PLG}) MESSAGE (STATUS "Preparing plugin ${PLG_NAME} for building") FILE (GLOB PLG_HXX ${PLG}/*.h) FILE (GLOB PLG_CXX ${PLG}/*.cpp) FILE (GLOB PLG_UI ${PLG}/*.ui) FILE (GLOB PLG_TS ${PLG}/translations/*.ts) QT4_ADD_TRANSLATION (PLG_QM ${PLG_TS}) QT4_WRAP_CPP (PLG_MOC ${PLG_HXX}) QT4_WRAP_UI (PLG_UIC ${PLG_UI}) ADD_LIBRARY (${PLG_NAME} SHARED ${PLG_CXX} ${PLG_MOC} ${PLG_UIC} ${PLG_QM}) TARGET_LINK_LIBRARIES (${PLG_NAME} ${QT_UITOOLSLIB} ${QT_QTSQL_LIBRARY} ${QT_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTNETWORK_LIBRARY}) SET_TARGET_PROPERTIES (${PLG_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY plugins LIBRARY_OUTPUT_DIRECTORY plugins) ADD_DEPENDENCIES (${PLG_NAME} ${QDEV}) IF (WIN32) INSTALL (TARGETS ${PLG_NAME} DESTINATION bin/plugins) INSTALL (FILES ${PLG_QM} DESTINATION translations/${PLG_NAME}) ELSE (NOT WIN32) INSTALL (TARGETS ${PLG_NAME} DESTINATION lib/qdevelop/plugins) INSTALL (FILES ${PLG_QM} DESTINATION lib/qdevelop/translations/${PLG_NAME}) ENDIF (WIN32) ENDIF (IS_EMPTY) ENDFOREACH (PLG) ENDIF (AUTOPLUGINS) INSTALL (TARGETS ${QDEV} RUNTIME DESTINATION bin) IF (WIN32) INSTALL (FILES ${qdevelop_QM} DESTINATION translations) ELSE (NOT WIN32) INSTALL (FILES ${qdevelop_QM} DESTINATION lib/qdevelop/translations) ENDIF (WIN32) qdevelop-v0.28/.svn/text-base/Setup.iss.svn-base0000444000175000017500000000451111362261070020536 0ustar jlbrdjlbrd; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=QDevelop AppVerName=QDevelop AppPublisher=Jean-Luc Biord DefaultDirName={pf}\QDevelop DefaultGroupName=QDevelop InfoAfterFile=README.txt OutputBaseFilename=setup-QDevelop SetupIconFile=resources\images\logo.ico Compression=lzma SolidCompression=yes VersionInfoVersion=1.0.0.0 [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "bin\QDevelop.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "resources\translations\*.qm"; DestDir: "{app}\translations"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtCore4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtXml4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtGui4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtNetwork4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\bin\QtSql4.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\plugins\sqldrivers\qsqlite4.dll"; DestDir: "{app}\QtPlugins\sqldrivers"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\qt\plugins\sqldrivers\libqsqlite4.a"; DestDir: "{app}\QtPlugins\sqldrivers"; Flags: ignoreversion Source: "F:\Qt\2010.02.1\mingw\bin\mingwm10.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "README.txt"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "ChangeLog.txt"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}\doc"; Flags: ignoreversion Source: "bin\plugins\*.*"; DestDir: "{app}\plugins"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\QDevelop"; Filename: "{app}\QDevelop.exe" Name: "{userdesktop}\QDevelop"; Filename: "{app}\QDevelop.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\QDevelop"; Filename: "{app}\QDevelop"; Tasks: quicklaunchicon [Run] Filename: "{app}\QDevelop.exe"; Description: "{cm:LaunchProgram,QDevelop}"; Flags: nowait postinstall skipifsilent qdevelop-v0.28/.svn/text-base/README.cmake.svn-base0000444000175000017500000000246611362261070020664 0ustar jlbrdjlbrd QDevelop - A Development Environment for Qt4 (C) 2006 Jean-Luc Biord Compiling using cmake ~~~~~~~~~~~~~~~~~~~~~ Since Version 0.20, it's possible to compile the application using cmake. Please note that the official build tool for QDevelop is still qmake, and cmake it in early beta stage. The IDE cannot handle cmake projects yet, but this may change in the future. You need to use cmake version 2.4.3 (2.4.0 and above shuold work, but only 2.4.3 and above have been tested). The compilation was tested under Linux, and on Win32 the compilation does work, but QDevelop loads up with a console window. To build QDevelop, we need to create a new subdirectory to build off source, we call cmake, and the finally make: mkdir cbuild cd cbuild cmake -G "MinGW Makefiles" ../ make Why using cmake? ~~~~~~~~~~~~~~~~ Quite frankly, qmake is nice, but it's a toy. You cannot set dependencies, you cannot make conditional compile time switches (or at lest not in an automated way, when packaging for example). Using cmake, you also have a percentage which displays how much the compilation is going on. The output is MUCH nicer: by default you do not see the "gcc -c ..." messages, instead you see nice messages saying that the file is being compiled (in color!). - diego - diegoiast@gmail.com qdevelop-v0.28/.svn/text-base/README.txt.svn-base0000444000175000017500000000534211362261070020417 0ustar jlbrdjlbrd QDevelop - A Development Environment for Qt4 (C) 2006-2010 Jean-Luc Biord Installation ~~~~~~~~~~~~ Download is available from http://biord-software.org/qdevelop, the official website. You need Qt (from Trolltech) at least version 4.3 to be able to compile QDevelop. Most Linux distributions normally already package the latest version of Qt, so it is likely that you need to worry about this. However, you need the development package as well (sometimes named as qt-devel or qt4-devel, it varies depends on the distributions). The simplest way to compile QDevelop package is: 1. Extract the source zip. 2.`cd' to the directory containing the package's source code and type `qmake' (`qmake -recursive' with Qt 4.3.x) to generate the Makefile for your system. 3. Type `make' on Linux or `mingw32-make` on Windows to compile the package. 4. The executable file QDevelop (QDevelop.exe under Windows) is built on bin/ directory. If you want to have code completion, install the package ctags. Under Linux, ctags is normally installed with development packages. For Windows, ctags is accessible here : http://freefr.dl.sourceforge.net/project/ctags/ctags/5.8/ctags58.zip If you want to have debugging functionalities, you must install gdb. Like ctags, gdb is normally installed with development packages under Linux. gdb for Windows is available here : http://www.mingw.org/download.shtml/ You can also compile QDevelop using cmake, but this is not fully supported yet. For more information read the documentation found in README.cmake. Command line options ~~~~~~~~~~~~~~~~~~~~ QDevelop may be launched with some parameters: QDevelop [-l translation] [file(s)] [project] -l translation When QDevelop starts, it detect automatically the language of installed system. If you want to use another language, use this option. Available languages are English, French, German and Dutch. [file(s)] Open the files in editors. [project] Open the (.pro) file in QDevelop. The other files are closed before open the project. Documentation ~~~~~~~~~~~~~ Up to date documentation can be found at: http://biord-software.org/qdevelop License ~~~~~~~~~~~~~ Copyright (C) 2006-2010 Jean-Luc Biord QDevelop 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. qdevelop-v0.28/.svn/text-base/copying.svn-base0000444000175000017500000004311011362261066020314 0ustar jlbrdjlbrd GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qdevelop-v0.28/.svn/text-base/qdevelop.spec.svn-base0000444000175000017500000000317611362261066021424 0ustar jlbrdjlbrdSummary : A Development Environment for Qt4 Name : qdevelop Version : 0.25 Release : 1 License : GPL Group : Development/C++ URL : http://qdevelop.org/ Source : %{name}-%{version}.tar.gz Packager : Diego Iastrubni BuildRoot : %{_tmppath}/%{name}-%{version}-%{release}-builtroot BuildRequires : cmake libqt4-devel Requires : libqt4-devel ctags gdb %description QDevelop is a development environment entirely dedicated to Qt4. QDevelop requires Qt4, gcc under Linux or MinGW under Windows, possibly gdb for program debugging and ctags for code completion. QDevelop is available in English, French, German, Dutch, Polish, Spanish, Chinese, Russian, Italian, Ukrainian, Czech and Portuguese. If you want to translate in your language, please contact me. QDevelop is not a Kdevelop like or reduced. It's an independent IDE dedicated to Qt and is totally independent of KDevelop. Less complete, but faster, light and especially multi-platforms. QDevelop and KDevelop have different code sources. %prep %setup mkdir cbuild cd cbuild; cmake ../ %build make -C cbuild %install [ "%{buildroot}" != '/' ] && rm -rf %{buildroot} #mkdir -p $RPM_BUILD_ROOT/%{instaldir_bin} #cp cmake/QDevelop $RPM_BUILD_ROOT/%{instaldir_bin} mkdir -p %{buildroot}/usr/bin cp cbuild/QDevelop %{buildroot}/usr/bin/qdevelop %clean rm -fr cbuild %post # empty %preun # empty %postun # empty %files %defattr(-,root,root) %doc copying %doc ChangeLog.txt %doc README.txt /usr/bin/* %{instaldir_bin}/* %changelog * Sat Dec 8 2007 Diego Iastrubni - 0.25-1 - first package version qdevelop-v0.28/.svn/text-base/qdevelop.desktop.svn-base0000444000175000017500000000063311362261066022136 0ustar jlbrdjlbrd[Desktop Entry] Name=QDevelop GenericName=QDevelop Comment=A development environment dedicated to Qt4 Comment[ru]=Среда разработки для Qt4 Comment[fr]=Un environnement de développement intégré pour Qt4. Comment[de]=Eine Entwicklungsumgebung für Qt4 Exec=qdevelop Icon=qdevelop Terminal=false Type=Application Categories=Qt;Development;IDE; MimeType=application/vnd.nokia.qt.qmakeprofile qdevelop-v0.28/.svn/text-base/ChangeLog.txt.svn-base0000444000175000017500000004663011362261064021321 0ustar jlbrdjlbrdMarch 20 2010 Version 0.28: - Localization support for plugins - Added formating-astyle plugin (former AStyle-Plugin) for formatting and indenting source code - Added tools-regexp-planner (based on "RegExp Planner" project) for testing regular expressions - CMake build system now supports building and installing of plugins - Fix issue 352, 353, 361, 365, 374, - Add qdevelop.desktop, which will be used by the Linux packagers - Show quotes in error message - Plugins building support in the main CMakeLists.txt. If enabled, CMake will try to detect and build plugins in the "plugins" subdirectory. It will also prepare them to be installed via "make install". The feature is disabled by default, to enable it use something like: $ cmake ../ -DAUTOPLUGINS=1 February 20 2009 Version 0.27: - Fixed a lot of issues (among them several segfaults, incorrect work with relative paths, some translation issues) - Several editor improvements: word wrap, right margin line - Changable autohide delay for find and replace widgets - Updated English, French, Russian, German, Polish, Portuguese, Czech, Hungarian and Italian translations - Option for autoclosing comment blocks in editor - Better interaction with Qt Assistant >= 4.4.0 - Menu item for forcing qmake debug or release mode without changing project file - The "Find in Files" function now supports simple replacing as well - Smart click feature: ctrl+left click on some keyword in editor for "Goto implementation" command, meta(super,win)+left click - for "Goto declaration" - QDevelop settings file is hidden on *NIX (renamed to .qdevelop) - Partly fixed multiple error messages when unable to connect to SqLite database - Better error and warning detection in make output, detection of linker errors - Compiling QDevelop via CMake now supports install feature - Plugins path is no longer hardcoded to be /usr/lib/qdevelop/plugins but is relative to executable path - Fixed 'Add new item': on right-clicking on 'Headers' etc subtrees it misdetected project to which new file should belong - Fixed problem with spaces in executable name - Following keywords are now highlighted: emit, qobject_cast, forever - Added link_pkgconfig to project properties (CONFIG qmake variable) - "Sort" feature was temporary dropped because it would brake any complicated project file - will return in 0.28 - Several important fixes for Mac OS X November 05 2008 Version 0.26: - Fix many issues - The Replace widget is now embeded in editors as the Find widget. - Mac OS enhancements - Update the gui, now all dock windows are QDockWidget, and not widgets - Assistant can be started and controled with the version 4.4.0 of Qt. Works also with previous versions. December 12 2007 Version 0.25: - Display white spaces on text editors (revisions 192, 236, 237) - Open dialog remembers filter used (revision 193) - Support for extra parameters for make (revision 194) - Improve creation of sub-projects, speed updates to the text editor under some Linux versions of Qt4 (revision 194) - Added encoding support to load/save files, defaults to UTF8 (revision 198) - Improvement of the code completion (revisions 199, 200, 203, 208, 210-213, 220-223, 225, 251-252 ) - In "Options Dialog", allow to define the Qt include directory used to build the Qt classes database. (revision 204) - The "Find in Files" function shows the filenames with the relative names in the window of files found. Thanks to Simon Viennot . (revision 209) - CMake support: QDevelop can be built using cmake (revisions 216, 219, 238, 257, 272) - Added shortcuts to most GUI items (revisions 217, - GUI has been simplified to reduce space screen (revision 227, 231, 235, 249, 263) - Added conditional breakpoints in debugging functions. (revision 230) - Now it's possible to disable the editor toolbars. The button to switch to header/source is instead displayed in the outer editor toolbar. (revision 236) - Middle click on line numbers makes a break point, left click a bookmark (revision 237) - Middle click on a dialog in the project explorer will preview the dialog (revision 238) - On text editors, hide the mouse cursor only if the editor has the focus. (revision 244) - Fixed segfault when opening a non-sourcecode file (i.e. a file where the inner editor toolbar is not displayed) (revision 248) - Added functionality to modify registers (revision 249, 250) - Changed home key: It now first moves the cursor to the first character of the current line, and after pressing it again, to the beginning of the line. The same behaviour is used for shift+home. (revisions 253, 255) - New feature: Editor mode. It will toggle the display visibility state of all dockwidgets and display only the editor. Shortcut control+E (revisions 256, 264) - English "translations" updated (revisions 271,273) - A new feature allows to compile automatically (every 5 seconds) the files (.cpp) edited. This compilation is made in background in a temporary file. The warnings and errors are marqued in the column numbers by the yellow and red warning panels. If the mouse is moved in a panel, a tooltip is showed and gives the message given from the compiler. (revisions 261-262, 265-270) August 11 2007 Version 0.24: Corrections and improvements: - Source/header navigation after files are renamed is working once more (fixes issue 137) - Updated translations for * Chinese (Henri Girard ) * Vietnamese (Chuong.Nguyen@eng.monash.edu.au) * Italian (Rafael Venancio ) * Portuguese (Rafael Venancio ) * Spanish (Jorge Daniel Sampayo Vargas ) * Turkish (fatih.asici@gmail.com) * German (Ralf Jung ) - The build log window is now a sub-class of QTextEdit. It is possible to copy and paste by right-click the texts in this window (fixes issue 136 and 141) - Make moving up/down in files explorer equivalent to clicking items, and Return equivalent to clicking Open (fixes issue 154) - Updated the shape of the tabs on the output dock window (revisions 182, 183) - Improove handleing of pro files (revision 185,187) - Fixed various crashes related for the code completion (revision 184,188) - The list of include directories is parsed by the code completion each time it is necessary (fixes issue 145) - Commet/Uncomment line fixes, thanks to Simon Viennot (fixes issues 101, 113 and 131). - Fixed function/method names color bug (fixes issues 77 and 96) - Line numbers are consistant with text editor, improved undo/redo behavior, enhanced find in document behavior, Removed Undo and Redo from editor context menu and moved Goto Implementation and Goto Declaration to the top. Thanks to Branimir Karadzic (revision 144) - Fixed templates for win32-msvc2005 target. Thanks to Branimir Karadzic . (revision 145) - Find in files funtions has been improoved (revision 147). - Completion improvement: If a function has many overloaded versions, the code completion choose the version with the biggest number of parameters, overcome some problems with ctags and Qt macros (revision 151) - When adding files to a project if the directories do not exixt, create them (revision 154) - New text format used in the source, which allows to translate more easily. Thanks to Simon Viennot . (revision 155) - Indentation should be working once more (fixes issue 18) - When creating a new dialog, the template will use by default QDialogButtonBox (fixes issue 83) - Order of widgets in tools control is revised, also use QDialogButtonBox instead of normal buttons (fixes issue 89) - Improved save and restore of MainWindow position, size and state (fixes issue 103). - Break IDE closing with Cancel button if project changes are not saved (fixes issue 107) Adds: - Add "Goto Declaration" and "Goto Implementation" entries in the popup menu showed by right-click in an editor. After the right-click on a word, the program find the member object or function and his class then, if possible allows to go to the implementation and the declaration files. - Since Qt 4.3.0, Designer can be controlled as Assistant by socket. That allows to open all UI files with one instance of Designer. - Added an entry to the main menu to open class methods combo box for fast lookup without using mouse. Thanks to Branimir Karadzic . (revision 146) - Hide mouse cursor while typing code (fixes issue 24) May 29 2007 Version 0.23 Corrections: - Prevents the opening of the same file in several tab. The code completion works now with the classes created in the project. When the IDE auto-completes some code, it also add the "()" after the cursor, and place the cursor in the best position possible. - Fix a problem with packaged versions of QDevelop. With these versions, the code completion did not work. Adds: - Add Portuguese translation thanks to Giuliano Santana - Add Vietnamese translation. Thanks to Chuong Nguyen - In subclassing, the code is now added in editor if the file is opened in tab (before, the code was added always in files on disk, even with the file opened). April 11 2007 Version 0.22 Corrections: - Fixed cmake compilation. Now executable is called QDevelop. I think I will have to revert this for UNIX* environemtns, in which the binary should be named qdevelop. - Update the code to accept the plugins in subdirectory of executable directory. - Fix the kind for field implementation (int to string) in table classesbrowser in database. - Fix items alignment default in projectpropertie.ui - In project database, opened files are now saved with relative paths to the project directory. If project directory is moved to other path, the files are correctly reopened. This commit saves relative paths for files in classes browser too. - Fix a crash when "Refresh contents" is called on tree browser without project opened. Adds: - Add czech translation language. - Add Ukrainian translation. - The application accept now "GNU make" as previously but also others like "FreeBSD make". - With a right-click on a class name in classes browser, it is possible to: - Add a new method to the class (can be a slot or a signal) - Add a new variable member - With a right-click on a member variable of a class in classes browser, it is possible to: - Add set and get methods for this variable member. Version 0.21-svn Adds: - Colorized matching for ( and { October 26 2006 Version 0.20 Name: - QIde becomes QDevelop at October 4, 2006 Corrections: - A crash if a file is opened without project - Bug in classes explorer when a sub-project have a name identical of the main project. - Deletion of Auto-Hide docks, not working with Qt 4.2 - The settings are now written in qdevelop.ini file in the user home directory. - The database of project is named "qdevelop-settings.db" in project directory. - New C++ highlighter Adds: - The Default projects directory can be set in options dialog. - Bookmarks. Bookmarks can be toggled on menu bar and by right-click in margin number or editor. - Add "Next Bookmark" and "Previous Bookmark" to menu Bookmark. - Add Bookmarks toolbar. - Save bookmarks and breakpoints in project settings - Add "console" to CONFIG variable in (.pro) file for new projects to have qDebug() written on debug console under Windows. - Modification of the class browser to understand functions overloading. - When a project is closed, the content of class browser is saved in database project.db. With this database, the content is reloaded very quickly during the loading of the project. This feature require to have the SQL driver sqlite enable. On build enter the option -qt-sql-sqlite after the configure command. - Moving tabs with mouse to switch between us - Detection when a file was modified by another program and ask for save or reload. - Two tabs to show debugged variables program. Deletion of line edit "Debug command", obsolete with new tabs. - Templates to create a project (based on dialog or main window). - The code completion list contains the name and signature of functions. - Entries "Close Other Tabs" and "Close All Tabs" in popup menu showed by right-click on editor Tab. - Add Polish, Spanish, Chinese and Russian translations - The application can be build using cmake (experimental!) September 25 2006 Version 0.19 Corrections: - The code is entirely translated in English, variables, function names and file names. - Improvement of completion, much faster (5 or 6 times). An improved code increases its reliability. - The location of qmake is determined in this order: 1. Read in INI file the lasted saved location. If it not saved, use : QLibraryInfo::location( QLibraryInfo::BinariesPath )+"/qmake"; 2. Test if the location finded on 1 is good, otherwise display a dialog for choose qmake location In options dialog, it is possible to change the location of qmake anytime. Adds: - The classes explorer to navigate into classes and members. By right-click, each item can display the two files of a member or function: implementation and declaration. The double-click shows the implementation if available. The items are updated in real time when the text in editor is modified and the interval between two updates can be configured in options dialog. This new feature require ctags. - The project QIde is now a single project without plugin projects (dockplugin, lineedithistoplugin and treeprojectplugin), not requires to build the application. - On close, "Replace" and "Find in files" dialogs saves their options to reuse on next showing. - Menu "Debug | Parameters" to configure the arguments of program, his working directory and environment variables. - Menu "Debug | Calls Stack" to show all functions called. Is equivalent to the 'backtrace' gdb command. In the dialog, when a line is activated, the file is opened on good line. August 28 2006 Version 0.18-a Corrections: - A crash when "Edit | Toggle comment" is choose on unselected line. - A crash when Enter key is pressed in a header. - Widgets in preview dialogs are now connected. - Audo-hide dock does not work on Qt 4.2.x and this feature is disabled for this version. - Problem if current line color is disabled in options dialog. Adds: - Actions "Comment" and "Uncomment". August 27 2006 Version 0.18 Corrections : - Now detect translated "error" and "warning" strings in gcc logs to show lines on red and blue and to permit the double-click to open editors. - Crash on starts when last project is not present - Rewriting of cpp syntax highlighter. Work well and more quickly. Highlighting is now enabled only for .c, .cpp, .cc and .h files only. - Remove stranges characters in Build Log window. - The location of qmake is set during QIde compilation then used to call qmake. But sometimes this location is not good thus in options dialog it is possible configure it. - Rewriting of parser who populates the combo classes and methods. Now requires ctags and normally works with all styles of code. Adds : - Auto brackets in editor. When "{" is pressed, "}" gets added to the text automatically and text between is indented. - Highlight current line - On dialogs, a right-click on item preview the dialog, without opening Designer. Each widget shows a tooltip containing his name and classname. - Dutch translation - Find in files - Improvement of the Qt contextual help. When F1 is pressed on word in editor, Assistant is launched. - If the word is an Qt object, the corresponding page is displayed (qstring.html if the word is QString). - If the word is a function, the page called is the class of this function and in the page the anchor corresponding of the word is displayed. Example : in code : QString foo="ab"; foo = foo.remove("a"); If F1 is pressed on the word "remove", Assistant shows the page qstring.html at the place of the anchor "remove". That does not work every time because the anchor names are not always identical to the names of functions. - The Project explorer have now two view modes accessible by right click then choose "Show As". - Close a tab by right-click on it even if it is not the currrent tab. August 12 2006 Version 0.17 Corrections : - Some small defaults. Adds : - Code completion available thanks to Fr�d�ric Julian and his excellent work. Completion need ctags under Linux and Windows. On Linux it is normaly installed with package developement. On Windows it should be downloaded on the site of ctags: http://ctags.sourceforge.net/ - Possibility to change background color of editors in options dialog. - Goto line dialog. - Replace dialog. - Find works like in Firefox at bottom of editors. August 6 2006 Version 0.16 Corrections : - Add good templates (QDialog, QMainWindow and QWidget) for forms (.ui) append. - The find method of executable name was rewritten and work better. - Shortcuts dialog was rewritten to delete empty lines. - Good compatibility 64bits. Adds : - On editor, the tabs can be replaced by spaces. - The end-of-line can be configured to Default, Unix or Windows mode. In Linux mode, the lines are terminated by "\n". In Windows by "\r\n". In default mode, the end-of-line terminators are translated to the local encoding. - By right-clic on Dialog (.ui) on "Project Explorer", it is possible to create or update the files subclassed. The auto-connect slots can be selected and created on implementation files. July 18 2006 Version 0.15 Corrections : - Complete rewriting of the auto-hide docks. The docks have now a button to make them maskable, like VS. Adds : - A dialog to configure all shortcuts. - Compatibility 64bits. Without guarantee of working fine currently. July 16 2006 Version 0.14 Corrections : - The number margin correctly adapts its size to number digits Adds : - To maximize the size of editors, the docks "Explorer of project" and "Outputs" are automatically masked. - The project configuration dialog has two modes: normal (by default) and advanced. - In project configuration dialog, a list of Qt variables is proposed when a variable is added. - The application accepts a list of files or project in parameter which are automatically open. - Some short cuts keyboard : - F9 : Toggled breakpoint on editor July 15, 2006 Version 0.13 Corrections : - Better management of the long files in the editor Adds : - Translation in German. Thanks to Adrian Debbeler - Some short cuts keyboard : - Shift+F5 : Stop program debugging - Shift+F11 : In debugging, step out - Esc : Return and set focus to current editor. - Find box says when the text is not found, like Kate. July 13, 2006 Version 0.12 Corrections: - Maximum Size for the combo ?Methods?. Problem with the too long methods. Adds - Checking of the version debug or release before execute a program. With warning when the editing version is not available. - The interface is now in English. Addition of the French translation. - Some short cuts keyboard: - Shift+F12 Switch between header and sources - Ctrl+W Close the current editor - Alt+Right Next Tab - Alt+Left Previous Tab July 12, 2006 Version 0.11 Corrections: - Pb with the : character on string. In particular on Windows paths - Modification of the module ?Property of project? for better managing the scopes. Adds: - Possibility of changing the colors of editor. - When user double-click on file name, DEPENDPATH variable is read to find file. - With right-click on project explorer, run lupdate and lrelease directly. July 9, 2006: 0.10 Beta June 1, 2006: Beginning of the development qdevelop-v0.28/.svn/text-base/QDevelop.rc.svn-base0000444000175000017500000000011511362261064020762 0ustar jlbrdjlbrdIDI_ICON1 ICON DISCARDABLE "resources/images/logo.ico" qdevelop-v0.28/ui/.svn/text-base/addnew.ui.svn-base0000444000175000017500000002056011362261070021136 0ustar jlbrdjlbrd AddNew 0 0 554 231 Add New Item :/divers/images/logo.png 9 6 0 6 Files false 9 6 Translation :/treeview/images/linguist.png Resources :/treeview/images/qrc.png Dialog :/treeview/images/designer.png Header :/treeview/images/h.png Sources :/treeview/images/cpp.png true 0 6 0 6 0 6 Project or Scope: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File Name : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 6 newfile.cpp 1 0 6 ... 0 6 Qt::Horizontal 40 20 OK Cancel Qt::Vertical 20 126 filename location directoryButton comboProjects source header dialog resource translation okButton cancelButton cancelButton clicked() AddNew reject() 290 172 171 122 qdevelop-v0.28/ui/.svn/text-base/openfile.ui.svn-base0000444000175000017500000000436011362261070021475 0ustar jlbrdjlbrd OpenFile 0 0 496 406 Open File in Project 0 370 491 33 0 6 Qt::Horizontal 131 31 OK Cancel 10 10 481 321 true true 10 340 481 22 cancelButton clicked() OpenFile reject() 369 253 179 282 qdevelop-v0.28/ui/.svn/text-base/toolsControl.ui.svn-base0000444000175000017500000002762111362261070022402 0ustar jlbrdjlbrd ToolsControl 0 0 519 427 External Tools 9 6 Please enter the path to the external programs: 0 6 :/divers/images/good.png ctags: ... :/divers/images/good.png linguist: ... ... :/divers/images/good.png :/divers/images/good.png ... :/divers/images/good.png ... true false assistant: true false :/divers/images/good.png ... true false gdb: ... :/divers/images/good.png designer: :/divers/images/good.png true false true false true false ... lupdate: lrelease: qmake: true false true false true false make: :/divers/images/good.png ... Qt::Vertical 501 16 false Check environment on start true 0 6 &Test Qt::Horizontal 131 31 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok qmake make gdb ctags linguist lupdate lrelease designer assistant checkEnvironmentOnStartup test qmakeLocation makeLocation gdbLocation ctagsLocation linguistLocation lupdateLocation lreleaseLocation designerLocation assistantLocation qdevelop-v0.28/ui/.svn/text-base/projectpropertie.ui.svn-base0000444000175000017500000011312411362261070023273 0ustar jlbrdjlbrd ProjectPropertie 0 0 573 554 0 0 Dialog :/divers/images/logo.png:/divers/images/logo.png true 9 6 6 0 0 0 Project Template 9 6 app true lib subdirs 6 0 0 0 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Default directories 9 6 Dialogs: ... ... Sources: 0 0 0 Configuration 9 6 6 0 6 0 6 0 General : 6 0 6 0 Version 9 6 build_all debug true release debug_and_release Qt::Vertical QSizePolicy::Maximum 20 40 6 0 Warnings 9 6 warn_off warn_on false Qt::Vertical 101 21 6 0 Qt Libraries 9 6 6 0 6 0 core network sql xml gui script 6 0 opengl svg qt3support webkit phonon xmlpatterns Qt::Vertical 20 20 Qt::Horizontal 40 20 Qt::Vertical 20 40 Variables 9 6 6 0 6 0 6 0 0 0 Variable : 0 0 6 0 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png Qt::Horizontal 40 20 6 0 0 0 Values : 0 0 6 0 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png ... :/toolbar/images/edit.png:/toolbar/images/edit.png Qt::Horizontal 131 20 Advanced options Advanced Options 9 6 6 0 6 0 6 0 app_bundle assistant console designer dll 6 0 exceptions lib_bundle link_pkgconfig no_lflags_merge opengl 6 0 plugin ppc qaxcontainer qaxserver qt false 6 0 qtestlib resources rtti staticlib stl 6 0 thread uic3 uitools windows x11 x86 Qt::Vertical 20 40 6 0 Free CONFIG variables : 6 0 6 0 Qt::Horizontal 40 20 OK Cancel cancelButton clicked(bool) ProjectPropertie reject() 496 617 475 267 qdevelop-v0.28/ui/.svn/text-base/newvariable.ui.svn-base0000444000175000017500000001327511362261070022200 0ustar jlbrdjlbrd NewVariable 0 0 436 269 Dialog 9 6 0 6 New Variable : Qt::Horizontal 40 20 Qt Variables 9 6 User Variable true false 9 6 Variable : 0 6 Operator : = += -= *= ~= Qt::Horizontal 40 20 0 6 Qt::Horizontal 131 31 OK Cancel okButton clicked() NewVariable accept() 331 196 96 233 cancelButton clicked() NewVariable reject() 424 196 179 233 groupUserVariable toggled(bool) groupBox setDisabled(bool) 46 131 56 71 qdevelop-v0.28/ui/.svn/text-base/newimplementation.ui.svn-base0000444000175000017500000001231611362261070023433 0ustar jlbrdjlbrd NewImplementation 0 0 426 187 New Implementation true 9 6 0 6 0 6 Class Name : File Name : Location : 0 6 false false 0 6 true 4 0 0 0 ... Qt::Vertical 20 40 0 6 Qt::Horizontal 40 20 false &Ok false C&ancel okButton clicked() NewImplementation accept() 188 218 99 227 cancelButton clicked() NewImplementation reject() 283 223 305 179 qdevelop-v0.28/ui/.svn/text-base/addnewclassvariable.ui.svn-base0000444000175000017500000002530711362261070023676 0ustar jlbrdjlbrd AddNewClassVariable 0 0 358 270 Add New Variable 9 9 9 9 6 6 Create get/set methods false 9 9 9 9 6 6 false inline true false inline true false set method false get method Qt::Vertical 340 20 6 0 0 0 0 Qt::Horizontal 131 31 OK Cancel 6 0 0 0 0 6 0 0 0 0 Variable Name: Type: Scope: 6 0 0 0 0 6 0 0 0 0 true Qt::Horizontal 40 20 6 0 0 0 0 true false Qt::Horizontal 40 20 variableName type scope get getName getInline set setName setInline okButton cancelButton cancelButton clicked() AddNewClassVariable reject() 347 257 325 123 get toggled(bool) getName setEnabled(bool) 65 147 148 149 get toggled(bool) getInline setEnabled(bool) 77 135 293 149 set toggled(bool) setName setEnabled(bool) 80 175 145 175 set toggled(bool) setInline setEnabled(bool) 23 174 315 178 qdevelop-v0.28/ui/.svn/text-base/shortcuts.ui.svn-base0000444000175000017500000000553311362261070021735 0ustar jlbrdjlbrd Shortcuts 0 0 400 300 Configure Shortcuts true 9 6 true false 0 Action Shortcut 0 6 Default Qt::Horizontal 131 31 OK Cancel okButton clicked() Shortcuts accept() 278 253 96 254 cancelButton clicked() Shortcuts reject() 369 253 179 282 qdevelop-v0.28/ui/.svn/text-base/exechoice.ui.svn-base0000444000175000017500000000663311362261070021635 0ustar jlbrdjlbrd ExeChoice 0 0 389 172 QDevelop :/divers/images/logo.png 9 6 0 6 Qt::Vertical 77 21 OK Cancel 0 6 Choose program to Debug : Don't ask question anymore true okButton clicked() ExeChoice accept() 351 38 233 29 cancelButton clicked() ExeChoice reject() 330 66 197 125 list doubleClicked(QModelIndex) ExeChoice accept() 126 113 169 115 qdevelop-v0.28/ui/.svn/text-base/options.ui.svn-base0000444000175000017500000010656711362261070021403 0ustar jlbrdjlbrd Options 0 0 578 563 Options :/divers/images/logo.png:/divers/images/logo.png true 9 6 0 General 9 6 Save all before build false Automatic compilation 0 6 Qt include directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... Default projects directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... ... Qt documentation directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Make extra parameters: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ... User plugins directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Prompt before quit Reload last project when the application starts false 6 0 Show classes explorer Qt::Horizontal 40 20 Interval between updates: 1 seconds Qt::Horizontal 40 20 Close button in each tab (does not work with all styles) Qt::Vertical 20 40 Editor 9 6 Qt::Vertical 20 40 6 0 6 0 Font: End of line Tab size Files encoding: Current line background Text background Text color 6 0 6 0 0 0 Default Unix Dos/Windows 6 0 Replace Tab by spaces 6 0 ... Qt::Horizontal 40 20 6 0 ... Qt::Horizontal 40 20 6 0 ... Qt::Horizontal 40 20 options 9 6 6 0 Matching ( and { 6 0 ... Qt::Horizontal 40 20 Right margin line Column: rightMarginPos false 1 200 80 Qt::Horizontal 40 20 Hide Find/Replace panels after false 1 60 10 sec. Qt::Horizontal 40 20 Selection border Auto-Brackets Complete Code Autoindent Line numbers Syntax highlighting false Display editor toolbars Display white spaces Auto-Comments Word wrap Ctrl+click = Go to implementation, Meta+click = Go to declaration groupBox_6 Syntax highlighting 9 6 Qt::Vertical 20 40 6 0 6 0 Function/method names : Preprocessor : Qt words : Keywords : Single comments : Multiline comments : Quotation strings : 6 0 ... ... ... ... ... ... ... MS Shell Dlg 2 9 50 false false false false QTextEdit::NoWrap true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> 6 0 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults groupHighlightCurrentLine toggled(bool) lineColor setEnabled(bool) 110 63 110 63 showTreeClasses toggled(bool) interval setEnabled(bool) 84 170 393 169 match toggled(bool) matching setEnabled(bool) 110 63 110 63 buttonBox accepted() Options accept() 317 494 314 473 buttonBox rejected() Options reject() 209 491 201 474 rightMarginLine toggled(bool) rightMarginPos setEnabled(bool) 102 450 149 450 hideFindReplace toggled(bool) findReplaceDelay setEnabled(bool) 135 460 269 460 qdevelop-v0.28/ui/.svn/text-base/addnewclassmethod.ui.svn-base0000444000175000017500000002343711362261070023373 0ustar jlbrdjlbrd AddNewClassMethod 0 0 358 225 Add New Method 9 9 9 9 6 6 6 0 0 0 0 6 0 0 0 0 Method Name: Return type: Parameters: Scope: 6 0 0 0 0 6 0 0 0 0 true Qt::Horizontal 40 20 6 0 0 0 0 true false Qt::Horizontal 40 20 6 0 0 0 0 Inline Virtual Static Pure 6 0 0 0 0 Qt::Horizontal 131 31 OK Cancel Qt::Vertical 340 16 methodName returnType scope parameters Inline Virtual Static Pure okButton cancelButton cancelButton clicked() AddNewClassMethod reject() 347 212 179 224 Pure toggled(bool) Virtual setOn(bool) 282 149 114 154 Pure toggled(bool) Static setDisabled(bool) 287 142 218 149 Pure toggled(bool) Virtual setDisabled(bool) 269 139 125 141 Pure toggled(bool) Inline setDisabled(bool) 307 147 50 147 qdevelop-v0.28/ui/.svn/text-base/addnewclass.ui.svn-base0000444000175000017500000002510511362261070022164 0ustar jlbrdjlbrd AddNewClass 0 0 447 440 Add New Class 9 6 6 0 Qt::Horizontal 40 20 false OK Cancel Inheritance 9 6 6 0 false Qt::Horizontal 40 20 Inherits another class Ancestor: false false Ancestor's include filename: Scope: Filenames 9 6 6 0 6 0 Header filename: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Implementation filename: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 0 0 6 0 ... 6 0 6 0 Project or Scope: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Class name: Constructor arguments: 6 0 Virtual destructor checkboxInherits toggled(bool) ancestor setEnabled(bool) 80 145 210 172 checkboxInherits toggled(bool) ancestorFilename setEnabled(bool) 107 146 201 200 checkboxInherits toggled(bool) scope setEnabled(bool) 65 147 193 228 cancelButton clicked() AddNewClass reject() 396 434 67 443 qdevelop-v0.28/ui/.svn/text-base/findwidget.ui.svn-base0000444000175000017500000001203211362261070022013 0ustar jlbrdjlbrd FindWidget 0 0 772 27 Form 0 0 0 6 :/toolbar/images/cross.png true 0 0 0 0 150 0 Previous :/divers/images/previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/divers/images/next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive Whole words QFrame::Box QFrame::Raised 0 0 0 0 6 :/divers/images/wrap.png Reached end of page, continued from top Qt::Horizontal 41 21 qdevelop-v0.28/ui/.svn/text-base/main.ui.svn-base0000444000175000017500000014355611362261070020633 0ustar jlbrdjlbrd Main 0 0 1601 590 0 0 QDevelop :/divers/images/logo.png:/divers/images/logo.png true QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::VerticalTabs false 0 0 1601 21 &Edit &Bookmarks &Debug &? true &Project &Last Projects B&uild En&force qmake mode &File Las&t Files &View true &Toolbars true true Dock windows true &Tools &Plugins settings Plugins Ed&itors Files toolbar Qt::Horizontal TopToolBarArea false Edit Toolbar Edit Toolbar Edit Toolbar Edit Toolbar Qt::Horizontal TopToolBarArea false Build and Debug Toolbar Qt::Horizontal TopToolBarArea false Call Stacks 2 0 0 Registers 2 0 0 0 0 Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Build 8 0 0 0 0 Lucida Console QFrame::NoFrame true Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Outputs 8 0 0 0 0 Lucida Console QFrame::NoFrame true Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Local Variables 8 0 0 QFrame::NoFrame true QAbstractItemView::SelectRows Name Type Address Value Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Other Variables 8 0 0 6 0 6 0 Qt::Vertical QSizePolicy::Maximum 20 40 ... :/divers/images/ajouter.png:/divers/images/ajouter.png ... :/divers/images/supprimer.png:/divers/images/supprimer.png Qt::Vertical 20 40 true QAbstractItemView::SelectRows Name Type Address Value Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Find in files 8 0 0 Qt::Horizontal Lucida Console QFrame::NoFrame Lucida Console QFrame::NoFrame Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Files 1 0 0 0 0 false QDockWidget::AllDockWidgetFeatures Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Classes 1 0 0 1 :/toolbar/images/filenew.png:/toolbar/images/filenew.png &New Project... :/toolbar/images/filenew.png:/toolbar/images/filenew.png &New File... New File New File &File... :/toolbar/images/fileopen.png:/toolbar/images/fileopen.png &Open Project... :/toolbar/images/fileclose.png:/toolbar/images/fileclose.png &Close All Files :/toolbar/images/filesave.png:/toolbar/images/filesave.png &Save File Ctrl+S :/toolbar/images/filesaveas.png:/toolbar/images/filesaveas.png Save File &as... :/toolbar/images/filesaveall.png:/toolbar/images/filesaveall.png Save A&ll :/toolbar/images/exit.png:/toolbar/images/exit.png &Quit :/toolbar/images/undo.png:/toolbar/images/undo.png &Undo Undo Undo Ctrl+Z :/toolbar/images/redo.png:/toolbar/images/redo.png &Redo Redo Redo Ctrl+Shift+Z :/toolbar/images/editcut.png:/toolbar/images/editcut.png Cu&t Ctrl+X :/toolbar/images/editcopy.png:/toolbar/images/editcopy.png &Copy Ctrl+C :/toolbar/images/editpaste.png:/toolbar/images/editpaste.png &Paste Ctrl+V Select All Ctrl+A :/toolbar/images/find.png:/toolbar/images/find.png &Find... Ctrl+F &Replace... Ctrl+R &Find in Files... Ctrl+Shift+F Add New &Item... Add New Item Add New Item Ctrl+N Add Existing &Files... Add Existing Files Add Existing Files New Folder true Project &Properties... Project Properties Project Properties &Clean Clean Clean :/toolbar/images/rebuild.png:/toolbar/images/rebuild.png &Rebuild Rebuild Rebuild :/toolbar/images/compile.png:/toolbar/images/compile.png Compile File Compile File Compile File Shift+F7 :/toolbar/images/exec.png:/toolbar/images/exec.png S&tart Program Start Program Start Program Shift+F5 :/toolbar/images/dbgstep.png:/toolbar/images/dbgstep.png Step &Into Step Into Step Into F11 :/toolbar/images/dbgnext.png:/toolbar/images/dbgnext.png Step O&ver Step Over Step Over F10 &Calls Stack Calls Stack Calls Stack &Options... &Parameters... &About... About &Qt... :/toolbar/images/fileopen.png:/toolbar/images/fileopen.png &Open... Ctrl+O Find &Next F3 true :/toolbar/images/pause.png:/toolbar/images/pause.png &Stop Stop Stop F6 Breakpoints... :/toolbar/images/buildstop.png:/toolbar/images/buildstop.png &Stop Build :/toolbar/images/indente.png:/toolbar/images/indente.png Indent selection Tab :/toolbar/images/desindente.png:/toolbar/images/desindente.png Unindent selection Shift+Tab :/toolbar/images/helpassistant.png:/toolbar/images/helpassistant.png &Help Current Qt Word F1 &Reset Executables List true true Project Explorer Outputs Files :/toolbar/images/dbgrun.png:/toolbar/images/dbgrun.png &Debug :/toolbar/images/build.png:/toolbar/images/build.png &Build F7 :/toolbar/images/filesave.png:/toolbar/images/filesave.png &Save Project Save Project As... :/toolbar/images/fileclose.png:/toolbar/images/fileclose.png C&lose Project Add &Scope... :/toolbar/images/dbgstepout.png:/toolbar/images/dbgstepout.png Step &Out Shift+F11 &Close Current Editor Ctrl+W true &Next Tab Alt+Right true &Previous Tab Alt+Left true &Switch to Header/Sources Shift+F12 Set &Focus to Editor Esc :/divers/images/breakpoint.png:/divers/images/breakpoint.png Toggle &breakpoint F9 Goto &Methods List Configure &Shortcuts... &Goto Line... Ctrl+G Toggle Co&mments Ctrl+D Comment Uncomment Complete Code Ctrl+Space :/divers/images/bookmark.png:/divers/images/bookmark.png Toggle &Bookmark Toggle Bookmark Toggle Bookmark Ctrl+B :/divers/images/clearallbookmarks.png:/divers/images/clearallbookmarks.png Clear &All Bookmarks Ctrl+F2 E&xternal Tools... :/divers/images/bookmarknext.png:/divers/images/bookmarknext.png &Next Bookmark F2 :/divers/images/bookmarkprevious.png:/divers/images/bookmarkprevious.png &Previous Bookmark Shift+F2 Find Pr&evious Shift+F3 Goto matching &bracket Goto matching bracket Goto matching bracket Ctrl+[ Foo Add New &Class... :/toolbar/images/print.png:/toolbar/images/print.png &Print... Open F&ile in project... Alt+Shift+O :/treeview/images/cpp.png:/treeview/images/cpp.png Goto &Implementation :/treeview/images/h.png:/treeview/images/h.png Goto &Declaration &Rebuild Qt classes database Execute &qmake :/divers/images/window_fullscreen.png:/divers/images/window_fullscreen.png Show Maximized true &Editor mode Ctrl+E Next Warning/Error F4 Previous Warning/Error Shift+F4 Clear all Warnings/Errors Full view Minimal view DocksWindow Dock Windows New submenu > a true &Debug mode true &Release mode &Forget last used mode LogBuild QTextEdit
logbuild.h
TreeClasses QTreeWidget
treeclasses.h
TreeProject QWidget
treeproject.h
1
RegistersImpl QWidget
registersimpl.h
1
qdevelop-v0.28/ui/.svn/text-base/addscope.ui.svn-base0000444000175000017500000001742011362261070021457 0ustar jlbrdjlbrd AddScope 0 0 350 193 Add New Scope :/divers/images/logo.png 9 6 New Scope 9 6 0 6 0 6 0 6 win32 true debug 0 6 unix release 0 6 mac Qt::Vertical 20 21 0 6 other false 0 6 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 6 Qt::Vertical 20 27 0 6 Qt::Horizontal 40 20 OK Cancel cancelButton clicked() AddScope reject() 292 223 174 98 okButton clicked() AddScope accept() 209 223 174 98 autre toggled(bool) scopeName setEnabled(bool) 227 107 227 131 qdevelop-v0.28/ui/.svn/text-base/gotoline.ui.svn-base0000444000175000017500000001207511362261070021516 0ustar jlbrdjlbrd GotoLine 0 0 245 119 Goto Line 9 6 0 6 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> 0 6 1 99999 1 Qt::Horizontal 1 0 0 0 99999 1 0 6 Qt::Horizontal 131 31 OK Cancel Qt::Vertical 20 40 okButton clicked() GotoLine accept() 141 82 96 108 cancelButton clicked() GotoLine reject() 234 82 179 108 horizontalSlider valueChanged(int) spinBox setValue(int) 44 48 206 50 spinBox valueChanged(int) horizontalSlider setValue(int) 208 44 94 44 qdevelop-v0.28/ui/.svn/text-base/newproject.ui.svn-base0000444000175000017500000004575111362261070022065 0ustar jlbrdjlbrd NewProject 0 0 613 403 New project creation :/divers/images/logo.png:/divers/images/logo.png 9 6 0 0 Template 9 6 Empty or master project Application with Dialog true Application with Main Window false Properties 9 6 6 0 6 0 6 0 Parent project : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Project name : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Location : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 true 6 0 ... Project creation on : Version 9 6 Debug Version false Release Version true 6 0 Qt::Horizontal 303 28 false OK Cancel Sub-directories 9 6 6 0 6 0 Dialogs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Executable: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 ui bin 6 0 6 0 sources: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Objects: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 src build Inheritance subclassing 9 6 6 0 6 0 Object name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Object name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 6 0 File name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 6 0 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter projectName location locationButton srcDirectory uiDirectory buildDirectory binDirectory uiFilename subclassFilename uiObjectName subclassObjectName release parentProjectName okButton cancelButton mainwindow dialog empty debug dialog toggled(bool) groupBox_4 setEnabled(bool) 61 48 318 186 mainwindow toggled(bool) groupBox_4 setEnabled(bool) 91 77 382 186 empty toggled(bool) groupBox_4 setDisabled(bool) 102 136 450 186 cancelButton clicked() NewProject reject() 570 309 179 282 qdevelop-v0.28/ui/.svn/text-base/replacewidget.ui.svn-base0000444000175000017500000001555411362261070022522 0ustar jlbrdjlbrd ReplaceWidget 0 0 700 75 Form 3 0 :/toolbar/images/cross.png:/toolbar/images/cross.png true find: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 400 16777215 true Replacement: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 400 16777215 true &Replace Previous :/divers/images/previous.png:/divers/images/previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/divers/images/next.png:/divers/images/next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive false Whole words Prompt true Qt::Horizontal 40 20 QFrame::Box QFrame::Raised 0 0 0 6 0 :/divers/images/wrap.png Reached end of page, continued from top horizontalLayoutWidget label qdevelop-v0.28/ui/.svn/text-base/subclassing.ui.svn-base0000444000175000017500000001366011362261070022214 0ustar jlbrdjlbrd Subclassing 0 0 536 386 Qt Designer Form Subclassing true 9 6 Class Na&me: comboClassName 0 6 4 0 0 0 &New... &File Name: filename true &Location: location false Filter &by: filterEdit Qt::Horizontal 0 6 :/divers/images/clear_left.png true true false 0 6 Qt::Horizontal 40 20 false &Create false C&ancel filterEdit filterView comboClassName filename location newImplementation okButton cancelButton okButton clicked() Subclassing accept() 480 436 61 359 cancelButton clicked() Subclassing reject() 566 436 331 300 qdevelop-v0.28/ui/.svn/text-base/about.ui.svn-base0000444000175000017500000002716211362261070021013 0ustar jlbrdjlbrd About 0 0 545 348 QDevelop :/divers/images/logo.png:/divers/images/logo.png 9 6 6 0 6 0 0 0 150 150 :/divers/images/logo.png true Qt::Vertical 20 40 Qt::Horizontal 40 20 6 0 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> Qt::AlignCenter Qt::Vertical 20 40 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2010</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;</span><a href="mailto:jlbiord@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">jlbiord@gmail.com</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;</span><a href="mailto:fred.julian@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Developer: Diego Iastrubni </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:diegoiast@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" font-size:10pt; color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; color:#000000;">Developer: Trent Zhou </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:trent.zhou@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a><span style=" font-size:10pt;">&gt;<br /></span><span style=" font-size:10pt; color:#000000;">Developer: Daniel Kacer </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:kacer@aceslovakia.sk"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a><span style=" font-size:10pt;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Developer: Ralf Jung &lt;</span><a href="mailto:ralfjung-e@gmx.de"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a><span style=" font-size:10pt;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Developer: Dmitrij &quot;Divius&quot; Tantsur &lt;</span><a href="mailto:divius.inside@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" font-size:10pt; text-decoration: underline; color:#000000;">&gt;</span></a><span style=" font-size:10pt;"><br /></span><span style=" font-size:10pt; color:#000000;">Packager: Daniel Rocher </span><span style=" font-size:10pt;">&lt;</span><a href="mailto:daniel.rocher@adella.org"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a><span style=" font-size:10pt;">&gt;<br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://biord-software.org/qdevelop/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">http://biord-software.org/qdevelop/</span></a></p></body></html> Qt::AlignCenter true <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> Qt::AlignCenter 6 0 Qt::Horizontal 131 31 OK okButton clicked() About accept() 278 253 96 254 qdevelop-v0.28/ui/.svn/text-base/addexistant.ui.svn-base0000444000175000017500000001426711362261070022213 0ustar jlbrdjlbrd AddExistant 0 0 333 161 Add Existing Files :/divers/images/logo.png 9 6 0 6 0 6 Project or Scope : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter File : Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Copy files here: false 0 6 0 6 0 6 ... 0 6 false true false ... 0 6 0 6 Qt::Horizontal 40 20 OK Cancel cancelButton clicked() AddExistant reject() 321 146 197 125 copy toggled(bool) location setEnabled(bool) 61 95 167 95 copy toggled(bool) locationButton setEnabled(bool) 25 94 306 91 qdevelop-v0.28/ui/.svn/text-base/registers.ui.svn-base0000444000175000017500000000331411362261070021701 0ustar jlbrdjlbrd Registers 0 0 400 300 Form 0 0 0 0 0 0 Name Value Value Qt::Horizontal 40 20 Apply qdevelop-v0.28/ui/.svn/text-base/breakpointcondition.ui.svn-base0000444000175000017500000000555211362261070023745 0ustar jlbrdjlbrd BreakpointCondition 0 0 400 251 Dialog 9 6 Condition : false is true (breakpoint) true false has changed (watchpoint) false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() BreakpointCondition accept() 199 183 199 104 buttonBox rejected() BreakpointCondition reject() 199 183 199 104 checkboxCondition toggled(bool) condition setEnabled(bool) 199 88 199 119 qdevelop-v0.28/ui/.svn/text-base/warning.ui.svn-base0000444000175000017500000001234411362261070021342 0ustar jlbrdjlbrd Warning 0 0 329 172 4 4 0 0 Dialog 9 6 0 6 0 6 0 6 4 5 0 0 :/divers/images/qmessagebox-warn.png Qt::Vertical 20 40 1 5 0 0 TextLabel Qt::AlignCenter 0 6 Qt::Horizontal 40 20 OK Qt::Horizontal 40 20 0 6 Don't show anymore false Qt::Horizontal 40 20 okButton clicked() Warning accept() 179 123 6 5 qdevelop-v0.28/ui/.svn/text-base/addsetget.ui.svn-base0000444000175000017500000001263311362261070021642 0ustar jlbrdjlbrd AddSetGet 0 0 358 193 Add get/set methods 9 6 Qt::Vertical 340 20 0 6 Qt::Horizontal 131 31 OK Cancel Create get/set methods for false 9 6 true inline true true inline true true set method true true get method true cancelButton clicked() AddSetGet reject() 296 172 143 182 get toggled(bool) getName setEnabled(bool) 45 48 129 49 get toggled(bool) getInline setEnabled(bool) 24 48 300 51 set toggled(bool) setName setEnabled(bool) 58 82 147 84 set toggled(bool) setInline setEnabled(bool) 23 75 303 80 qdevelop-v0.28/ui/.svn/text-base/findfiles.ui.svn-base0000444000175000017500000001713111362261070021637 0ustar jlbrdjlbrd FindFile 0 0 396 239 Find in Files 6 0 Pattern: 0 0 true Qt::Vertical 20 40 6 0 Case Sensitive Whole words Recursive true Qt::Horizontal 40 20 Qt::Vertical 20 40 0 6 0 0 true *.cpp; *.h *.ui; *.qrc; *.txt Files: 0 0 ... Find in: Qt::Vertical 20 40 Replace found text 6 0 Replace with: 0 0 true 6 0 Qt::Vertical 20 40 6 0 Qt::Horizontal 40 20 &Find &Close closeButton clicked() FindFile reject() 313 205 107 217 qdevelop-v0.28/ui/.svn/text-base/parameters.ui.svn-base0000444000175000017500000001666711362261070022054 0ustar jlbrdjlbrd Param 0 0 489 441 Program parameters true 9 6 0 6 0 6 0 6 Run with these arguments: Qt::Horizontal 40 20 0 6 Working directory (leave empty to use project directory): 0 6 ... 0 6 Environment variables (NAME=value): 0 6 Name Value 0 6 &Edit &Add true &Delete &Sort Qt::Vertical 20 40 0 6 &Default Qt::Horizontal 40 20 &OK true &Cancel okButton clicked() Param accept() 384 429 81 344 cancelButton clicked() Param reject() 477 429 360 285 qdevelop-v0.28/resources/templates/.svn/entries0000444000175000017500000000263711362261070020720 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/resources/templates http://qdevelop.googlecode.com/svn 2007-08-17T12:35:49.688131Z 199 jlbiord 31becf8c-a71e-0410-8e62-47ffcaada4dd main.cpp.template file 2010-04-17T07:24:40.458883Z bf0b74b910c02bd11d7dc046a036c4ec 2007-06-11T16:34:28.761052Z 145 jlbiord 243 widget.ui file 2010-04-17T07:24:40.458883Z 5b1052afba35f537933d8e01ace72b17 2006-10-07T15:56:50.310896Z 5 jlbiord 442 newclassimpl.h.template file 2010-04-17T07:24:40.462884Z ff1df31985392ef48d0694ce3801d253 2007-06-11T16:34:28.761052Z 145 jlbiord 156 impl.h.template file 2010-04-17T07:24:40.462884Z 2c0bcb2378d1d0f8b3a29346f1d32b34 2007-08-17T12:35:49.688131Z 199 jlbiord 249 mainwindow.ui file 2010-04-17T07:24:40.462884Z b74483b41a5782d5931fc41ce52f02f4 2006-10-07T15:56:50.310896Z 5 jlbiord 765 dialog.ui file 2010-04-17T07:24:40.462884Z c13753e430b4647fda8b8328a694b289 2007-07-20T10:45:21.043371Z 173 cucomania 1008 newclassimpl.cpp.template file 2010-04-17T07:24:40.466884Z 4eaf3ec579717c313914464eeb03cffc 2007-06-11T16:34:28.761052Z 145 jlbiord 86 impl.cpp.template file 2010-04-17T07:24:40.466884Z 175723bbab3aab52685cc7f77b5a9668 2007-06-11T16:34:28.761052Z 145 jlbiord 130 qdevelop-v0.28/resources/templates/.svn/all-wcprops0000444000175000017500000000206111362261070021501 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 48 /svn/!svn/ver/465/tags/v0.28/resources/templates END main.cpp.template K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/templates/main.cpp.template END widget.ui K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/templates/widget.ui END newclassimpl.h.template K 25 svn:wc:ra_dav:version-url V 72 /svn/!svn/ver/465/tags/v0.28/resources/templates/newclassimpl.h.template END impl.h.template K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/templates/impl.h.template END mainwindow.ui K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/resources/templates/mainwindow.ui END dialog.ui K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/templates/dialog.ui END newclassimpl.cpp.template K 25 svn:wc:ra_dav:version-url V 74 /svn/!svn/ver/465/tags/v0.28/resources/templates/newclassimpl.cpp.template END impl.cpp.template K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/templates/impl.cpp.template END qdevelop-v0.28/resources/images/.svn/entries0000444000175000017500000004146111362261070020165 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/resources/images http://qdevelop.googlecode.com/svn 2010-03-20T09:00:41.240118Z 463 jlbiord has-props 31becf8c-a71e-0410-8e62-47ffcaada4dd fileprint.png file 2010-04-17T07:24:40.230879Z 9ef04160412042bf274817106e9fe502 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1001 breakpoint.png file 2010-04-17T07:24:40.234882Z a87974c2171a06544c174001ab28b87d 2007-09-24T19:38:22.994334Z 230 jlbiord has-props 298 refresh.jpeg file 2010-04-17T07:24:40.234882Z f5ce85badee07a25b5a9707769d410d8 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 579 editcut.png file 2010-04-17T07:24:40.238881Z 78844df939a77e9a04dd6b96cdb4cf5a 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1196 fileopen.png file 2010-04-17T07:24:40.238881Z 8fdc4c2392da11cd93570b65bd69ca4e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1356 warning.png file 2010-04-17T07:24:40.246879Z bc394a9a78af85ca032ab1d65f467249 2007-10-26T13:00:17.505694Z 261 jlbiord has-props 829 bookmark.png file 2010-04-17T07:24:40.242881Z a8144bf26e1c785e4e9cbb60085ca17e 2006-10-19T16:34:27.372248Z 26 jlbiord has-props 933 doc.png file 2010-04-17T07:24:40.242881Z e3200efcb88bd57924fa861427868151 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1454 undo.png file 2010-04-17T07:24:40.242881Z 565627c191b9eadefe1c29db91aa7437 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1018 CVprotected_enum.png file 2010-04-17T07:24:40.246879Z edbc9292c2a6e9c2535143537190b422 2006-10-10T18:55:32.787667Z 8 jlbiord has-props 337 pause.png file 2010-04-17T07:24:40.250878Z 819e0406bbd5d332ff7704ad055e9e52 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 130 CVstruct.png file 2010-04-17T07:24:40.250878Z aa73883256469b7da502b27e26547c00 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 355 dbgparam.png file 2010-04-17T07:24:40.246879Z 2cc5b894d962c0990da86c1598b3887b 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 154 breakpoint2.png file 2010-04-17T07:24:40.250878Z 5df77cde23dc498eee60924caede77e5 2007-09-24T19:38:22.994334Z 230 jlbiord has-props 253 filesaveas.png file 2010-04-17T07:24:40.254877Z 6c82e0d33e5be82b338b9d90c1cec46c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1137 desindente.png file 2010-04-17T07:24:40.254877Z 881a412980ad87663604f9f1961df4da 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 845 editpaste.png file 2010-04-17T07:24:40.254877Z 5c1af05722ca6418a9d1a0e3737ad3a7 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 881 qmessagebox-warn.png file 2010-04-17T07:24:40.258876Z 6562fab1691a6ebfbabcd14e3554f20a 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 329 CVprotected_slot.png file 2010-04-17T07:24:40.258876Z 5f475ce4553686d6d7fa5be480f9a8c9 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 353 buildrun.png file 2010-04-17T07:24:40.258876Z 31175cf7d27469e75bd42022ecde7e03 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 814 dbgrunto.png file 2010-04-17T07:24:40.258876Z f427f322876aacc0a48e2b2eda01c0b3 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 275 exec.png file 2010-04-17T07:24:40.262878Z 092be266e479e2523acd78fe734e5775 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1408 edit.png file 2010-04-17T07:24:40.262878Z 60a9f1fa2dcc755f0bf78f3d1842b941 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1076 CVnamespace.png file 2010-04-17T07:24:40.262878Z aab8476765d02f36475b6ab27fe42b88 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 310 logo.ico file 2010-04-17T07:24:40.266877Z d7a91c7d1eed82c5f5e6acd06dfe317a 2006-10-17T19:21:11.502198Z 19 jlbiord has-props 150733 rebuild.png file 2010-04-17T07:24:40.266877Z 8c786456e5da4aaff158f6878082c270 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1113 CVprivate_enum.png file 2010-04-17T07:24:40.270880Z 2ba36c7e58bfa70a2a4088ac66ca8f79 2006-10-10T18:55:32.787667Z 8 jlbiord has-props 327 window_fullscreen.png file 2010-04-17T07:24:40.270880Z 68c0a95502d25eecb9d7ce57b5b321a1 2007-09-27T19:47:49.259449Z 239 jlbiord has-props 912 dbgnextinst.png file 2010-04-17T07:24:40.270880Z e18de3e07078a65e336cd6f52f33a3c7 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 207 redo.png file 2010-04-17T07:24:40.274879Z 6eb120e22a0493235ab5a35b19abb297 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1028 curseurDroit.png file 2010-04-17T07:24:40.274879Z 6e0855bf0e7a60495f9b1a2c00d56cd2 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 283 dbgnext.png file 2010-04-17T07:24:40.278878Z 1acb8b75150d5fcee247c3a25ce67375 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 187 CVpublic_enum.png file 2010-04-17T07:24:40.274879Z d09c3cb37df82b35ff368b45d34bf541 2006-10-10T18:55:32.787667Z 8 jlbiord has-props 252 libre.png file 2010-04-17T07:24:40.278878Z d28d55eaa3a6e6c9352de9514d57c208 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 842 CVprotected_meth.png file 2010-04-17T07:24:40.282881Z e527e319a59e2fa0806b7e2525cab106 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 346 build.png file 2010-04-17T07:24:40.278878Z cdcce7b615e4b3a04672d0d980d1d1a9 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1018 designer.png file 2010-04-17T07:24:40.282881Z e78a673057a3688d8f68fec84423b37c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 2302 CVglobal_var.png file 2010-04-17T07:24:40.286882Z 115d9c5a80d6c4bb8b49615348e06515 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 313 CVprivate_slot.png file 2010-04-17T07:24:40.286882Z 96276f027d2b5a17e95e4124f7b743b6 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 356 dbgvar.png file 2010-04-17T07:24:40.290881Z d54e8934188e8dc4f8b39aea94d74ac7 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 141 CVglobal_meth.png file 2010-04-17T07:24:40.290881Z a2426bae9839453e57863ebf2ae1f91e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 342 CVpublic_slot.png file 2010-04-17T07:24:40.290881Z 6a33c14d3145baa221831752f9cc646c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 329 exit.png file 2010-04-17T07:24:40.294882Z e1dbd9a8a329fd176efe3515382fa263 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1398 next.png file 2010-04-17T07:24:40.294882Z 2ade676c1a63001605b3cfe4deaa91db 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1311 editcopy.png file 2010-04-17T07:24:40.298882Z a9206d19ba8cb9473ac4f08bbf21ce21 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 590 CVprivate_meth.png file 2010-04-17T07:24:40.298882Z 97a3db1ef80deeae7d95e6a4775d8c51 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 347 empty-16x16.png file 2010-04-17T07:24:40.302882Z 18831f4e8c66b9e1c764074b027eedee 2007-10-26T13:00:17.505694Z 261 jlbiord has-props 676 configure.png file 2010-04-17T07:24:40.302882Z f9bcf7cce5492e6a1f89f299610cf047 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1356 dbgrun.png file 2010-04-17T07:24:40.298882Z f78532042b7d1056f0475d2670b9a168 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 244 CVpublic_meth.png file 2010-04-17T07:24:40.306882Z b6e71b9456eec2e699ba5891080125fe 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 320 debugger.png file 2010-04-17T07:24:40.306882Z 91467504f8509590ff1fc65842a1071a 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1216 qrc.png file 2010-04-17T07:24:40.310881Z 75a8ae53e8248bb6f82ab3c8f3931af8 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1337 stop.png file 2010-04-17T07:24:40.310881Z 2b95ede33d7be91003d7b9cf4c861414 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1113 indente.png file 2010-04-17T07:24:40.314881Z 48c897fcef77ff7b3ba53f3fbc29ef8d 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 840 dbgmemview.png file 2010-04-17T07:24:40.314881Z e92dc5393f4b5e705522fe1b8d74a6e7 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 154 window_nofullscreen.png file 2010-04-17T07:24:40.310881Z 21ae970ab88802a3ed527cfdad12f82f 2007-09-27T19:47:49.259449Z 239 jlbiord has-props 927 compile.png file 2010-04-17T07:24:40.318883Z ce53de78d5438f0f3c2ebf79d6f33577 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 853 clearallbookmarks.png file 2010-04-17T07:24:40.318883Z 94942e0552aa6250af48774ee5ad9898 2006-10-19T16:34:27.372248Z 26 jlbiord has-props 1075 error.png file 2010-04-17T07:24:40.322882Z bcefae3779e4fcb8068219f31c86fc78 2007-10-26T13:00:17.505694Z 261 jlbiord has-props 781 hide1.png file 2010-04-17T07:24:40.326882Z f9b2b858a89a6befaf0111d83defaa50 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 167 SplashQDevelop.png file 2010-04-17T07:24:40.322882Z 310d5abf1d829979368e01f186b09dce 2010-03-20T09:00:41.240118Z 463 jlbiord has-props 83902 hide2.png file 2010-04-17T07:24:40.326882Z 0c2859ab8e13f5e9abef6a258d901e27 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 167 editclear.png file 2010-04-17T07:24:40.330880Z c9b6dcbf50570c14a5c87e7aa02667bb 2006-11-18T10:51:57.726164Z 67 cucomania has-props 277 CVclass.png file 2010-04-17T07:24:40.330880Z 54454b6889dbd50de780ace9902c3518 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 367 resume.png file 2010-04-17T07:24:40.334881Z 38c4595e8ec66c8d1fa02719a5ff3068 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 179 logo.png file 2010-04-17T07:24:40.334881Z beab95d38452fa55cf54592e2d2166cc 2006-10-17T19:21:11.502198Z 19 jlbiord has-props 23635 CVprivate_signal.png file 2010-04-17T07:24:40.338882Z d26d591bedbed620180dfb4ee605e43f 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 354 clear_left.png file 2010-04-17T07:24:40.338882Z 3b68415c9ca132634d0e2c98c5fdff67 2006-11-18T10:51:57.726164Z 67 cucomania has-props 388 CVpackage_meth.png file 2010-04-17T07:24:40.338882Z 8de673ce0246ccd54f569fdde96d33d7 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 332 bookmarknext.png file 2010-04-17T07:24:40.342882Z 842fa9e1a4f9c4d149fd644e809ea455 2006-10-19T16:34:27.372248Z 26 jlbiord has-props 1096 CVpublic_signal.png file 2010-04-17T07:24:40.342882Z 1504960380b204b4515ddfe8f12dcf69 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 327 fileclose.png file 2010-04-17T07:24:40.346882Z 4a521e39cfeccc12b316d20da9929c55 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 921 editdelete.png file 2010-04-17T07:24:40.346882Z c3f4f65093186c4d4ab01d646d1299b1 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 951 previous.png file 2010-04-17T07:24:40.346882Z 63bc36e300f3f29a1d4dd66779405713 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1348 dir.png file 2010-04-17T07:24:40.350881Z 266c1811db389d2d64ab9540cbec45cc 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1475 QDevelop.png file 2010-04-17T07:24:40.350881Z 3712b5a39562bdb89c873977c01d0317 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 4765 find.png file 2010-04-17T07:24:40.354883Z 8546fa761405bb8c1236391a1fae181e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1382 helpassistant.png file 2010-04-17T07:24:40.354883Z 11d5eefacff5574c17e4ae9e5380d0dc 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 2510 dbgstepinst.png file 2010-04-17T07:24:40.358882Z 9a342e2028221aedffff78176902283e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 202 h.png file 2010-04-17T07:24:40.358882Z 3de63f08ef6935477905cff5603d8358 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 881 qdevelop.icns file 2010-04-17T07:24:40.362882Z 3cb9de19bddeb7fba4c552b5ba4463af 2006-11-02T23:52:29.819709Z 51 donaldinos has-props 63528 good.png file 2010-04-17T07:24:40.362882Z e3a5a61527b7d9401087787ccc1a38cf 2006-10-17T05:15:07.093462Z 18 jlbiord has-props 769 dbgstep.png file 2010-04-17T07:24:40.362882Z 1df3d8ab281db72aea9d536533c2dddd 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 182 view_tree.png file 2010-04-17T07:24:40.366881Z 50b875d2423c8a4d3788e0d0dd57542a 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 373 CVtypedef.png file 2010-04-17T07:24:40.366881Z 70b5b39e1eaa9e624d9095165f16f59f 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 287 CVpackage_var.png file 2010-04-17T07:24:40.370883Z 395ab879cee1670233f988d82d10f4eb 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 295 print.png file 2010-04-17T07:24:40.370883Z 11b4915c06a6ba02f2b6190be6089735 2006-12-14T20:45:17.649759Z 93 jlbiord has-props 1510 linguist.png file 2010-04-17T07:24:40.374880Z 363894171db12393d22fd726d62e178e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 2322 filesave.png file 2010-04-17T07:24:40.374880Z 47c20a4c9104d3101bb0c8f0a753f97b 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 821 refresh.png file 2010-04-17T07:24:40.378882Z 01cf179d190c6da22809f7bfa4dddd95 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1408 dbgrestart.png file 2010-04-17T07:24:40.378882Z 994c0eb06dc3b716c68261302c43bb2c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 222 bookmarkprevious.png file 2010-04-17T07:24:40.378882Z e6e0743f6e0996888cdb99f379cb219a 2006-10-19T16:34:27.372248Z 26 jlbiord has-props 1083 buildstop.png file 2010-04-17T07:24:40.382882Z d9f7dbb6ddee11903c98515b747c1553 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 1336 logoeditor.png file 2010-04-17T07:24:40.382882Z d92c02e912d59f78be7f58501eb33b44 2007-09-27T19:47:49.259449Z 239 jlbiord has-props 1340 ajouter.png file 2010-04-17T07:24:40.386882Z c58f706c983470920dea2544c9fe867e 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 502 wrap.png file 2010-04-17T07:24:40.386882Z 495046a9e5ce86d29046b668d999e2d0 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 500 CVprivate_var.png file 2010-04-17T07:24:40.390881Z 157dee50f1b31697dab185b774605b3c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 314 CVpublic_var.png file 2010-04-17T07:24:40.390881Z bbf34b9a6be847841042cc8891ef2172 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 293 CVprotected_signal.png file 2010-04-17T07:24:40.390881Z b34216b571d4ee921024cde6e797cc86 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 352 dbgstepout.png file 2010-04-17T07:24:40.394881Z 758c5bd014131e2d3e2d40874592e2dd 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 204 cpp.png file 2010-04-17T07:24:40.394881Z b50b952abb91057a01d724cbaf73227d 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 925 nogood.png file 2010-04-17T07:24:40.398882Z 96d1d84c7952e64472f4e7215aaa2748 2006-10-17T05:15:07.093462Z 18 jlbiord has-props 883 supprimer.png file 2010-04-17T07:24:40.398882Z f57e37a04246b4431d06b9b334803df4 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 237 filesaveall.png file 2010-04-17T07:24:40.402882Z eeaf50d46928a79fab00b0cb7481169c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 999 cross.png file 2010-04-17T07:24:40.402882Z 96d1d84c7952e64472f4e7215aaa2748 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 883 filenew.png file 2010-04-17T07:24:40.406882Z 07ecd5c05547b062d5fdf3ad8342f601 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 825 CVprotected_var.png file 2010-04-17T07:24:40.406882Z e5f314d90eeee2d8622c03391f17330c 2006-10-07T15:56:50.310896Z 5 jlbiord has-props 321 qdevelop-v0.28/resources/images/.svn/dir-prop-base0000444000175000017500000000004411362261070021150 0ustar jlbrdjlbrdK 10 svn:ignore V 10 Thumbs.db END qdevelop-v0.28/resources/images/.svn/all-wcprops0000444000175000017500000003000211362261070020744 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 45 /svn/!svn/ver/465/tags/v0.28/resources/images END fileprint.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/fileprint.png END breakpoint.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/breakpoint.png END refresh.jpeg K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/refresh.jpeg END editcut.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/editcut.png END fileopen.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/fileopen.png END warning.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/warning.png END bookmark.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/bookmark.png END doc.png K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/resources/images/doc.png END undo.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/undo.png END CVprotected_enum.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprotected_enum.png END pause.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/pause.png END CVstruct.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/CVstruct.png END dbgparam.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgparam.png END breakpoint2.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/breakpoint2.png END desindente.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/desindente.png END filesaveas.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/filesaveas.png END editpaste.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/editpaste.png END qmessagebox-warn.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/qmessagebox-warn.png END CVprotected_slot.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprotected_slot.png END buildrun.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/buildrun.png END dbgrunto.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgrunto.png END exec.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/exec.png END edit.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/edit.png END CVnamespace.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/CVnamespace.png END logo.ico K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/logo.ico END rebuild.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/rebuild.png END CVprivate_enum.png K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprivate_enum.png END window_fullscreen.png K 25 svn:wc:ra_dav:version-url V 67 /svn/!svn/ver/465/tags/v0.28/resources/images/window_fullscreen.png END dbgnextinst.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgnextinst.png END redo.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/redo.png END curseurDroit.png K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/resources/images/curseurDroit.png END dbgnext.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgnext.png END CVpublic_enum.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpublic_enum.png END libre.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/libre.png END CVprotected_meth.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprotected_meth.png END build.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/build.png END designer.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/designer.png END CVglobal_var.png K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/resources/images/CVglobal_var.png END CVprivate_slot.png K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprivate_slot.png END dbgvar.png K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgvar.png END CVglobal_meth.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVglobal_meth.png END CVpublic_slot.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpublic_slot.png END exit.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/exit.png END next.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/next.png END editcopy.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/editcopy.png END CVprivate_meth.png K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprivate_meth.png END empty-16x16.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/empty-16x16.png END configure.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/configure.png END dbgrun.png K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgrun.png END CVpublic_meth.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpublic_meth.png END debugger.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/debugger.png END qrc.png K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/resources/images/qrc.png END stop.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/stop.png END indente.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/indente.png END dbgmemview.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgmemview.png END window_nofullscreen.png K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/resources/images/window_nofullscreen.png END compile.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/compile.png END clearallbookmarks.png K 25 svn:wc:ra_dav:version-url V 67 /svn/!svn/ver/465/tags/v0.28/resources/images/clearallbookmarks.png END error.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/error.png END hide1.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/hide1.png END SplashQDevelop.png K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/images/SplashQDevelop.png END hide2.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/hide2.png END editclear.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/editclear.png END CVclass.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/CVclass.png END resume.png K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/resources/images/resume.png END logo.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/logo.png END CVprivate_signal.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprivate_signal.png END clear_left.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/clear_left.png END CVpackage_meth.png K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpackage_meth.png END bookmarknext.png K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/resources/images/bookmarknext.png END CVpublic_signal.png K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpublic_signal.png END fileclose.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/fileclose.png END editdelete.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/editdelete.png END previous.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/previous.png END dir.png K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/resources/images/dir.png END QDevelop.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/QDevelop.png END find.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/find.png END helpassistant.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/helpassistant.png END dbgstepinst.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgstepinst.png END h.png K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/resources/images/h.png END qdevelop.icns K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/qdevelop.icns END good.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/good.png END dbgstep.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgstep.png END view_tree.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/view_tree.png END CVtypedef.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/CVtypedef.png END CVpackage_var.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpackage_var.png END print.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/print.png END linguist.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/linguist.png END filesave.png K 25 svn:wc:ra_dav:version-url V 58 /svn/!svn/ver/465/tags/v0.28/resources/images/filesave.png END refresh.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/refresh.png END dbgrestart.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgrestart.png END bookmarkprevious.png K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/465/tags/v0.28/resources/images/bookmarkprevious.png END buildstop.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/buildstop.png END logoeditor.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/logoeditor.png END ajouter.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/ajouter.png END wrap.png K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/resources/images/wrap.png END CVprivate_var.png K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprivate_var.png END CVpublic_var.png K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/resources/images/CVpublic_var.png END CVprotected_signal.png K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprotected_signal.png END dbgstepout.png K 25 svn:wc:ra_dav:version-url V 60 /svn/!svn/ver/465/tags/v0.28/resources/images/dbgstepout.png END cpp.png K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/resources/images/cpp.png END nogood.png K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/resources/images/nogood.png END supprimer.png K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/465/tags/v0.28/resources/images/supprimer.png END filesaveall.png K 25 svn:wc:ra_dav:version-url V 61 /svn/!svn/ver/465/tags/v0.28/resources/images/filesaveall.png END cross.png K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/465/tags/v0.28/resources/images/cross.png END filenew.png K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/resources/images/filenew.png END CVprotected_var.png K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/465/tags/v0.28/resources/images/CVprotected_var.png END qdevelop-v0.28/resources/translations/.svn/entries0000444000175000017500000000520411362261067021442 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/resources/translations http://qdevelop.googlecode.com/svn 2009-03-30T09:36:20.273485Z 453 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd QDevelop_Czech.ts file 2010-04-17T07:24:39.054881Z 562f34730b396cd56831b2f8fa7e358a 2009-03-30T06:12:36.851294Z 451 Lord.Divius 164560 QDevelop_Polish.ts file 2010-04-17T07:24:39.058883Z 424944923abdcc38f400e875e6f783cc 2009-03-30T06:12:36.851294Z 451 Lord.Divius 156787 QDevelop_Vietnamese.ts file 2010-04-17T07:24:39.062882Z 2c312d758f898e4fb362f11998d7cef4 2009-03-30T06:12:36.851294Z 451 Lord.Divius 155668 QDevelop_Portuguese.ts file 2010-04-17T07:24:39.070881Z 64c4c050e87e0857a6dc239260b103a9 2009-03-30T06:12:36.851294Z 451 Lord.Divius 163487 QDevelop_Spanish.ts file 2010-04-17T07:24:39.074881Z d6dcba91bef5261b7862809da7ec5b56 2009-03-30T06:12:36.851294Z 451 Lord.Divius 155163 QDevelop_French.ts file 2010-04-17T07:24:39.074881Z e3eb7f73089874fac71fa67d5b377ad5 2009-03-30T06:12:36.851294Z 451 Lord.Divius 154222 QDevelop_Dutch.ts file 2010-04-17T07:24:39.078881Z 31261263d8d323e3c4bc1e09cd95e8e8 2009-03-30T06:12:36.851294Z 451 Lord.Divius 153847 QDevelop_German.ts file 2010-04-17T07:24:39.082880Z 0f2fc6b2d7639a5a81e86acb4caceda2 2009-03-30T09:36:20.273485Z 453 ralfjung-e@gmx.de 163216 QDevelop_Hungarian.ts file 2010-04-17T07:24:39.054881Z fca25a3031690d2dd8a837a67309d9f8 2009-03-30T06:12:36.851294Z 451 Lord.Divius 165523 QDevelop_Chinese.ts file 2010-04-17T07:24:39.062882Z abcdd1f9458911628391e9e65b28c176 2009-03-30T06:12:36.851294Z 451 Lord.Divius 152796 QDevelop_Italian.ts file 2010-04-17T07:24:39.066881Z e24efe8416d970980709a71823deb4c0 2009-03-30T06:12:36.851294Z 451 Lord.Divius 159687 QDevelop_Ukrainian.ts file 2010-04-17T07:24:39.066881Z 2cfbe340ba0bbfd2e165055c76078baa 2009-03-30T06:12:36.851294Z 451 Lord.Divius 166768 QDevelop_Russian.ts file 2010-04-17T07:24:39.070881Z 6a8cfed39d467f51ccac4ccccae893bb 2009-03-30T06:12:36.851294Z 451 Lord.Divius 168194 QDevelop_Japanese.ts file 2010-04-17T07:24:39.078881Z 5a6629108c95125310313a4b2c9f7f96 2009-03-30T06:12:36.851294Z 451 Lord.Divius 157993 QDevelop_Turkish.ts file 2010-04-17T07:24:39.082880Z b8d1cfba3dd525192e83789864a0f5ab 2009-03-30T06:12:36.851294Z 451 Lord.Divius 154131 qdevelop-v0.28/resources/translations/.svn/all-wcprops0000444000175000017500000000404011362261067022231 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/resources/translations END QDevelop_Czech.ts K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Czech.ts END QDevelop_Polish.ts K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Polish.ts END QDevelop_Vietnamese.ts K 25 svn:wc:ra_dav:version-url V 74 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Vietnamese.ts END QDevelop_Portuguese.ts K 25 svn:wc:ra_dav:version-url V 74 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Portuguese.ts END QDevelop_Spanish.ts K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Spanish.ts END QDevelop_French.ts K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_French.ts END QDevelop_Dutch.ts K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Dutch.ts END QDevelop_German.ts K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_German.ts END QDevelop_Hungarian.ts K 25 svn:wc:ra_dav:version-url V 73 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Hungarian.ts END QDevelop_Chinese.ts K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Chinese.ts END QDevelop_Italian.ts K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Italian.ts END QDevelop_Ukrainian.ts K 25 svn:wc:ra_dav:version-url V 73 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Ukrainian.ts END QDevelop_Russian.ts K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Russian.ts END QDevelop_Japanese.ts K 25 svn:wc:ra_dav:version-url V 72 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Japanese.ts END QDevelop_Turkish.ts K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/resources/translations/QDevelop_Turkish.ts END qdevelop-v0.28/resources/.svn/text-base/resources.qrc.svn-base0000444000175000017500000001144111362261070023451 0ustar jlbrdjlbrd images/CVclass.png images/CVglobal_meth.png images/CVglobal_var.png images/CVnamespace.png images/CVpackage_meth.png images/CVpackage_var.png images/CVprivate_meth.png images/CVprivate_signal.png images/CVprivate_slot.png images/CVprivate_var.png images/CVprotected_meth.png images/CVprotected_signal.png images/CVprotected_slot.png images/CVprotected_var.png images/CVpublic_meth.png images/CVpublic_signal.png images/CVpublic_slot.png images/CVpublic_var.png images/CVstruct.png images/CVtypedef.png images/QDevelop.png images/SplashQDevelop.png images/ajouter.png images/bookmark.png images/bookmarknext.png images/bookmarkprevious.png images/clearallbookmarks.png images/curseurDroit.png images/good.png images/hide1.png images/hide2.png images/libre.png images/logo.png images/next.png images/nogood.png images/breakpoint.png images/breakpoint2.png images/previous.png images/qmessagebox-warn.png images/supprimer.png images/wrap.png images/editclear.png images/clear_left.png images/window_fullscreen.png images/window_nofullscreen.png images/logoeditor.png images/error.png images/warning.png images/empty-16x16.png templates/dialog.ui templates/impl.cpp.template templates/impl.h.template templates/newclassimpl.cpp.template templates/newclassimpl.h.template templates/main.cpp.template templates/mainwindow.ui templates/widget.ui images/build.png images/buildrun.png images/buildstop.png images/compile.png images/configure.png images/cross.png images/dbgmemview.png images/dbgnext.png images/dbgnextinst.png images/dbgparam.png images/dbgrestart.png images/dbgrun.png images/dbgrunto.png images/dbgstep.png images/dbgstepinst.png images/dbgstepout.png images/dbgvar.png images/debugger.png images/desindente.png images/edit.png images/editcopy.png images/editcut.png images/editdelete.png images/editpaste.png images/exec.png images/exit.png images/fileclose.png images/filenew.png images/fileopen.png images/fileprint.png images/filesave.png images/filesaveall.png images/filesaveas.png images/find.png images/helpassistant.png images/indente.png images/pause.png images/rebuild.png images/redo.png images/refresh.png images/resume.png images/stop.png images/undo.png images/view_tree.png images/print.png images/cpp.png images/designer.png images/dir.png images/doc.png images/h.png images/linguist.png images/qrc.png qdevelop-v0.28/plugins/formatting-astyle/translations/AStyle_French.ts0000644000175000017500000002206011362261064025336 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Sample Style Styles GNU ANSI Custom Linux Java K&&R Indentation Indent multi-line preprocessor definitions Indent labels Indent namespaces Indent blocks Indent brackets Converts TABs to spaces Force using TABs Indentation size (in spaces) Indent classes (keywords public:, protected: and private:) Indent case: statement in switches (commands under case:) Use TABs instead of spaces Fill empty lines with the whitespace of their previous lines Indent switches (keyword case:) Formatting Brackets (None, Break, Attach or Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Insert space padding around operators Insert space padding around parenthesis Don't break complex statements and multiple statements residing in a single line Don't break one-line blocks &About &OK &Cancel <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin qdevelop-v0.28/plugins/formatting-astyle/translations/AStyle_Russian.ts0000644000175000017500000002504111362261064025557 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Artistic Style: Плагин форматирования Sample Пример Style Стиль Styles Стили GNU ANSI Custom Пользовательский Linux Java K&&R Indentation Отступы Indent multi-line preprocessor definitions Отступ в многострочных директивах препроцессора Indent labels Отступ меток Indent namespaces Отступ пространств имён Indent blocks Отступ блоков Indent brackets Отступ скобок Converts TABs to spaces Конвертировать табуляции в пробелы Force using TABs Форсировать использование табуляций Indentation size (in spaces) Размер отступа (в пробелах) Indent classes (keywords public:, protected: and private:) Отступ в классах (слова public:, protected: and private:) Indent case: statement in switches (commands under case:) Отступать case: команды после "case:" Use TABs instead of spaces Использовать табуляции вместо пробелов Fill empty lines with the whitespace of their previous lines Заполнять пустые строки отступами как в предыдущих строках Indent switches (keyword case:) Отступ в конструкции switch (ключевое слово case:) Formatting Форматирование Brackets (None, Break, Attach or Linux): Скобки (none=Оставить, break=разбивать, attach=присоединять, linux=использовать стиль Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Пустые строки вокруг блоков (пр.: 'if', 'while'...) Break 'else if()' header combinations into seperate lines Разбивать комбинацию 'else if()' на отдельные строчки Insert space padding around operators Вставлять пробел вокруг операторов Insert space padding around parenthesis Вставлять пробел внутри скобок Don't break complex statements and multiple statements residing in a single line Не разбивать сложные и составные выражения, расположенные на одной строчке Don't break one-line blocks Не разбивать однострочные блоки &About &О плагине &OK &Ок &Cancel О&тмена <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin Artistic Style: Плагин форматирования AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net Плагин AStyle для QDevelop Авторское право (c) 2006 Jean-Luc Biord <jlbiord@qtfr.org> Перевод: Дмитрий "Divius" Танцур <divius.inside@gmail.com> Частью этого плагина является Artistic Style - утилита отступа и переформатирования для исходников C, C++, C# и Java. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin Artistic Style: Плагин форматирования qdevelop-v0.28/plugins/formatting-astyle/translations/AStyle_German.ts0000644000175000017500000002445011362261064025347 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Plugin für AStyle-Formatierer Sample Beispiel Style Stil Styles Stile GNU ANSI Custom Benutzerdefiniert Linux Java K&&R K&&R Indentation Einrückung Indent multi-line preprocessor definitions Mehrzeilige Präprozessor-Anweisungen einrücken Indent labels Beschriftungen einrücken Indent namespaces Namensräume einrücken Indent blocks Blöcke einrücken Indent brackets Klammern einrücken Converts TABs to spaces TABs in Leerzeichen umwandeln Force using TABs TABs erzwingen Indentation size (in spaces) Größe der Einrückung (in Leerzeichen) Indent classes (keywords public:, protected: and private:) Klassen einrücken (Schlüsselwörter public:, protected: und private:) Indent case: statement in switches (commands under case:) Kommandos unter case: in switch-Blöcken einrücken Use TABs instead of spaces TABs statt Leerzeichen verwenden Fill empty lines with the whitespace of their previous lines Fülle leere Zeilen mit der Anzahl führender Leerzeichen der vorhergehenden Zeile Indent switches (keyword case:) switch-Blöcke einrücken (Schlüsselwort case:) Formatting Formatierung Brackets (None, Break, Attach or Linux): Klammern (keine, umbrechen, anhängen oder Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Leere Zeilen um Blöcke (z.B. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Trenne 'else if()' in zwei Zeilen Insert space padding around operators Füge Leerzeichen um Operatoren ein Insert space padding around parenthesis Füge Leerzeichen um Klammern ein Don't break complex statements and multiple statements residing in a single line Brich komplizierte und kombinierte Ausdrücke in einer Zeile nicht um Don't break one-line blocks Brich einzeilige Blöcke nicht um &About &Über &OK &Ok &Cancel &Abbrechen <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin Plugin für AStyle-Formatierer AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net AStyle Plugin für QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Dieses programm enthält "Artistic Style" - ein Tool zum Einrücken und Reformatieren von C, C++, C# und Java Quelltext. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin Plugin für AStyle-Formatierer qdevelop-v0.28/plugins/formatting-astyle/.svn/entries0000444000175000017500000000463711362261064022047 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/plugins/formatting-astyle http://qdevelop.googlecode.com/svn 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd translations dir ASBeautifier.cpp file 2010-04-17T07:24:36.818880Z 300f1e83f6c427fbf9c4aa49ab7ab90f 2009-03-05T08:54:03.524395Z 433 Lord.Divius 49301 astyledialogimpl.cpp file 2010-04-17T07:24:36.818880Z 08e414f35eb39e07d8cd01c70c2b9908 2009-03-28T16:39:53.372449Z 444 Lord.Divius 11581 astyle_main.cpp file 2010-04-17T07:24:36.822880Z bb91a2175e0e78b6375dd316d8840375 2009-03-05T08:54:03.524395Z 433 Lord.Divius 30919 astyle.h file 2010-04-17T07:24:36.822880Z 70369c5cf7c29c833e7b20210d6a6192 2009-03-05T08:54:03.524395Z 433 Lord.Divius 14830 ASEnhancer.cpp file 2010-04-17T07:24:36.826881Z 5a05be3fe9a550f7d6ce5ba241324230 2009-03-05T08:54:03.524395Z 433 Lord.Divius 12536 astyledialogimpl.h file 2010-04-17T07:24:36.830880Z 8e79d039e4eaaec8979d865c7aaad431 2009-03-05T11:37:12.462169Z 435 Lord.Divius 2551 ASResource.cpp file 2010-04-17T07:24:36.830880Z abf999827ebf1ccb06b7a21042d4e3e1 2009-03-05T08:54:03.524395Z 433 Lord.Divius 13884 astyleplugin.cpp file 2010-04-17T07:24:36.818880Z 90089399b3abdc4d42ba00966efdd77d 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 4087 astyleplugin.h file 2010-04-17T07:24:36.822880Z d494ea68617d04e7d189a3acd01336e8 2009-03-28T16:39:53.372449Z 444 Lord.Divius 1491 COPYING file 2010-04-17T07:24:36.826881Z 94d55d512a9ba36caa9b7df079bae19f 2009-03-05T08:54:03.524395Z 433 Lord.Divius 17992 ASFormatter.cpp file 2010-04-17T07:24:36.826881Z dc68a6d0dec95dd375231f40b016043b 2009-03-05T08:54:03.524395Z 433 Lord.Divius 50189 formatting-astyle.pro file 2010-04-17T07:24:36.822880Z 3b9cf77bbac6cfc4ee1315e2fb1263c5 2009-03-28T19:50:12.066865Z 446 ralfjung-e@gmx.de 692 README.txt file 2010-04-17T07:24:36.830880Z 420ebfd7cd6b7c94e765003f3107c90d 2009-03-05T08:54:03.524395Z 433 Lord.Divius 1097 astyle.ui file 2010-04-17T07:24:36.830880Z 7a00d94e36242b63f91c6f100b5f0bec 2009-03-28T16:39:53.372449Z 444 Lord.Divius 17944 qdevelop-v0.28/plugins/formatting-astyle/.svn/all-wcprops0000444000175000017500000000346711362261064022641 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle END astyleplugin.cpp K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyleplugin.cpp END astyledialogimpl.cpp K 25 svn:wc:ra_dav:version-url V 75 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyledialogimpl.cpp END ASBeautifier.cpp K 25 svn:wc:ra_dav:version-url V 71 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/ASBeautifier.cpp END astyleplugin.h K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyleplugin.h END astyle_main.cpp K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyle_main.cpp END astyle.h K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyle.h END formatting-astyle.pro K 25 svn:wc:ra_dav:version-url V 76 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/formatting-astyle.pro END ASEnhancer.cpp K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/ASEnhancer.cpp END ASFormatter.cpp K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/ASFormatter.cpp END COPYING K 25 svn:wc:ra_dav:version-url V 62 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/COPYING END astyledialogimpl.h K 25 svn:wc:ra_dav:version-url V 73 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyledialogimpl.h END README.txt K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/README.txt END ASResource.cpp K 25 svn:wc:ra_dav:version-url V 69 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/ASResource.cpp END astyle.ui K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/astyle.ui END qdevelop-v0.28/plugins/tools-regexp-planner/translations/RePlanner_German.ts0000644000175000017500000000654011362261064026450 0ustar jlbrdjlbrd QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Editor für reguläre Ausdrücke, z.B. [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Regulären Ausdruck kontrollieren Meaning of Colours: Bedeutung der Farben: Acceptable Stimmt überein Intermediate Vorstufe Invalid Ungültig Close Schließen About plugin Über das Plugin RegExp Planner RegExp-Planer RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> RegExp-Planer Plugin für QDevelop Ursprüngliche Arbeit: Copyright (C) 2008 von Prém József Angepasst für QDevelop von Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Plugin license: GPLv2 Lizenz des Plugins: GPLv2 QpjValidIndicatorLabel Valid Gültig Invalid Ungültig RePlugin RegExp Planner RegExp-Planer qdevelop-v0.28/plugins/tools-regexp-planner/translations/RePlanner_French.ts0000644000175000017500000000636011362261064026444 0ustar jlbrdjlbrd QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Meaning of Colours: Acceptable Intermediate Invalid Close About plugin RegExp Planner RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Plugin license: GPLv2 QpjValidIndicatorLabel Valid Invalid RePlugin RegExp Planner qdevelop-v0.28/plugins/tools-regexp-planner/translations/RePlanner_Russian.ts0000644000175000017500000000765111362261064026667 0ustar jlbrdjlbrd Invalid Неверно QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Редактор регулярных выражений пр.: [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Проверка регулярных выражений Meaning of Colours: Значения цветов: Acceptable Допустимое Intermediate Промежуточное Invalid Неверное Close Закрыть About plugin О плагине RegExp Planner RegExp Planner: Редактор регулярных выражений RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Плагин RegExp Planner для QDevelop Оригинальная разработка: Copyright (C) 2008 by Prém József Адаптация для использования в QDevelop: Дмитрий "Divius" Танцур <divius.inside@gmail.com> Plugin license: GPLv2 Лицензия плагина: GPLv2 QpjValidIndicatorLabel Valid Верно Invalid Неверно RePlugin RegExp Planner Редактор регулярных выражений qdevelop-v0.28/plugins/tools-regexp-planner/.svn/entries0000444000175000017500000000326011362261064022452 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/plugins/tools-regexp-planner http://qdevelop.googlecode.com/svn 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd translations dir qpjchecktextedit.cpp file 2010-04-17T07:24:36.458880Z 6d7835f9fd9e510a05b5c1e405e2fa40 2009-03-28T14:44:25.204613Z 440 Lord.Divius 4588 rep.pro file 2010-04-17T07:24:36.458880Z 7b6a96e1ed57f8ec7f6d846e0fb1bb4e 2009-03-28T19:50:12.066865Z 446 ralfjung-e@gmx.de 642 qpjregexpplannerdialog.cpp file 2010-04-17T07:24:36.458880Z 071785b99a2c71e2d868c0703ad5bb33 2009-03-29T16:06:34.373187Z 447 Lord.Divius 4587 replugin.cpp file 2010-04-17T07:24:36.458880Z 1a97581dc81a44e98dd59454e2fce59c 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 2530 qpjvalidindicatorlabel.cpp file 2010-04-17T07:24:36.458880Z 7a43719fc0e7101852cc3a25c21e8d60 2009-03-28T15:50:16.446776Z 443 Lord.Divius 2411 qpjchecktextedit.h file 2010-04-17T07:24:36.462878Z a62a78932771ca5bd0b826bf88f93bc0 2009-03-28T14:44:25.204613Z 440 Lord.Divius 2320 qpjregexpplannerdialog.h file 2010-04-17T07:24:36.462878Z a43843e0c8315af9dff849fe129b3c92 2009-03-29T16:06:34.373187Z 447 Lord.Divius 2717 replugin.h file 2010-04-17T07:24:36.462878Z 6111f7a324995df9b602557003efe1bb 2009-03-28T15:50:16.446776Z 443 Lord.Divius 1389 qpjvalidindicatorlabel.h file 2010-04-17T07:24:36.462878Z be44e7e8670cbf10147817300ae40a55 2009-03-28T15:50:16.446776Z 443 Lord.Divius 2212 qdevelop-v0.28/plugins/tools-regexp-planner/.svn/all-wcprops0000444000175000017500000000246411362261064023251 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner END qpjchecktextedit.cpp K 25 svn:wc:ra_dav:version-url V 78 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjchecktextedit.cpp END rep.pro K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/rep.pro END qpjregexpplannerdialog.cpp K 25 svn:wc:ra_dav:version-url V 84 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjregexpplannerdialog.cpp END replugin.cpp K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/replugin.cpp END qpjvalidindicatorlabel.cpp K 25 svn:wc:ra_dav:version-url V 84 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjvalidindicatorlabel.cpp END qpjchecktextedit.h K 25 svn:wc:ra_dav:version-url V 76 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjchecktextedit.h END qpjregexpplannerdialog.h K 25 svn:wc:ra_dav:version-url V 82 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjregexpplannerdialog.h END replugin.h K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/replugin.h END qpjvalidindicatorlabel.h K 25 svn:wc:ra_dav:version-url V 82 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/qpjvalidindicatorlabel.h END qdevelop-v0.28/src/QIComplete/.svn/entries0000444000175000017500000000210111362261065017467 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/src/QIComplete http://qdevelop.googlecode.com/svn 2008-07-19T12:40:53.951274Z 330 jlbiord 31becf8c-a71e-0410-8e62-47ffcaada4dd parse.h file 2010-04-17T07:24:37.482878Z 0d9346837bb6d17d4d2c8a1f72e6219a 2006-10-07T15:56:50.310896Z 5 jlbiord 3490 tree.cpp file 2010-04-17T07:24:37.482878Z e85d9d66ddbe03ac00b84ca84380a9ad 2008-07-19T12:40:53.951274Z 330 jlbiord 11167 readtags.h file 2010-04-17T07:24:37.482878Z e6e038ebdf430246b84a3af09f0c9619 2006-10-07T15:56:50.310896Z 5 jlbiord 8866 tree.h file 2010-04-17T07:24:37.486882Z e88f8e73120be7cd922a429426ee0189 2007-06-15T13:26:37.859305Z 151 jlbiord 2140 parse.cpp file 2010-04-17T07:24:37.486882Z 101664e198fb10385c08f3bd7a0adcc5 2007-10-08T16:30:53.667618Z 251 jlbiord 16292 readtags.cpp file 2010-04-17T07:24:37.486882Z 1ff4db656d59d8c9154145b15e86974d 2007-09-18T19:19:59.232294Z 220 jlbiord 18017 qdevelop-v0.28/src/QIComplete/.svn/all-wcprops0000444000175000017500000000130011362261065020261 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 43 /svn/!svn/ver/465/tags/v0.28/src/QIComplete END parse.h K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/parse.h END tree.cpp K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/tree.cpp END readtags.h K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/readtags.h END tree.h K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/tree.h END parse.cpp K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/parse.cpp END readtags.cpp K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/465/tags/v0.28/src/QIComplete/readtags.cpp END qdevelop-v0.28/src/.svn/text-base/InitCompletion.cpp.svn-base0000444000175000017500000007762111362261066023167 0ustar jlbrdjlbrd /******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Anacr0x ( fred.julian at gmail.com ) * FILENAME : InitCompletion.h * LICENSE : GPL * COMMENTARY : Initialisation class for the icomplete's autocompletion ********************************************************************************************************/ #include "InitCompletion.h" #include "./QIComplete/parse.h" #include "./QIComplete/readtags.h" #include "./QIComplete/tree.h" #include "misc.h" #include "treeclasses.h" #include #include #include #include #include #include #include #include #include #include #include #ifdef _WIN32 #define NEW_LINE "\r\n" #else #define NEW_LINE "\n" #endif #include #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); InitCompletion::InitCompletion (QObject *parent, TreeClasses *treeClasses) : QThread(parent), m_treeClasses(treeClasses) { qRegisterMetaType("TagList"); m_stopRequired = false; } // InitCompletion::~InitCompletion() { QStringList list = QDir( QDir::tempPath() ).entryList(QStringList() << "qdevelop-completion-*", QDir::Files); foreach(QString file, list) { QFile( QDir::tempPath()+"/"+file ).remove(); } if ( m_stopRequired ) { if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return; } createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); QString queryString = "delete from tags"; query.exec(queryString); query.exec("END TRANSACTION;"); } } // void InitCompletion::slotInitParse(InitCompletion::Request request, QString filename, const QString &text, bool showAllResults, bool emitResults, bool /*showDuplicateEntries*/, QString name) { m_text = text; m_emitResults = emitResults; m_showAllResults = showAllResults; m_name = name; m_request = request; QString Path = QDir::tempPath(); tagsIncludesPath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-tags_includes"; tagsFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-tags"; smallTagsFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-small-tags"; parsedFilePath = Path + '/' + "qdevelop-completion-" + QFileInfo(filename).baseName() + "-parsed_file"; this->start(); } void InitCompletion::addIncludes (QStringList includesPath, QString projectDirectory) { QDir dir; QFileInfoList list; for (int i = 0; i < includesPath.size(); i++) { dir.setPath(includesPath[i]); if (dir.exists() && !cpp_includes.contains(includesPath[i])) cpp_includes << includesPath[i]; list = dir.entryInfoList(QDir::Dirs | QDir::Readable | QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::Hidden); for (int j = 0; j < list.size(); ++j) includesPath.insert(i+1, list[j].absoluteFilePath()); } m_projectDirectory = projectDirectory; } QStringList InitCompletion::includesList(const QString &parsedText) { QStringList list; /* find include'ed files */ QRegExp rx("#\\s*include\\s*(<[^>]+>|\"[^\"]+\")"); QString include; int pos = 0; while ((pos = rx.indexIn(parsedText, pos)) != -1) { include = rx.cap(1); include.remove(0, 1); include.remove(include.length() - 1, 1); list << include; pos += rx.matchedLength(); } return list; } QString InitCompletion::includesPathList(const QString &parsedText) { QString list, fullpath, buf; QStringList includes = includesList(parsedText); while (!includes.empty()) { QFile *temp_fd = getFiledescriptor(includes.first(), fullpath); includes.removeFirst(); if (temp_fd) { if (!list.contains(fullpath)) { list += fullpath + NEW_LINE; buf = temp_fd->readAll(); includes << includesList(buf); } temp_fd->close(); delete temp_fd; } } return list; } /* creates a simple hash for all #include lines of a line */ long InitCompletion::calculateHash(const QString &parsedText) { long res = 0; QStringList includes = includesList(parsedText); QString s; foreach (s, includes) { for (int i = 0; i < s.length(); i++) res += (i + 1) * s[i].toAscii(); } return res; } /* forks and executes ctags to rebuild a tags file * storing cache_value in the tags file */ bool InitCompletion::buildTagsFile(long cache_value, const QString &parsedText) { QString pathList = includesPathList(parsedText); QFile includesListFile(tagsIncludesPath); if (includesListFile.open(QIODevice::WriteOnly | QIODevice::Text)) { includesListFile.write (pathList.toLocal8Bit()); includesListFile.close(); /* save the cache information in the tags file */ QFile tags(tagsFilePath); if (tags.open(QIODevice::WriteOnly | QIODevice::Text)) { QString head = "!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;\" to lines/" NEW_LINE "!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/" NEW_LINE "!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/" NEW_LINE "!_TAG_PROGRAM_NAME Exuberant Ctags //" NEW_LINE "!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/" NEW_LINE "!_TAG_PROGRAM_VERSION 5.5.4 //" NEW_LINE "!_TAG_CACHE\t" + QString::number(cache_value) + NEW_LINE; tags.write(head.toLocal8Bit()); tags.close(); } QString command = ctagsCmdPath + " -f \"" + tagsFilePath + "\" --append --language-force=c++ --fields=afiKmsSzn --c++-kinds=cdefgmnpstuvx -L \"" + tagsIncludesPath + '\"'; // I don't process any user input, so system() should be safe enough QProcess ctags; ctags.execute(command); includesListFile.remove(); if (ctags.exitStatus() == QProcess::NormalExit) return true; } return false; } Expression InitCompletion::getExpression(const QString &text, Scope &sc, bool showAllResults) { Tree::parent = this; long cache_value = calculateHash(text); /* automatic cache mode */ /* we save a hash value for all included files from the current file in the tags file, if it matches the hash of the current buffer, nothing has changed, and reuse the existing tags file */ bool build_cache = true; QFile fCache(tagsFilePath); if (fCache.open(QIODevice::ReadOnly)) { QString pattern = "!_TAG_CACHE\t" + QString::number(cache_value) + NEW_LINE; for (int i=0; i<10; i++) if (fCache.readLine() == pattern) build_cache = false; fCache.close(); } if (build_cache) buildTagsFile(cache_value, text); /* We create a file with the parsed text */ QFile f(parsedFilePath); f.open(QIODevice::WriteOnly | QIODevice::Text); f.write (text.toLocal8Bit()); f.close(); /* real parsing starts here */ Parse parse(ctagsCmdPath, tagsFilePath, parsedFilePath, smallTagsFilePath); return parse.parseExpression(text, &sc, showAllResults); } void InitCompletion::run() { if ( m_request == CheckQtDatabase ) { Expression exp; exp.className = "QString"; TagList list; list = readFromDB(list, exp, QString()); if ( list.count() ) { QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); return; } populateQtDatabase(); QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); return; } Scope sc; Expression exp = parseLine( m_text ); /* we have all relevant information, so just list the entries */ TagList list, newList, listForDB; if ( m_emitResults ) { if (exp.access != ParseError ) { if ( !exp.className.isEmpty() ) { // Try to read from database list = readFromDB(list, exp, m_name.simplified()); // If the list is empty, the classe is not present in database if ( list.isEmpty() ) { // Populate the list by reading the tag file on disk list = Tree::findEntries(&exp, &sc); } if ( m_name.simplified().isEmpty() ) emit completionList( list ); else emit completionHelpList( list ); } } } } QString InitCompletion::className(const QString &text) { if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } Expression exp = parseLine( text ); if (exp.access == ParseError) return QString(); return exp.className; } void InitCompletion::setCtagsCmdPath (const QString &cmdPath) { if (cmdPath.indexOf(' ')!=-1) ctagsCmdPath = QString('\"') + cmdPath + '\"'; else ctagsCmdPath = cmdPath; } QFile* InitCompletion::getFiledescriptor(const QString &filename, QString &fullname) { QFile *fd = new QFile(); /* absolute path name */ if (QFileInfo(filename).isAbsolute()) { fd->setFileName(filename); if (fd->open(QIODevice::ReadOnly)) { fullname = QFileInfo(filename).canonicalFilePath(); return fd; } } else { /* relative pathname */ for (int i = 0; i < cpp_includes.size(); i++) { fd->setFileName(cpp_includes.at(i) + '/' + filename); if (fd->open(QIODevice::ReadOnly)) { fullname = QFileInfo(cpp_includes.at(i) + '/' + filename).canonicalFilePath(); return fd; } } } // Nothing was found fd->close(); delete fd; return NULL; } // TagList InitCompletion::readFromDB(TagList list, Expression exp, QString functionName) { if ( exp.className.isEmpty() ) return TagList(); QStringList classes; classes << exp.className; if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return TagList(); } /* The first character is not a 'Q', certainly an class created in the project. We read the list from the class browser which have all the classes and members of the project */ classes = inheritanceList(exp.className, classes); const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); Tag tag; tag.access = parsedItem.access; tag.name = parsedItem.name; tag.parameters = parsedItem.signature; tag.signature = parsedItem.signature; tag.returned = parsedItem.ex_cmd.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); if ( parsedItem.kind == "f" ) tag.kind = "function"; else if ( parsedItem.kind == "p" ) tag.kind = "prototype"; else if ( parsedItem.kind == "c" ) { tag.kind = "class"; tag.parameters = ""; } else if ( parsedItem.kind == "e" ) { if ( parsedItem.enumname.section(":", 0, 0) != exp.className ) continue; parsedItem.classname = exp.className; tag.parameters = ""; tag.kind = "member"; } else if ( parsedItem.kind == "m" ) { tag.kind = "member"; tag.parameters = ""; } else if ( parsedItem.kind == "s" ) { tag.kind = "struct"; tag.parameters = ""; } else { continue; } bool isStatic = parsedItem.ex_cmd.simplified().startsWith("static"); if ( !classes.contains( parsedItem.classname ) && !classes.contains( parsedItem.structname ) && !classes.contains( parsedItem.structname.section("::", -1) ) ) continue; else if ( !functionName.isEmpty() && parsedItem.name != functionName ) continue; else if ( parsedItem.name == parsedItem.classname || "~"+parsedItem.name == parsedItem.classname ) continue; else if ( tag.access != "public" && !m_text.simplified().endsWith("this->") ) continue; else if ( (exp.access == AccessStatic && isStatic != true && tag.kind != "struct" && tag.kind != "class") || (exp.access != AccessStatic && isStatic == true)) continue; list << tag; } // Continue the reading in qdevelop.db createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); // QString queryString = QString() + "select * from inheritance where child='"+exp.className+"'"; query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { classes << parent; } } // queryString = QString() + "select * from tags where class in ( "; foreach(QString c, classes) { queryString = queryString + " '" + c + "',"; } queryString = queryString.left( queryString.length()-1 ); queryString += " )"; if ( !functionName.simplified().isEmpty() ) { queryString += " and name='" + functionName + "'"; } // query.exec(queryString); while (query.next()) { Tag tag; tag.name = query.value(1).toString().replace("$", "'"); tag.parameters = query.value(2).toString().replace("$", "'"); tag.longName = query.value(3).toString().replace("$", "'"); tag.kind = query.value(4).toString().replace("$", "'"); tag.access = query.value(5).toString().replace("$", "'"); tag.signature = query.value(6).toString().replace("$", "'"); tag.returned = query.value(7).toString().replace("$", "'"); tag.isFunction = query.value(8).toInt(); tag.isStatic = query.value(9).toInt(); if ( (exp.access == AccessStatic && tag.isStatic != true) || (exp.access != AccessStatic && tag.isStatic == true)) continue; else if ( tag.access != "public" && !m_text.simplified().endsWith("this->") ) continue; if ( list.count() && functionName.simplified().isEmpty()) { Tag lastTag = list.last(); if ( lastTag.name == tag.name ) list.pop_back(); } list << tag; } return list; } // bool InitCompletion::connectQDevelopDB(QString const& dbName) { QSqlDatabase database; if ( QSqlDatabase::database(dbName).databaseName() != dbName ) { database = QSqlDatabase::addDatabase("QSQLITE", dbName); database.setDatabaseName(dbName); } else { database = QSqlDatabase::database(dbName); if ( database.isOpen() ) return true; } // if (!database.open()) { emit showMessage( QObject::tr("Unable to establish a database connection.")+"\n"+ QObject::tr("QDevelop needs SQLite support. Please read " "the Qt SQL driver documentation for information how " "to build it.") ); return false; } return true; } // void InitCompletion::writeToDB(Expression exp, TagList list, QSqlQuery query) { foreach(Tag tag, list) { QString queryString = "insert into tags values("; queryString = queryString + "'" + exp.className.replace("'", "$") + "', " + "'" + tag.name.replace("'", "$") + "', " + "'" + tag.parameters.replace("'", "$") + "', " + "'" + tag.longName.replace("'", "$") + "', " + "'" + tag.kind.replace("'", "$") + "', " + "'" + tag.access.replace("'", "$") + "', " + "'" + tag.signature.replace("'", "$") + "', " + "'" + tag.returned.replace("'", "$") + "', " + "'" + QString::number(tag.isFunction) + "', " + "'" + QString::number(tag.isStatic) + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; return; } } } // void InitCompletion::createTables() { QString queryString = "create table tags (" "class string," "name string," "parameters string," "longName string," "kind string," "access string," "signature string," "returned string," "isFunction int," "isStatic int" ")"; QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec(queryString); // queryString = "create table inheritance (" "parent string," "child string" ")"; query.exec(queryString); } // QStringList InitCompletion::filesList(QString directory, QStringList files) { QDir dir(directory); QString filterNames = "q*.h;Q*.h"; QFileInfoList list = dir.entryInfoList(filterNames.split(";"), QDir::AllDirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); foreach(QFileInfo fileInfo, list) { if ( fileInfo.isFile() ) // Header file { files << fileInfo.absoluteFilePath(); } else // Directory { files = filesList(fileInfo.absoluteFilePath(), files); } } return files; } // void InitCompletion::populateQtDatabase() { QString command = ctagsCmdPath + " -L "+QDir::tempPath()+"/qdevelopfilenames -f \"" + QDir::tempPath()+"/qttags" + "\" --language-force=c++ --fields=afiKmsSzn --c++-kinds=cdefgmnpstuvx"; QStringList files; foreach(QString incDir, m_qtInclude) { files += filesList(incDir, files); } QFile f(QDir::tempPath()+"/qdevelopfilenames"); if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) return; f.write( files.join("\n").toAscii() ); f.close(); QProcess ctags; if( ctags.execute(command) != 0 ) { emit showMessage( tr("Unable to launch %1").arg(command) ); return; } ctags.waitForFinished(-1); QFile file(QDir::tempPath()+"/qttags"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { emit showMessage( tr("Unable to open %1").arg(QDir::tempPath()+"/qttags") ); return; } QString read; read = file.readAll(); file.close(); file.remove(); f.remove(); QMap inheritsList; QMap map; foreach(QString s, read.split("\n", QString::SkipEmptyParts) ) { QString classname; Tag tag; if ( !s.isEmpty() && s.simplified().at(0) == '!' ) continue; s += '\t'; tag.name = s.section("\t", 0, 0).simplified(); QString ex_cmd = s.section("/^", -1, -1).section("$/", 0, 0).simplified(); tag.isStatic = ex_cmd.startsWith("static"); classname = s.section("class:", -1, -1).section("\t", 0, 0).simplified(); tag.access = s.section("access:", -1, -1).section("\t", 0, 0).simplified(); if ( !QString("public:private:protected").contains( tag.access ) ) tag.access = "public"; tag.longName = ex_cmd; tag.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); if ( classname.isEmpty() ) continue; tag.parameters = "(" + tag.longName.section("(", 1, 1).section(")", -2, -2) + ")"; tag.signature = ex_cmd; tag.isFunction = true; tag.signature = s.section("signature:", -1, -1).section("\t", 0, 0).simplified(); tag.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); tag.returned = ex_cmd; if ( tag.returned.startsWith("static ") ) tag.returned = tag.returned.section("static ", 1); if ( tag.returned.startsWith("inline ") ) tag.returned = tag.returned.section("inline ", 1); if ( tag.returned.startsWith("const ") ) tag.returned = tag.returned.section("const ", 1); if ( tag.returned.startsWith("QT3_SUPPORT ") ) tag.returned = tag.returned.section("QT3_SUPPORT ", 1); if ( tag.returned.startsWith("virtual ") ) tag.returned = tag.returned.section("virtual ", 1); tag.returned = tag.returned.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); QString inherits; if ( s.contains("inherits:") ) inherits = s.section("inherits:", -1, -1).section("\t", 0, 0).simplified(); if ( !inherits.isEmpty() ) { inheritsList[ classname ] = inherits; } if ( tag.kind != "prototype" && tag.kind != "function" && tag.kind != "member" ) continue; if ( tag.name=="Q_REQUIRED_RESULT" ) { if ( tag.longName.contains("(") ) { tag.name = tag.longName.remove("const ").section(" ", 1, 1).section("(", 0, 0); tag.kind = "function"; tag.parameters = tag.signature = "(" + tag.longName.section("(", 1, 1).section(")", -2, -2) + ")"; tag.access = "public"; tag.isFunction = true; } } if ( tag.name=="Q_REQUIRED_RESULT" || tag.name.at(0)=='&' || tag.name.at(0)=='*' ) continue; if( tag.name == classname || tag.name == "~"+classname ) continue; TagList list; list = map[classname]; bool alreadyInserted = false; foreach(Tag t, list) { if ( t.name == tag.name && t.parameters == tag.parameters ) { alreadyInserted = true; break; } } if ( !alreadyInserted ) { list << tag; map[classname] = list; } } // if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) //{ //return; //} //createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); query.exec("delete from tags"); QStringList keys = map.keys(); foreach(QString key, keys) { if ( m_stopRequired ) break; TagList tagList = map[key]; Expression exp; exp.className = key; writeToDB(exp, tagList, query); } writeInheritanceToDB(inheritsList, query); query.exec("END TRANSACTION;"); } // // void InitCompletion::writeInheritanceToDB(QMap inheritsList, QSqlQuery query) { QMapIterator it(inheritsList); while (it.hasNext()) { it.next(); foreach(QString parent, it.value().split(",", QString::SkipEmptyParts ) ) { QString queryString = "insert into inheritance values("; queryString = queryString + "'" + parent.replace("'", "$") + "', " + "'" + QString(it.key()).replace("'", "$") + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; return; } } } } // QStringList InitCompletion::inheritanceList( const QString classname, QStringList &list ) { /* Return a string list with inheritance classes for classname. Work with the classes browser. For the Qt classes, the inheritance is read in qdevelop.db. */ const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { if ( itemsList->at( i ).kind == "c" && itemsList->at( i ).name == classname && itemsList->at( i ).ex_cmd.contains(":") ) { QString ex_cmd = itemsList->at( i ).ex_cmd; ex_cmd = ex_cmd.left( ex_cmd.length()-3 ); ex_cmd = ex_cmd.section(":", 1); ex_cmd = ex_cmd.remove("public").remove("protected").remove("private").remove(" "); foreach(QString c, ex_cmd.split(",") ) { list << c; list = inheritanceList(c, list); } } } // QString queryString = QString() + "select * from inheritance where child='"+classname+"'"; QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { list << parent; list = inheritanceList(parent, list); } } return list; } // Expression InitCompletion::parseLine( QString text ) { Expression exp; Scope sc; int p = 0; QString simplified = simplifiedText( text ); int begin = simplified.length()-1; do { begin--; if( simplified[begin]=='(' ) p--; else if( simplified[begin]==')' ) p++; if( p > 0 && !(p == 1 && simplified[begin]==')') ) simplified[begin]=' '; if( QString(";{}=*/+~&|!^?:,<>").contains(simplified[begin]) ) break; else if( begin0); // QString word = simplified.mid(begin+1).simplified(); int posWord = 0; while( posWord0 && simplified[begin-1]=='-' && simplified[begin]=='>' ) && !(begin>0 && simplified[begin-1]==':' && simplified[begin]==':' ) ) begin++; QString varName = simplified.left(begin+1); QString line = simplified.mid(begin+1); exp = getExpression(varName, sc, m_showAllResults); QString className; if ( exp.access == ParseError ) { className = word; exp.access = AccessMembers; } else className = exp.className; //QD << varName << className; // while ( line.indexOf('.')!=-1 || line.indexOf(">")!=-1 || line.indexOf("::")!=-1 ) { QString function; int end = 9999; if( line.indexOf('.') != -1 ) end = qMin(end, line.indexOf('.')); if( line.indexOf('>') != -1 ) end = qMin(end, line.indexOf('>')); if( line.indexOf(':') != -1 ) end = qMin(end, line.indexOf(':')+1); function = line.left(end); line = line.mid(end+1); className = returned(className, function, exp); } exp.className = className; return exp; } // QString InitCompletion::returned(QString className, QString function, Expression &exp) { QStringList classes; classes << className; if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } classes = inheritanceList(className, classes); // function = function.section("(", 0, 0).simplified(); const QList *itemsList = m_treeClasses->treeClassesItems(); for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); Tag tag; tag.access = parsedItem.access; tag.name = parsedItem.name; tag.parameters = parsedItem.signature; tag.returned = parsedItem.ex_cmd.section(" ", 0, 0); if ( tag.returned.contains("<") ) tag.returned = tag.returned.section("<", 0, 0); if ( parsedItem.kind == "f" ) tag.kind = "function"; else if ( parsedItem.kind == "p" ) tag.kind = "prototype"; else if ( parsedItem.kind == "e" ) { if ( parsedItem.enumname.section(":", 0, 0) != className ) continue; parsedItem.classname = className; tag.parameters = ""; tag.kind = "member"; } else if ( parsedItem.kind == "m" ) { tag.kind = "member"; tag.parameters = ""; } else { continue; } // bool isStatic = parsedItem.ex_cmd.simplified().startsWith("static"); if ( !classes.contains( parsedItem.classname ) ) continue; if( classes.contains( parsedItem.classname ) && function == parsedItem.name ) { exp.access = AccessMembers; return tag.returned; } } // Continue the reading in qdevelop.db createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); query.exec("BEGIN TRANSACTION;"); QString queryString = QString() + "select * from inheritance where child='"+className+"'"; query.exec(queryString); while (query.next()) { QString parent = query.value(0).toString().replace("$", "'"); if ( !parent.isEmpty() ) { classes << parent; } } queryString = QString() + "select * from tags where class in ( "; foreach(QString c, classes) { queryString = queryString + " '" + c + "',"; } queryString = queryString.left( queryString.length()-1 ); queryString += " )"; // queryString += " and name = '" + function + "'"; query.exec(queryString); if (query.next()) { exp.access = AccessMembers; return query.value(7).toString().replace("$", "'"); } return QString(); } // QString InitCompletion::classForFunction(QString classname, QString function) { /* Return the name of the first class which contains the function. In a class Foo which inherits QDialog, if the help is called on the function foo->show(). We receive Foo as classname and show as function. We find the first class in inheritance list which contains really the function and return it. Here, it's QWidget. Thus Assistant can be called with the right parameters. */ if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) ) { return QString(); } QStringList list; list << classname; list = inheritanceList(classname, list); createTables(); QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" )); QStringList listcopy = list; listcopy.removeAll(classname); if (!listcopy.size()) { QString sql = "select count(*) from tags where class ='" + classname +"'"; if (!query.exec(sql) || !query.first() || query.value(0).toInt() == 0) { return QString(); } } foreach(QString name, list) { QString queryString = QString() + "select * from tags where class ='" + name + +"'"; queryString += " and name='" + function + "'"; // query.exec(queryString); while (query.next()) { return query.value(0).toString().replace("$", "'"); } } return classname; } qdevelop-v0.28/src/.svn/text-base/treeproject.h.svn-base0000444000175000017500000000525011362261066022212 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TREEPROJECT_H #define TREEPROJECT_H #include #include // class ProjectManager; // class TreeProject : public QTreeWidget { friend class Delegator; Q_OBJECT public: TreeProject(QWidget * parent = 0); ~TreeProject(); void setProjectManager( QPointer g ) { m_projectManager = g; }; bool showAsKrawek() { return krawekItemDelegate != 0; }; private: void setup(); protected: void mousePressEvent( QMouseEvent * event ); void dragEnterEvent(QDragEnterEvent *); void drawBranches ( QPainter * painter, const QRect & rect, const QModelIndex & index ) const; void resizeEvent ( QResizeEvent * event ); void keyPressEvent( QKeyEvent * event ); private: QPointer m_projectManager; QTreeWidgetItem *m_itemClicked; QAbstractItemDelegate *normalItemDelegate, *krawekItemDelegate; private slots: void slotAddNewItem(); void slotAddNewClass(); void slotAddExistingFiles(); void slotAddScope(); void slotRenameItem(); void slotDeleteItem(); void slotAddSubProject(); void slotProjectPropertie(); void slotlupdate(); void slotlrelease(); void slotOpen(); void slotSort(); void slotSubclassing(); void slotShowAsNormal(); void slotPreviewForm(); public slots: void slotShowAsKrawek(); signals: void addNewItem(QTreeWidgetItem *, QString); void addExistingsFiles(QTreeWidgetItem *); void addNewClass(QTreeWidgetItem *); void deleteItem(QTreeWidgetItem *); void renameItem(QTreeWidgetItem *); void addScope(QTreeWidgetItem *); void addSubProject(QTreeWidgetItem *); void projectPropertie(QTreeWidgetItem *); void open(QTreeWidgetItem *, int); void lupdate(QTreeWidgetItem *); void lrelease(QTreeWidgetItem *); void subclassing(QTreeWidgetItem *); void previewForm(QTreeWidgetItem *); void sort(); }; #endif qdevelop-v0.28/src/.svn/text-base/editor.h.svn-base0000444000175000017500000002137111362261066021154 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef EDITOR_H #define EDITOR_H #include "textEdit.h" #include "mainimpl.h" #include "ui_findwidget.h" #include "ui_replacewidget.h" #include #include #include #include #include #include #include // Q_DECLARE_METATYPE(Tag) // typedef struct { QStringList textFind; QStringList textReplace; bool caseSensitive; bool backwards; bool wholeWords; bool prompt; } ReplaceOptions; // typedef QMap classesMethodsList; // class QToolButton; class TabWidget; class QComboBox; class QTimer; class TextEditInterface; class QHBoxLayout; // class BlockUserData : public QTextBlockUserData { public: bool bookmark; bool breakpoint; QString breakpointCondition; bool isTrue; QString errorString; QString warningString; QTextBlock block; }; // class Editor : public QWidget { Q_OBJECT protected slots: //void closeEvent(QCloseEvent * event); public: void previousWarningError(); void nextWarningError(); void clearErrorsAndWarnings(); void setTextColor(QColor textColor); Editor(TabWidget *parent, MainImpl *mainimpl, InitCompletion *completion, QString name=""); ~Editor(); bool open(bool silentMode); bool save(); bool close(); void setFilename(QString name) { m_filename = name; m_textEdit->document()->setModified(true);}; QString filename() { return m_filename; }; QString shortFilename(); QString directory(); static QString shortFilename(QString nomLong); static QString suffixe(QString filename); void findContinue(); void findPrevious(); QStringList classes(); QStringList methodes(QString classe); QList breakpoints(); void toggleBookmark(int line); void clearAllBookmarks(); void deleteBreakpoint(int line); void setBackgroundColor( QColor c ){ m_textEdit->setBackgroundColor(c); }; void setCurrentLineColor( QColor c ){ m_textEdit->setCurrentLineColor(c); }; void setMatchingColor( QColor c ){ m_textEdit->setMatchingColor(c); }; void setShowWhiteSpaces( bool b ){ m_textEdit->setShowWhiteSpaces( b ); } void setRightMargin( int c ){ m_textEdit->setRightMarginColumn( c ); } void gotoMatchingBracket(){ m_textEdit->gotoMatchingBracket(); }; QString tempFilename(){ return m_textEdit->tempFilename(); }; void displayEditorToolbar( bool b ); int currentLineNumber(){ return m_textEdit->currentLineNumber(); }; int currentLineNumber(QTextBlock block){ return m_textEdit->currentLineNumber(block); }; void print(){ m_textEdit->print(); }; void toggleBreakpoint(int line, QString breakpointCondition, bool isTrue); void setExecutedLine(int line); void emitListBreakpoints(); void copy() { m_textEdit->copy(); }; void cut() { m_textEdit->cut(); }; void paste() { m_textEdit->paste(); }; void undo() { m_textEdit->document()->undo(); }; void redo() { m_textEdit->document()->redo(); }; void comment(TextEdit::ActionComment action) { m_textEdit->comment(action); }; void selectAll() { m_textEdit->selectAll(); }; void slotIndent() { m_textEdit->slotIndent(); }; void slotUnindent() { m_textEdit->slotUnindent(); }; void dialogGotoLine() { m_textEdit->dialogGotoLine(); }; void completeCode() { m_textEdit->completeCode(); }; void gotoImplementation() { m_textEdit->slotGotoImplementation(); }; void gotoDeclaration() { m_textEdit->slotGotoDeclaration(); }; QString wordUnderCursor() { return m_textEdit->wordUnderCursor(); }; QString firstWordUnderCursor() { return m_textEdit->firstWordUnderCursor(); }; void textPlugin(TextEditInterface *iTextEdit) { m_textEdit->textPlugin(iTextEdit); }; QString classNameUnderCursor() { return m_textEdit->classNameUnderCursor(); }; int verticalScrollBar() { return m_textEdit->verticalScrollBar()->value(); }; void setVerticalScrollBar(int s) { m_textEdit->verticalScrollBar()->setValue(s); }; void setAutobrackets(bool b) { m_textEdit->setAutobrackets(b); }; void setWordWrap( bool w ) { m_textEdit->setWordWrap(w); } // Divius: comments autoclose void setAutocomments(bool c) { m_textEdit->setAutocomments(c); }; // void setHideFindReplace(int delay) { m_hideFindReplace = delay; } void setMatch(bool b) { m_textEdit->setMatch(b); }; void saveAsTemp() { m_textEdit->saveAsTemp(); }; void setHighlightCurrentLine(bool b) { m_textEdit->setHighlightCurrentLine(b); }; bool isModified() { return m_textEdit->document()->isModified(); }; void setFocus(); void replace(); void setActiveEditor(bool b); void setIntervalUpdatingTreeClasses(int i) { m_intervalUpdatingClasses = i*1000;}; void setShowTreeClasses(bool s); void toggleBreakpoint() { toggleBreakpoint( m_textEdit->currentLineNumber(), QString(), true ); }; void toggleBookmark() { toggleBookmark( m_textEdit->currentLineNumber() ); }; QList bookmarksList(); QList breakpointsList(); bool inQuotations(int position, QString text); QString toPlainText() { return m_textEdit->toPlainText(); }; void insertText(QString text, int insertAfterLine) { m_textEdit->insertText(text, insertAfterLine); }; void setNameOtherFile(QString oldName, QString newName); void methodsList(); //void keyPress(QKeyEvent * event); // bool smartClick; inline QString getOtherFileToolTip() { return m_otherFileButton->toolTip(); } inline QString getOtherFileIcon() { return m_otherFileIcon; } inline bool hasOtherFile() { return !m_nameOtherFile.isEmpty(); } public slots: void slotEndBuild(); void gotoLine( int line, bool moveTop); void slotComboClasses(QString text=QString()); void slotModifiedEditor(bool modified); void setLineNumbers(bool activate) { m_textEdit->activateLineNumbers(activate); }; void setSelectionBorder(bool activate) { m_textEdit->setSelectionBorder(activate); }; void setFont(QFont fonte) { m_textEdit->setFont(fonte); }; void setEndLine(MainImpl::EndLine end) { m_textEdit->setEndLine(end); }; void setAutoIndent(bool activate) { m_textEdit->setAutoIndent(activate); }; void setSyntaxHighlight(bool activate); void setTabStopWidth(int size) { m_textEdit->setTabStopWidth(size) ; }; void setAutoCompletion(bool activate) { m_textEdit->setAutoCompletion(activate) ; }; void setTabSpaces(bool t) { m_textEdit->setTabSpaces(t) ; }; void setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g); void slotClassesMethodsList(); void slotOtherFile(); void find(); QString selection(); void slotMessagesBuild(QString list, QString directory); //void showMaximized(); private slots: void slotReplace(); //void slotMaximizeButtonClicked(); void slotComboMethods(int index); void slotFindWidget_textChanged(QString text="", bool fromButton=false); void slotFindPrevious(); void slotFindNext(); void slotTimerUpdateClasses(); void slotTimerCheckIfModifiedOutside(); private: TabWidget *m_parent; QPointer m_lineNumbers; QTextCursor m_previousCursor; classesMethodsList m_classesMethodsList; QString m_findExp; QTextDocument::FindFlags m_findOptions; QComboBox *m_comboClasses, *m_comboMethods; QToolButton *m_otherFileButton; QString m_otherFileIcon; //QToolButton *m_maximizedButton; QToolButton *m_refreshButton; QString m_nameOtherFile; MainImpl *m_mainimpl; QWidget *m_findWidget; QWidget *m_replaceWidget; TextEdit *m_textEdit; QString m_filename; Ui::FindWidget uiFind; Ui::ReplaceWidget uiReplace; QTimer *autoHideTimer; bool m_backward; ReplaceOptions m_replaceOptions; bool m_activeEditor; QTimer m_timerUpdateClasses; QTimer m_timerCheckLastModified; bool m_showTreeClasses; int m_intervalUpdatingClasses; quint16 m_checksum; InitCompletion *m_completion; QDateTime m_lastModified; QWidget *m_editorToolbar; int m_hideFindReplace; void checkBookmarks(); void updateOtherFile(QString currentFile); protected: signals: void editorModified(Editor *, bool); void refreshClasses(QString); void breakpoint(QString, unsigned int, BlockUserData *); void updateClasses(QString, QString); void otherFileChanged(void); }; #endif qdevelop-v0.28/src/.svn/text-base/parametersimpl.h.svn-base0000444000175000017500000000270511362261066022713 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PARAMETERSIMPL_H #define PARAMETERSIMPL_H // #include "ui_parameters.h" #include "projectmanager.h" // class ParametersImpl : public QDialog, public Ui::Param { Q_OBJECT public: ParametersImpl( QWidget * parent ); Parameters parameters(); void setParameters(Parameters p); private slots: void on_tableVariables_itemDoubleClicked(QTableWidgetItem* item); void on_edit_clicked(); void on_sort_clicked(); void on_defaults_clicked(); void on_chooseDirectory_clicked(); void on_add_clicked(); void on_del_clicked(); private: }; #endif qdevelop-v0.28/src/.svn/text-base/pluginsinterfaces.h.svn-base0000444000175000017500000000434411362261066023414 0ustar jlbrdjlbrd#ifndef __PLUGINSINTERFACES_H__ #define __PLUGINSINTERFACES_H__ class SimplePluginInterface { public: virtual ~SimplePluginInterface() {} virtual QString menuName() const = 0; virtual void start(QWidget * owner = 0) = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; class TextEditInterface { public: enum Action{ReplaceSelection, ReplaceAll, Append}; virtual ~TextEditInterface() {} virtual QString menuName() const = 0; virtual QString text(QString text, QString selectedText, QTextCodec *codec) = 0; virtual TextEditInterface::Action action() const = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; #include class VcsInterface { public: virtual ~VcsInterface() {} virtual QString name() const = 0; virtual void prepareRootTree(const QString & treeDir) const = 0; virtual QString info(const QString & item) = 0; virtual bool isVersioned(const QString & item) = 0; virtual QString currentCheckOutPath() const = 0; virtual QString conflicts() const = 0; virtual bool checkOut(const QString & path, const QString & destination) = 0; virtual bool mergeFrom(const QString & path, QString & output) = 0; virtual bool add(const QStringList & itemList) = 0; virtual bool mkdir(const QStringList & dirList) = 0; virtual bool removeFiles(const QStringList & itemList) = 0; virtual bool renameFile(const QString & oldName, const QString & newName) = 0; virtual QString status(const QStringList & itemList) = 0; virtual bool commit(const QStringList & itemList, const QString & message, QString & output) = 0; virtual bool update(const QStringList & itemList, QString & output) = 0; virtual QString log(const QString & itemName) = 0; virtual bool revert(const QStringList & itemList) = 0; virtual bool resolve(const QStringList & itemList) = 0; virtual bool hasConfigDialog() const = 0; virtual void config() = 0; }; Q_DECLARE_INTERFACE(SimplePluginInterface, "qdevelop.SimplePluginInterface/1.0") Q_DECLARE_INTERFACE(TextEditInterface, "qdevelop.TextEditInterface/1.0") Q_DECLARE_INTERFACE(VcsInterface, "qdevelop.VcsInterface/1.0") #endif // __PLUGINSINTERFACES_H__ qdevelop-v0.28/src/.svn/text-base/textEdit.cpp.svn-base0000444000175000017500000016355111362261066022022 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ // #include "textEdit.h" #include "editor.h" #include "linenumbers.h" #include "selectionborder.h" #include "cpphighlighter.h" #include "ui_gotoline.h" #include "pluginsinterfaces.h" #include "treeclasses.h" #include "InitCompletion.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); // static const char * tabPixmap_img[] = { /* width height ncolors cpp [x_hot y_hot] */ "8 8 3 2 0 0", /* colors */ " s none m none c none", "O s iconColor1 m black c black", "X s iconColor2 m black c #D0D0D0", /* pixels */ " X X ", " X X ", " X X ", " X X ", " X X ", " X X ", " X X ", " ", }; static const char * spacePixmap_img[] = { /* width height ncolors cpp [x_hot y_hot] */ "8 8 3 2 0 0", /* colors */ " s none m none c none", "O s iconColor1 m black c black", "X s iconColor2 m black c #D0D0D0", /* pixels */ " ", " ", " ", " ", " ", " X ", " X X ", " ", }; TextEdit::TextEdit(Editor * parent, MainImpl *mainimpl, InitCompletion *completion) : QTextEdit(parent), m_editor(parent), m_mainImpl(mainimpl), m_completion(completion), m_mouseHidden(false) { setObjectName( "editorZone" ); m_lineNumbers = 0; m_selectionBorder = 0; cpphighlighter = 0; m_autoindent = true; m_autobrackets = true; setAcceptRichText( false ); setLineWrapMode( QTextEdit::FixedPixelWidth ); setLineWrapColumnOrWidth( 65535 ); m_findOptions = 0; m_findExp = ""; m_findImpl = 0; m_match = true; m_highlightCurrentLine = true; m_matchingBegin = -1; m_matchingEnd = -1; m_endLine = MainImpl::Default; m_tabPixmap = QPixmap( tabPixmap_img ); m_spacePixmap = QPixmap( spacePixmap_img ); m_showWhiteSpaces = true; m_rightMarginColumn = 80; m_autocomments = false; connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(editorModified(bool))); connect( this, SIGNAL( cursorPositionChanged() ), this, SLOT( slotCursorPositionChanged())); connect(this, SIGNAL(initParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString)), m_completion, SLOT(slotInitParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString)) ); actionToggleBreakpoint = new QAction(this); actionToggleBreakpoint->setShortcut( Qt::Key_F9 ); connect(actionToggleBreakpoint, SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // m_completionList = new QListWidget(this); m_completionList->setSelectionMode( QAbstractItemView::SingleSelection ); m_completionList->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_completionList->hide(); m_completionList->setSortingEnabled( true ); #ifdef Q_WS_MAC m_completionList->setFont(QFont(m_completionList->font().family(), 12) ); #else m_completionList->setFont( QFont(m_completionList->font().family(), 8) ); #endif connect(m_completionList, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(slotWordCompletion(QListWidgetItem *)) ); setBackgroundColor( m_backgroundColor ); } // void TextEdit::setBackgroundColor( QColor c ) { if ( c == m_backgroundColor ) return; m_backgroundColor = c; QPalette pal = palette(); pal.setColor(QPalette::Base, m_backgroundColor); setPalette( pal ); viewport()->update(); } // void TextEdit::setCurrentLineColor( QColor c ) { if ( c == m_currentLineColor ) return; m_currentLineColor = c; viewport()->update(); } // void TextEdit::print() { QPrinter printer(QPrinter::HighResolution); printer.setFullPage(true); QPrintDialog dlg(&printer, this); if (dlg.exec() == QDialog::Accepted) { document()->print(&printer); } } void TextEdit::printWhiteSpacesAndMatching( QPainter &p ) { const int contentsY = verticalScrollBar()->value(); const qreal pageBottom = contentsY + viewport()->height(); const QFontMetrics fm = QFontMetrics( currentFont() ); for ( QTextBlock block = document()->begin(); block.isValid(); block = block.next() ) { QTextLayout* layout = block.layout(); const QRectF boundingRect = layout->boundingRect(); QPointF position = layout->position(); if ( position.y() +boundingRect.height() < contentsY ) continue; if ( position.y() > pageBottom ) break; const QString txt = block.text(); const int len = txt.length(); for ( int i=0; ibuildQtDatabase() ) { QMessageBox::warning(m_mainImpl, "QDevelop", tr("The Qt database building is in progress.\nTry to complete code later.")); return; } if ( !m_completion ) return; QString c = m_plainText.left(textCursor().position()); if( c.simplified().right(1) == "(" ) { completionHelp(); return; } bool addThis = true; QString word; int i; for(i = c.length()-1; i>0; i--) { if( c.at(i) == QChar('\n') || c.at(i) == QChar(';') ) { i++; word = c.mid( i ); c = c.left( i ); break; } if( QString(":.>(").contains( c.at(i) ) ) { addThis = false; break; } } if( addThis ) { c += "this->" + word; } emit initParse(InitCompletion::Completion, m_editor->filename(), c, true, true, false, QString()); } void TextEdit::slotCompletionList(TagList tagList ) { if ( tagList.count() ) { int w = 0; int h = 0; m_completionList->clear(); foreach(Tag tag, tagList) { w = qMax(w, fontMetrics().width( tag.name+tag.parameters )); QListWidgetItem *item = new QListWidgetItem( m_completionList ); item->setText(tag.name+tag.parameters ); h += 15; QVariant v; v.setValue( tag ); item->setData(Qt::UserRole, v ); //item->setData(Qt::UserRole, QVariant(tag.name) ); if( tag.access.isEmpty() ) tag.access = "public"; if ( tag.kind == "function" || tag.kind == "prototype") item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_meth.png")); else if ( tag.kind == "member" ) item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_var.png")); else if ( tag.kind == "struct" ) item->setIcon(QIcon(":/CV/images/CVstruct.png")); else if ( tag.kind == "class" ) item->setIcon(QIcon(":/CV/images/CVclass.png")); m_completionList->addItem(item); //m_completionList->addItem( tag.name ); } m_completionList->setSelectionMode( QAbstractItemView::SingleSelection ); QPalette palette; palette.setBrush(QPalette::Active, QPalette::Base, m_backgroundColor); m_completionList->setPalette(palette); w = qMin(w+20, 550); w = qMax(w, 150); int posX = qMax(cursorRect().x(), 80); //if ( posX+w > width() ) //posX = width()-220; if ( cursorRect().y() > viewport()->height()/2 ) { h = qMin( qMin(h+20, cursorRect().y()), 500); m_completionList->setGeometry(posX, cursorRect().y()-h, w, h); } else { h = qMin( qMin(h+20, viewport()->height()-22-cursorRect().y()), 500); m_completionList->setGeometry(posX, cursorRect().y()+fontMetrics().height(), w, h); } m_completionList->show(); m_completionList->setCurrentRow( 0 ); // QString s = wordUnderCursor(); QList listeItems = m_completionList->findItems(s, Qt::MatchExactly); listeItems = m_completionList->findItems(s, Qt::MatchStartsWith); if ( listeItems.count()>1 ) m_completionList->setCurrentItem( listeItems.first() ); // } else m_completionList->hide(); } // void TextEdit::slotCompletionHelpList(TagList tagList) { if ( tagList.count() ) { int w = 0; int h = 0; m_completionList->clear(); foreach(Tag tag, tagList) { w = qMax(w, fontMetrics().width( tag.name+tag.parameters )); QListWidgetItem *item = new QListWidgetItem( m_completionList ); item->setText( tag.name+tag.parameters ); h += 15; if( tag.access.isEmpty() ) tag.access = "public"; if ( tag.kind == "function" || tag.kind == "prototype") item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_meth.png")); else if ( tag.kind == "member" ) item->setIcon(QIcon(":/CV/images/CV"+tag.access+"_var.png")); m_completionList->addItem( item ); } m_completionList->setSelectionMode( QAbstractItemView::NoSelection ); QPalette palette; palette.setBrush(QPalette::Active, QPalette::Base, m_backgroundColor); m_completionList->setPalette(palette); w = qMin(w+20, 550); w = qMax(w, 150); int posX = qMax(cursorRect().x(), 80); if ( posX+w > width() ) posX = width()-220; if ( cursorRect().y() > viewport()->height()/2 ) { h = qMin( qMin(h+20, cursorRect().y()), 250); m_completionList->setGeometry(posX, cursorRect().y()-h, w, h); } else { h = qMin( qMin(h+20, viewport()->height()-22-cursorRect().y()), 250); m_completionList->setGeometry(posX, cursorRect().y()+fontMetrics().height(), w, h); } m_completionList->show(); // } else m_completionList->hide(); } // void TextEdit::setFocus(Qt::FocusReason reason) { m_completionList->hide(); QTextEdit::setFocus(reason); } // void TextEdit::mousePressEvent ( QMouseEvent * event ) { m_completionList->hide(); QTextEdit::mousePressEvent ( event ); if (m_editor->smartClick) { if (event->modifiers() == Qt::ControlModifier) { slotGotoImplementation(); } else if (event->modifiers() == Qt::MetaModifier) { slotGotoDeclaration(); } } } // TextEdit::~TextEdit() { delete lineNumbers(); } // void TextEdit::setTabStopWidth(int taille) { bool m = document()->isModified(); int posScrollbar = verticalScrollBar()->value(); QTextEdit::setTabStopWidth(fontMetrics().width( " " ) * taille); setPlainText( toPlainText() ); verticalScrollBar()->setValue( posScrollbar ); document()->setModified( m ); } // bool TextEdit::open(bool silentMode, QString filename, QDateTime &lastModified) { if ( cpphighlighter && !QString(":c:cc:cpp:h:hpp:").contains( ":"+filename.section(".", -1, -1).toLower()+":" ) ) { delete cpphighlighter; cpphighlighter = 0; } QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { if ( !silentMode ) QMessageBox::critical(0, "QDevelop", tr("The file \"%1\" could not be loaded.").arg(filename),tr("Cancel") ); return false; } QByteArray data = file.readAll(); QTextStream in(&data); QApplication::setOverrideCursor(Qt::WaitCursor); int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); in.setAutoDetectUnicode(false); in.setCodec(codec); QString decodedStr = in.readAll(); setPlainText(decodedStr); lastModified = QFileInfo( file ).lastModified(); file.close(); if ( m_lineNumbers ) m_lineNumbers->setDigitNumbers( QString::number(linesCount()).length() ); if ( m_completion && !m_mainImpl->buildQtDatabase() ) { emit initParse(InitCompletion::Completion, m_editor->filename(), toPlainText(), true, false, false, QString()); } QApplication::restoreOverrideCursor(); return true; } // void TextEdit::activateLineNumbers(bool activate) { if ( activate && m_lineNumbers==0 ) setLineNumbers( new LineNumbers(this, m_editor) ); else if ( !activate && m_lineNumbers ) setLineNumbers( 0 ); } // void TextEdit::setSelectionBorder(bool activate) { if ( activate && m_selectionBorder==0 ) setSelectionBorder( new SelectionBorder(this) ); else if ( !activate && m_selectionBorder ) setSelectionBorder( (SelectionBorder*)0 ); } // void TextEdit::autobrackets() { textCursor().insertText( "\n" ); autoIndent(); textCursor().insertText( "\n" ); textCursor().insertText( "}" ); autoUnindent(); setTextCursor( getLineCursor(currentLineNumber()-1) ); QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::EndOfLine ); setTextCursor( cursor ); } // Divius: comments autoclose void TextEdit::autocomments(bool start) { if (start) { textCursor().insertText( " * \n */" ); setTextCursor( getLineCursor(currentLineNumber()-1) ); QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::EndOfLine ); setTextCursor( cursor ); } else { textCursor().insertText( "* " ); } } // void TextEdit::autoIndent() { QTextBlock blocAIndenter; QTextBlock b = textCursor().block(); if ( b.previous().isValid() && !b.previous().text().isEmpty() ) blocAIndenter = b; else return; QTextBlock blocAvant = blocAIndenter.previous(); if ( !blocAvant.isValid() ) return; QString simple = blocAvant.text().simplified(); QString blancs; for (int i=0; i< blocAvant.text().length(); i++) { if ( blocAvant.text().at(i) == ' ' || blocAvant.text().at(i) == '\t' ) { QString s = blocAvant.text().at(i); if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); QString spaces; for (int i = 0; ifindBlock(startPos); QTextBlock endBlock = document()->findBlock(endPos); //special case : the end of the selection is at the beginning of a line if ( startPos != endPos && cursor.atBlockStart()) { endBlock = document()->findBlock(endPos).previous(); } int firstLine = lineNumber( startBlock ); int lastLine = lineNumber( endBlock ); QTextBlock block = startBlock; cursor.beginEditBlock(); cursor.setPosition(startPos); while (!(endBlock < block)) { QString text = block.text(); if (!text.isEmpty()) { int i = 0; while (i < text.length() && (text.at(i).isSpace())) i++; if (action == Comment) { if (text.mid(i, 2) != "//") text.insert(i, "//"); } else if (action == Uncomment) { if (text.mid(i, 2) == "//") text.remove(i, 2); } else if (action == Toggle) { if (text.mid(i, 2) == "//") text.remove(i, 2); else text.insert(i, "//"); } cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); cursor.select(QTextCursor::BlockUnderCursor); qWarning() << cursor.selectedText(); cursor.removeSelectedText(); text.prepend("\n"); cursor.insertText(text); } if( !cursor.movePosition(QTextCursor::NextBlock) ) { break; } block = cursor.block(); } cursor.endEditBlock(); // Reselect blocks selectLines(firstLine, lastLine); } // void TextEdit::autoUnindent() { QTextBlock b = textCursor().block(); if ( !b.previous().isValid() || b.previous().text().isEmpty() ) return; QString caractere = b.text().simplified(); if ( caractere!="{" && caractere!="}" ) return; QTextBlock blocAvant = b.previous(); if ( !blocAvant.isValid() ) return; QString blancs; for (int i=0; i< blocAvant.text().length(); i++) { if ( blocAvant.text().at(i) == ' ' || blocAvant.text().at(i) == '\t' ) blancs += blocAvant.text().at(i); else break; } if ( blancs.length() && caractere=="}" && blocAvant.text().simplified()!="{") { if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); for (int i = 0; idocument() ); else if ( !activate && cpphighlighter ) { delete cpphighlighter; cpphighlighter = 0; } } // void TextEdit::setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g) { if (!cpphighlighter) return; cpphighlighter->setPreprocessorFormat( a ); cpphighlighter->setClassFormat( b ); cpphighlighter->setSingleLineCommentFormat( c ); cpphighlighter->setMultiLineCommentFormat( d ); cpphighlighter->setQuotationFormat( e ); cpphighlighter->setFunctionFormat( f ); cpphighlighter->setKeywordFormat( g ); cpphighlighter->setDocument( document() ); } bool TextEdit::close(QString filename) { if ( document()->isModified() ) { // Proposer sauvegarde int rep = QMessageBox::question(this, "QDevelop", tr("Save \"%1\"").arg(filename), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return false; if ( rep == 0 ) { QDateTime info; return save(filename, info); } } return true; } // bool TextEdit::save(QString filename, QDateTime &lastModified) { if ( !document()->isModified() ) return true; QFile file( filename ); if (!file.open(QIODevice::WriteOnly)) { QMessageBox::about(0, "QDevelop",tr("Unable to save %1").arg(filename)); return false; } QApplication::setOverrideCursor(Qt::WaitCursor); QString s = toPlainText(); if ( m_endLine != MainImpl::Default ) { s.replace("\r\n", "\n"); if ( m_endLine == MainImpl::Windows ) s.replace("\n", "\r\n"); } int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); QTextStream out(&file); out.setCodec(codec); out << s; file.close(); QFile last( filename ); lastModified = QFileInfo( last ).lastModified(); QApplication::restoreOverrideCursor(); document()->setModified( false ); return true; } // void TextEdit::setMouseHidden( bool hidden ) { if ( hidden == m_mouseHidden ) return; viewport()->setCursor( hidden ? Qt::BlankCursor : Qt::IBeamCursor ); setMouseTracking( hidden ); m_mouseHidden = hidden; } // void TextEdit::resizeEvent( QResizeEvent* e ) { QTextEdit::resizeEvent( e ); QRect margeNumerotationGeometry; if ( m_lineNumbers ) { margeNumerotationGeometry = QRect( viewport()->geometry().topLeft(), QSize( m_lineNumbers->width(), viewport()->height() ) ); margeNumerotationGeometry.moveLeft( margeNumerotationGeometry.left() -m_lineNumbers->width() ); if ( m_selectionBorder ) margeNumerotationGeometry.moveLeft( margeNumerotationGeometry.left() -m_selectionBorder->width() ); if ( m_lineNumbers->geometry() != margeNumerotationGeometry ) m_lineNumbers->setGeometry( margeNumerotationGeometry ); } else { margeNumerotationGeometry.setTopRight( viewport()->geometry().topLeft() ); } QRect margeSelectionGeometry; if ( m_selectionBorder ) { margeSelectionGeometry = QRect( margeNumerotationGeometry.topRight(), QSize( m_selectionBorder->width(), viewport()->height() ) ); if ( m_lineNumbers ) margeSelectionGeometry.moveLeft( m_lineNumbers->width() ); else margeSelectionGeometry.moveLeft( margeSelectionGeometry.left() -m_selectionBorder->width() ); if ( m_selectionBorder->geometry() != margeSelectionGeometry ) m_selectionBorder->setGeometry( margeSelectionGeometry ); } } QTextCursor TextEdit::getLineCursor( int line ) const { int count = 1; for ( QTextBlock b = document()->begin(); b.isValid(); b = b.next(), count++ ) { if ( count == line ) { return QTextCursor( b ); break; } } QTextCursor c = textCursor(); c.movePosition( QTextCursor::End ); c.movePosition( QTextCursor::StartOfLine ); return c; } // void TextEdit::dialogGotoLine() { QDialog *dial = new QDialog; Ui::GotoLine ui; ui.setupUi(dial); ui.horizontalSlider->setMaximum( linesCount()-1 ); ui.horizontalSlider->setPageStep( (linesCount()-1)/10 ); ui.spinBox->setMaximum( linesCount()-1 ); ui.spinBox->setValue( currentLineNumber() ); ui.spinBox->selectAll(); ui.spinBox->setFocus(); if ( dial->exec() == QDialog::Accepted ) gotoLine( ui.spinBox->value(), true ); delete dial; } // void TextEdit::gotoLine( int line, bool moveTop ) { if ( moveTop ) setTextCursor( getLineCursor( linesCount() ) ); setTextCursor( getLineCursor( line ) ); setFocus( Qt::OtherFocusReason ); // ensureCursorVisible(); if ( moveTop ) { QTextCursor cursor = textCursor(); if ( cursor.isNull() ) return; QTextCursor c = textCursor(); bool mouvementReussi; do { mouvementReussi = c.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, 1 ); setTextCursor( c ); ensureCursorVisible(); } while (mouvementReussi && cursorRect(cursor).y() > 25 ); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor, 1 ); setTextCursor( cursor ); } } // void TextEdit::setLineNumbers( LineNumbers* g ) { if ( g == m_lineNumbers ) return; if ( m_lineNumbers ) delete m_lineNumbers; m_lineNumbers = g; connect( m_mainImpl, SIGNAL( resetExecutedLine() ), m_lineNumbers, SLOT( slotResetExecutedLine() ) ); connect(m_lineNumbers, SIGNAL( digitNumbersChanged() ), this, SLOT( slotAdjustSize() ) ); int margeGaucheSelection = 0; if ( m_selectionBorder ) margeGaucheSelection = m_selectionBorder->width(); if ( m_lineNumbers ) { setViewportMargins( m_lineNumbers->width()+margeGaucheSelection, 0, 0, 0 ); if ( !m_lineNumbers->isVisible() ) m_lineNumbers->show(); } else setViewportMargins( margeGaucheSelection, 0, 0, 0 ); } // void TextEdit::slotAdjustSize() { int margeGaucheSelection = 0; int margeGaucheMargeNumerotation = 0; if ( m_selectionBorder ) margeGaucheSelection = m_selectionBorder->width(); if ( m_lineNumbers ) margeGaucheMargeNumerotation = m_lineNumbers->width(); setViewportMargins( margeGaucheMargeNumerotation+margeGaucheSelection, 0, 0, 0 ); } // LineNumbers* TextEdit::lineNumbers() { return m_lineNumbers; } // void TextEdit::setSelectionBorder( SelectionBorder* m ) { if ( m == m_selectionBorder ) return; if ( m_selectionBorder ) delete m_selectionBorder; m_selectionBorder = m; int margeGaucheMargeNumerotation = 0; if ( m_lineNumbers ) margeGaucheMargeNumerotation = m_lineNumbers->width(); if ( m_selectionBorder ) { setViewportMargins( m_selectionBorder->width()+margeGaucheMargeNumerotation, 0, 0, 0 ); if ( !m_selectionBorder->isVisible() ) m_selectionBorder->show(); } else { setViewportMargins( margeGaucheMargeNumerotation, 0, 0, 0); } } // SelectionBorder* TextEdit::selectionBorder() { return m_selectionBorder; } // void TextEdit::findText() { m_editor->find(); } // void TextEdit::gotoMatchingBracket() { int pos; QTextCursor cursor = textCursor(); if ( cursor.position() == m_matchingBegin ) pos = m_matchingEnd; else pos = m_matchingBegin; if ( pos != -1 ) { cursor.setPosition(pos, QTextCursor::MoveAnchor); setTextCursor( cursor ); } } // void TextEdit::slotFind(Ui::FindWidget uiFind, Ui::ReplaceWidget uiReplace, QString ttf,QTextDocument::FindFlags options, bool fromButton) { QTextDocument *doc = document(); QString oldText = uiFind.editFind->text(); QTextCursor c = textCursor(); QPalette p = uiFind.editFind->palette(); p.setColor(QPalette::Active, QPalette::Base, Qt::white); if (c.hasSelection()) { if ( options & QTextDocument::FindBackward || fromButton) c.setPosition(c.position(), QTextCursor::MoveAnchor); else c.setPosition(c.anchor(), QTextCursor::MoveAnchor); } QTextCursor newCursor = c; if (!ttf.isEmpty()) { newCursor = doc->find(ttf, c, options); uiFind.labelWrapped->hide(); uiReplace.labelWrapped->hide(); if (newCursor.isNull()) { QTextCursor ac(doc); ac.movePosition(options & QTextDocument::FindBackward ? QTextCursor::End : QTextCursor::Start); newCursor = doc->find(ttf, ac, options); if (newCursor.isNull()) { p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102)); newCursor = c; } else { uiFind.labelWrapped->show(); uiReplace.reached->setText(tr("Reached end of page, continued from top")); uiReplace.labelWrapped->show(); } } } setTextCursor(newCursor); uiFind.editFind->setPalette(p); } // void TextEdit::paintEvent ( QPaintEvent * event ) { QPainter painter( viewport() ); if ( m_highlightCurrentLine && m_currentLineColor.isValid() ) { QRect r = cursorRect(); r.setX( 0 ); r.setWidth( viewport()->width() ); painter.fillRect( r, QBrush( m_currentLineColor ) ); } if (m_showWhiteSpaces || m_matchingBegin != -1) printWhiteSpacesAndMatching( painter ); if (m_rightMarginColumn > 0) { int x = m_rightMarginColumn * painter.fontMetrics().maxWidth() - horizontalScrollBar()->value(); QLine l = QLine( x, 0, x, viewport()->height() ); painter.setPen( Qt::black ); painter.drawLine( l ); } painter.end(); QTextEdit::paintEvent( event ); } // void TextEdit::mouseMoveEvent( QMouseEvent * event ) { setMouseHidden( false ); event->setAccepted( false ); QTextEdit::mouseMoveEvent( event ); } // void TextEdit::slotCursorPositionChanged() { if ( m_currentLineColor.isValid() ) viewport()->update(); m_plainText = toPlainText(); if ( m_match ) { clearMatch(); match(); } } // void TextEdit::clearMatch() { m_matchingBegin = -1; m_matchingEnd = -1; } // void TextEdit::match() { QString matchText = simplifiedText( m_plainText ); QTextCursor cursor = textCursor(); int pos = cursor.position(); m_matchingBegin = -1; m_matchingEnd = -1; if( pos==-1 || pos >= m_plainText.size() || !QString("({[]})").contains( m_plainText.at( pos ) ) ) return; QChar car; if ( pos != -1 ) { if ( !cursor.atEnd() ) { car = matchText.at( pos ); } else { car = matchText.at( pos - 1); } } QChar matchCar; long inc = 1; if( car == '(' ) matchCar = ')'; else if( car == '{' ) matchCar = '}'; else if( car == '[' ) matchCar = ']'; else if( car == ')' ) { matchCar = '('; inc = -1; } else if( car == '}' ) { matchCar = '{'; inc = -1; } else if( car == ']' ) { matchCar = '['; inc = -1; } else { return; } m_matchingBegin = pos; int nb = 0; do { if( matchText.at( pos ) == car ) nb++; else if( matchText.at( pos ) == matchCar ) { nb--; if( nb == 0 ) { m_matchingEnd = pos; break; } } pos += inc; } while( pos >= 0 && pos < matchText.length() ); if( m_matchingBegin > m_matchingEnd ) qSwap(m_matchingBegin, m_matchingEnd ); return; } // void TextEdit::slotWordCompletion(QListWidgetItem *item) { m_completionList->hide(); if ( m_completionList->selectionMode() == QAbstractItemView::NoSelection ) { ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return; } QString signature = item->text(); Tag tag = item->data(Qt::UserRole).value(); QString text = tag.name; wordUnderCursor(QPoint(), true); textCursor().insertText( text ); if ( m_completion && tag.signature.contains("(") && !tag.signature.contains("()") ) { completionHelp(); } if ( tag.signature.contains("(") && m_plainText.at( textCursor().position() ) != '(' ) { textCursor().insertText( "()" ); if ( !tag.signature.contains("()") ) { QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::PreviousCharacter); setTextCursor( cursor ); } } ensureCursorVisible(); setFocus( Qt::OtherFocusReason ); return; } // void TextEdit::keyPressEvent ( QKeyEvent * event ) { //m_editor->keyPress( event ); QTextCursor cursor = textCursor(); clearMatch(); setMouseHidden( true ); if ( event->key() == Qt::Key_Tab ) { slotIndent( !(event->modifiers() == Qt::ControlModifier) ); } else if ( m_completionList->isVisible() ) { if (event->key() == Qt::Key_Backspace && (m_plainText.left(textCursor().position()).right(1) == "." || m_plainText.left(textCursor().position()).right(1) == ">" || m_plainText.left(textCursor().position()).right(1) == ":")) { m_completionList->hide(); } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Up ) { int row = m_completionList->currentRow(); if ( row > 0 ) m_completionList->setCurrentRow( row-1 ); } else if ( event->key() == Qt::Key_Down ) { int row = m_completionList->currentRow(); if ( row+1 < m_completionList->count() ) m_completionList->setCurrentRow( row+1 ); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) slotWordCompletion( m_completionList->currentItem() ); else if ( QChar(event->key()).category() == QChar::Other_Control && event->key() != Qt::Key_Backspace ) { m_completionList->hide(); QTextEdit::keyPressEvent ( event ); } else { QTextEdit::keyPressEvent ( event ); QString s = wordUnderCursor(); QList listeItems = m_completionList->findItems(s, Qt::MatchExactly); if ( listeItems.count()==1 ) { m_completionList->hide(); } else { listeItems = m_completionList->findItems(s, Qt::MatchStartsWith); if ( listeItems.count() ) m_completionList->setCurrentItem( listeItems.first() ); } } } else if ( m_autoCompletion && ( event->key() == '.' || ( event->key() == '>' && m_plainText.left(textCursor().position()).right(1) == "-" ) || ( event->key() == ':' && m_plainText.left(textCursor().position()).right(1) == ":" ) ) ) { QTextEdit::keyPressEvent ( event ); completeCode(); } else if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter ) { if ( m_autoindent ) { QTextEdit::keyPressEvent ( event ); autoIndent(); } else { QTextEdit::keyPressEvent ( event ); } // Divius: comments autoclose if (m_autocomments) { QTextBlock commentBlock = getLineCursor(currentLineNumber()-1).block(); QString prevLine = commentBlock.text(); if (prevLine.endsWith("/*") || prevLine.endsWith("/**") || prevLine.endsWith("/*!")) { autocomments(true); } else if (prevLine.simplified().startsWith("*") && !prevLine.simplified().startsWith("*/")) while (commentBlock.isValid()) { prevLine = commentBlock.text(); if (prevLine.simplified().startsWith("/*")) { autocomments(false); break; } else if (prevLine.simplified().startsWith("*") && !prevLine.simplified().startsWith("*/")) { commentBlock = commentBlock.previous(); } else { break; } } } // } else if ( event->key() == Qt::Key_Home && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_home( event->modifiers() == Qt::ShiftModifier ); } else if ( event->key() == Qt::Key_End && ( !event->modifiers() || event->modifiers() == Qt::ShiftModifier ) ) { key_end( event->modifiers() == Qt::ShiftModifier ); } else if ( m_autoindent && event->key() == '{' || event->key() == '}' ) { QTextEdit::keyPressEvent ( event ); autoUnindent(); if ( m_autobrackets && event->key() == '{' ) autobrackets(); } else if ( event->key() == '(' && m_completion ) { QTextEdit::keyPressEvent ( event ); completionHelp(); } else if ( event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace ) { QTextEdit::keyPressEvent ( event ); } else if ((event->key() == Qt::Key_Down) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepAdd ); event->accept(); } else if ((event->key() == Qt::Key_Up) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))) { verticalScrollBar()->triggerAction( QAbstractSlider::SliderSingleStepSub ); event->accept(); } else { QTextEdit::keyPressEvent ( event ); } event->accept(); } // void TextEdit::key_home(bool shift) { QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int firstWord = 0, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::StartOfLine, moveMode ); while ( s.at(firstWord) == ' ' || s.at(firstWord) == '\t' ) { // while determining the first word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later ++firstWord; cursor.movePosition( QTextCursor::NextCharacter, moveMode ); } if (oldPos <= firstWord && oldPos > 0) // if the cursor was in front of the first word, move it to the beginning. However, if it was at the beginning of the line, let it where it is (first character) cursor.movePosition( QTextCursor::StartOfLine, moveMode ); setTextCursor( cursor ); } // void TextEdit::key_end(bool shift) { QTextCursor cursor = textCursor(); QTextBlock b = cursor.block(); QString s = b.text(); QTextCursor::MoveMode moveMode = (shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); int lastWord, endOfLine, oldPos = cursor.columnNumber(); // save the old position, it's used later cursor.movePosition( QTextCursor::EndOfLine, moveMode ); lastWord = endOfLine = cursor.columnNumber()-1; while ( s.at(lastWord) == ' ' || s.at(lastWord) == '\t' ) { // while determining the last word, move the cursor to the right - if we encounter that it already was in front of the first word, it'll be moved back later --lastWord; cursor.movePosition( QTextCursor::PreviousCharacter, moveMode ); } if (oldPos >= lastWord && oldPos < endOfLine) // if the cursor was after the last word, move it to the end. However, if it was at the end of the line, let it where it is (last character) cursor.movePosition( QTextCursor::EndOfLine, moveMode ); setTextCursor( cursor ); } // void TextEdit::textPlugin(TextEditInterface *iTextEdit) { QApplication::setOverrideCursor(Qt::WaitCursor); QTextCursor cursor = textCursor(); int mib = m_mainImpl->mibCodec(); QTextCodec *codec = QTextCodec::codecForMib(mib); QString s = iTextEdit->text(m_plainText, cursor.selection().toPlainText(), codec); if (s.isEmpty()) { QApplication::restoreOverrideCursor(); return; } if ( iTextEdit->action() == TextEditInterface::ReplaceAll ) { int posScrollbar = verticalScrollBar()->value(); int line = currentLineNumber(); setPlainText( s ); document()->setModified( true ); gotoLine(line, false); verticalScrollBar()->setValue( posScrollbar ); } else { cursor.insertText( s ); setTextCursor( cursor ); } QApplication::restoreOverrideCursor(); } // void TextEdit::dropEvent( QDropEvent * event ) { int posScrollbar = verticalScrollBar()->value(); QString text; if ( event->mimeData()->hasText() ) { QTextCursor save = textCursor(); setTextCursor( cursorForPosition( QPoint( event->pos().x(), event->pos().y() ) ) ); text = event->mimeData()->text(); int linesAdded = 0; if ( text.length() ) linesAdded = text.count( QChar('\n') ); setTextCursor( save ); } QTextEdit::dropEvent( event ); if ( event->dropAction() == Qt::CopyAction ) { QTextCursor cursor = textCursor(); int pos = textCursor().position(); cursor.setPosition(pos-text.length(), QTextCursor::MoveAnchor); cursor.setPosition(pos, QTextCursor::KeepAnchor); setTextCursor( cursor ); } verticalScrollBar()->setValue( posScrollbar ); } // void TextEdit::slotIndent(bool indenter) { setMouseHidden( true ); //string used to indent text QString indentString; if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); indentString.fill(' ', nbSpaces); } else { indentString = QString("\t"); } QTextCursor curseurActuel = textCursor(); QTextCursor c = textCursor(); c.beginEditBlock(); if ( !c.hasSelection() ) { if(indenter) { c.insertText( indentString ); } else { //delete the previous character if it's a space or a tab int p = textCursor().position() - 1; if( p>0 && p< m_plainText.length() ) { QChar s = m_plainText.at( p ); if ( s == '\t' || s == ' ') { c.deletePreviousChar(); } } } c.endEditBlock(); return; } int debut = c.selectionStart(); int fin = c.selectionEnd(); // QTextBlock blocDebut = document()->findBlock(debut); QTextBlock blocFin = document()->findBlock(fin); //special case if ( c.atBlockStart()) { blocFin = document()->findBlock(fin).previous(); } c.clearSelection(); if ( blocDebut == blocFin ) { curseurActuel.insertText( indentString ); setTextCursor( curseurActuel ); c.endEditBlock(); return; } QTextBlock block = blocDebut; while ( block.isValid() && !(blocFin < block) ) { c.setPosition(block.position(), QTextCursor::MoveAnchor); if ( !indenter ) { if ( block.text().count() && (block.text().at(0) == '\t' || block.text().at(0) == ' ') ) c.deleteChar(); } else { c.insertText( indentString ); } setTextCursor( c ); block = block.next(); } int ligneDebut = lineNumber(blocDebut); int ligneFin = lineNumber(blocFin); selectLines(ligneDebut, ligneFin); c.endEditBlock(); } // void TextEdit::slotUnindent() { slotIndent(false); } // void TextEdit::mouseDoubleClickEvent( QMouseEvent * event ) { #if 0 mousePosition = event->pos(); QTextCursor cursor = textCursor(); int pos = cursor.position(); while ( pos>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( pos-1 ).toUpper() ) ) pos--; cursor.setPosition(pos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( pos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( pos ).toUpper() ) ) pos++; cursor.setPosition(pos, QTextCursor::KeepAnchor); setTextCursor( cursor ); #endif QTextEdit::mouseDoubleClickEvent(event); } // void TextEdit::setExecutedLine(int line) { if ( m_lineNumbers) { m_lineNumbers->setExecutedLine(line); } } // void TextEdit::contextMenuEvent(QContextMenuEvent * e) { mousePosition = e->pos(); m_lineNumber = lineNumber( e->pos() ); QMenu *menu = createStandardContextMenu(); menu->clear(); connect(menu->addAction(QIcon(":/treeview/images/cpp.png"), tr("Goto Implementation")), SIGNAL(triggered()), this, SLOT(slotGotoImplementation()) ); connect(menu->addAction(QIcon(":/treeview/images/h.png"), tr("Goto Declaration")), SIGNAL(triggered()), this, SLOT(slotGotoDeclaration()) ); // connect(menu->addAction(QIcon(":/toolbar/images/undo.png"), tr("Undo")), SIGNAL(triggered()), this, SLOT(undo()) ); // connect(menu->addAction(QIcon(":/toolbar/images/redo.png"), tr("Redo")), SIGNAL(triggered()), this, SLOT(redo()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/editcut.png"), tr("Cut")), SIGNAL(triggered()), this, SLOT(cut()) ); connect(menu->addAction(QIcon(":/toolbar/images/editcopy.png"), tr("Copy")), SIGNAL(triggered()), this, SLOT(copy()) ); connect(menu->addAction(QIcon(":/toolbar/images/editpaste.png"), tr("Paste")), SIGNAL(triggered()), this, SLOT(paste()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/indente.png"), tr("Selection Indent")), SIGNAL(triggered()), this, SLOT(slotIndent()) ); connect(menu->addAction(QIcon(":/toolbar/images/desindente.png"), tr("Selection Unindent")), SIGNAL(triggered()), this, SLOT(slotUnindent()) ); QTextCursor cursor = textCursor(); menu->addSeparator(); connect(menu->addAction(tr("Select All")), SIGNAL(triggered()), this, SLOT(selectAll()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/toolbar/images/find.png"), tr("Find...")), SIGNAL(triggered()), m_editor, SLOT(find()) ); menu->addSeparator(); connect(menu->addAction(QIcon(":/divers/images/bookmark.png"), tr("Toggle Bookmark")), SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(menu->addAction(QIcon(":/divers/images/breakpoint.png"), tr("Toggle Breakpoint")), SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // // menu->exec(e->globalPos()); delete menu; } // void TextEdit::selectLines(int debut, int fin) { if ( debut > fin ) qSwap( debut, fin); QTextCursor c = textCursor(); c.movePosition(QTextCursor::Start ); c.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, debut-1 ); c.movePosition(QTextCursor::Down, QTextCursor::KeepAnchor, fin-debut+1 ); setTextCursor( c ); ensureCursorVisible(); } // // QString TextEdit::wordUnderCursor(const QPoint & pos, bool select) { QTextCursor save(textCursor()); QTextCursor cursor; if ( pos.isNull() ) cursor = textCursor(); else cursor = cursorForPosition ( pos ); // int curpos = cursor.position(); while ( curpos>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos-1 ).toUpper() ) ) curpos--; cursor.setPosition(curpos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( curpos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::KeepAnchor); QString word = cursor.selectedText().simplified(); // if ( select ) setTextCursor( cursor ); else setTextCursor( save ); return word; } // QString TextEdit::firstWordUnderCursor() { QTextCursor save(textCursor()); QTextCursor cursor; cursor = textCursor(); // int curpos = cursor.position(); while ( curpos>0 && !QString(";").contains( m_plainText.at( curpos-1 ).toUpper() ) ) curpos--; while ( curpos < m_plainText.length() && !QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::MoveAnchor); setTextCursor( cursor ); // while ( curpos < m_plainText.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( m_plainText.at( curpos ).toUpper() ) ) curpos++; cursor.setPosition(curpos, QTextCursor::KeepAnchor); QString word = cursor.selectedText().simplified(); // setTextCursor( save ); return word; } QString TextEdit::wordUnderCursor(const QString text) { int begin = text.length(); while ( begin>0 && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( text.at( begin-1 ).toUpper() ) ) begin--; // int end = begin; while ( end < text.length() && QString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_").contains( text.at( end ).toUpper() ) ) end++; QString word = text.mid(begin, end-begin); return word; } // QString TextEdit::classNameUnderCursor(const QPoint & pos, bool addThis) { QTextCursor cursor; if ( pos.isNull() ) cursor = textCursor(); else cursor = cursorForPosition ( pos ); QString c = m_plainText.left(cursor.position()); for(int i=c.length()-1; i>=0; i--) { if( c.at(i) == '.' ) { c = c.left(i) + "." + m_editor->wordUnderCursor(); break; } else if( c.mid(i, 2) == "->" ) { c = c.left(i) + "->" + m_editor->wordUnderCursor(); break; } else if( c.mid(i, 2) == "::" ) { c = c.left(i) + "::"; break; } } QString classname = m_completion->className(c); if ( classname.isEmpty() && addThis ) { c += " this->"; classname = m_completion->className(c); } return classname; } // int TextEdit::currentLineNumber(QTextCursor cursor) { if( cursor.isNull() ) return lineNumber( textCursor() ); else return lineNumber( cursor ); } // int TextEdit::currentLineNumber(QTextBlock block) { int lineNumber = 1; for ( QTextBlock b =document()->begin(); b.isValid(); b = b.next(), lineNumber++) { if ( b == block ) { return lineNumber; } } return -1; } // int TextEdit::lineNumber(QTextCursor cursor) { QTextBlock blocCurseur = cursor.block(); int m_lineNumber = 1; for ( QTextBlock block =document()->begin(); block.isValid() && block != blocCurseur; block = block.next() ) m_lineNumber++; return m_lineNumber++; } // int TextEdit::lineNumber(QTextBlock b) { int m_lineNumber = 1; for ( QTextBlock block =document()->begin(); block.isValid() && block != b; block = block.next() ) m_lineNumber++; return m_lineNumber++; } // int TextEdit::linesCount() { int line = 1; for ( QTextBlock block = document()->begin(); block.isValid(); block = block.next() ) line++; return line; } // int TextEdit::lineNumber(QPoint point) { return lineNumber( cursorForPosition( point ) ); } // // void TextEdit::slotToggleBookmark() { m_editor->toggleBookmark( m_lineNumber ); if( m_lineNumbers ) m_lineNumbers->update(); } // // void TextEdit::slotToggleBreakpoint() { m_editor->toggleBreakpoint( m_lineNumber, QString(), true ); if( m_lineNumbers ) m_lineNumbers->update(); } void TextEdit::insertText(QString text, int insertAfterLine) { if ( m_tabSpaces ) { int nbSpaces = tabStopWidth() / fontMetrics().width( " " ); QString spaces; for (int i = 0; ifilename().toLower().endsWith(".cpp") ) classname = classNameUnderCursor(mousePosition, false); QString name = wordUnderCursor(mousePosition); if ( name.isEmpty() ) return; const QList *itemsList; itemsList = m_mainImpl->treeClassesItems(); bool found = false; for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.classname == classname && parsedItem.name == name) { if ( !parsedItem.implementation.isEmpty() ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } /* Below, the item in database has the same filename that the current editor and the same line number. The cursor is on a declaration in a header (.h). Open the implementation (.cpp). */ /* If sender() is not null, this function is called from the context menu. Otherwise from the main menu */ else if (m_editor->filename().toLower().endsWith(".h") && parsedItem.declaration.section("|", 0, 0) == m_editor->filename() && parsedItem.name == name && parsedItem.declaration.section("|", 1, 1).toInt() == currentLineNumber( sender() ? cursorForPosition(mousePosition) : QTextCursor() ) ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } // Now if the text is an .cpp, find the first name in database with the name "name" // Perhaps return a bad result but it should work many time. if ( !found && m_editor->filename().toLower().endsWith(".cpp")) { for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.name == name ) { QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); break; } } } } // void TextEdit::slotGotoDeclaration() { QString classname = classNameUnderCursor(mousePosition, false); QString name = wordUnderCursor(mousePosition); const QList *itemsList = m_mainImpl->treeClassesItems(); bool found = false; for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.classname == classname && parsedItem.name == name) { if ( !parsedItem.declaration.isEmpty() ) { QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); found = true; break; } } } if ( !found && m_editor->filename().toLower().endsWith(".cpp")) { for (int i = 0; i < itemsList->size(); ++i) { ParsedItem parsedItem = itemsList->at( i ); if ( parsedItem.name == name ) { QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); if ( QFileInfo(filename).isFile() ) m_mainImpl->openFile(QStringList(filename) , numLine, false, true); break; } } } } // void TextEdit::completionHelp() { if ( !m_completion ) return; QString c = m_plainText.left( textCursor().position() ); if( c.right(1) == "(" ) c = c.left( c.count()-1 ); QString name = wordUnderCursor(c); if( QString(":if:else:for:return:connect:while:do:").contains( name ) ) return; c = c.section(name, 0, 0); emit initParse(InitCompletion::Completion, m_editor->filename(), c, true, true, true, name); } void TextEdit::setTextColor(QColor c) { QPalette p = palette(); p.setColor( QPalette::Text, c ); setPalette(p); viewport()->update(); } void TextEdit::saveAsTemp() { QString filename = m_editor->filename().section(".cpp", 0, 0) + "-qdeveloptmp.cpp"; QFile file( filename ); if (!file.open(QIODevice::WriteOnly)) { return; } QTextStream out(&file); out << toPlainText(); file.close(); } QString TextEdit::tempFilename() { return m_editor->filename().section(".cpp", 0, 0) + "-qdeveloptmp.cpp"; } qdevelop-v0.28/src/.svn/text-base/stackimpl.cpp.svn-base0000444000175000017500000000427211362261066022211 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "stackimpl.h" #include "mainimpl.h" // #include // StackImpl::StackImpl( MainImpl * parent, QListWidget *m_list) : m_mainImpl(parent), m_list(m_list) { connect(m_list, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); } // void StackImpl::addLine( const QString line ) { QString s = line; s = s.mid( s.indexOf(" ") ); if( s.contains(" in ") ) s = line.section(" in ", -1); s = s.simplified(); m_list->addItem( s ); } // void StackImpl::slotCurrentItemChanged ( QListWidgetItem * item, QListWidgetItem * ) { if( !item ) return; QString s = item->text().section(" at ", -1); QString filename = s.section(":", 0, 0); int numLine = s.section(":", -1, -1).toInt(); QStringList filter = m_infoSources.filter( filename ); QStringList files; foreach(QString f, filter) { if( !QFile::exists( f ) ) f = m_directory + "/" + f; files << f; } if( filter.count() ) m_mainImpl->openFile( files, numLine); } // void StackImpl::infoSources(const QString s ) { if( s.indexOf("InfoSources:Source files") == -1) { foreach(QString text, s.split(",") ) { m_infoSources << text.remove(QString("InfoSources:")).simplified(); } } } void StackImpl::clear() { m_list->clear(); } qdevelop-v0.28/src/.svn/text-base/debug.cpp.svn-base0000444000175000017500000003067511362261066021316 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "debug.h" #include "editor.h" #include "registersimpl.h" #include #include #include #include // #ifdef Q_OS_LINUX #include #include #endif // #define QD qDebug() << __FILE__ << __LINE__ << ":" // Debug::Debug(QObject * parent, RegistersImpl *registersImpl, QString gdbName, Parameters p, QString exe, bool exeOnly) : QThread(parent) { m_parent = parent; m_registersImpl = registersImpl; m_gdbName = gdbName; executableName = exe; m_executeWithoutDebug = exeOnly; m_parameters = p; } // void Debug::run() { m_pid = 0; m_request = None; connect(m_parent, SIGNAL(debugCommand(QString)), this, SLOT(slotDebugCommand(QString)) ); connect(m_registersImpl, SIGNAL(debugCommand(QString)), this, SLOT(slotDebugCommand(QString)) ); connect(m_parent, SIGNAL(stopDebug()), this, SLOT(slotStopDebug()) ); connect(m_parent, SIGNAL(pauseDebug()), this, SLOT(slotPauseDebug()) ); connect(m_parent, SIGNAL(otherVariables(QStringList)), this, SLOT(slotOtherVariables(QStringList)) ); if( m_executeWithoutDebug ) executeWithoutDebug(); else launchDebug(); } // void Debug::executeWithoutDebug() { emit message( tr("Running...") ); processDebug = new QProcess(); connect(processDebug, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessagesDebug()) ); connect(processDebug, SIGNAL(readyReadStandardError()), this, SLOT(slotMessagesDebug()) ); setEnvironment( processDebug ); //processDebug->start("\""+executableName+"\"", QStringList() << m_parameters.arguments); //processDebug->start(executableName, QStringList() << m_parameters.arguments); // Divius: previous implementation will wrap all arguments in quotes processDebug->start("\""+executableName+"\"" + " " + m_parameters.arguments); processDebug->waitForFinished(500); // On attend un peu pour passer en �at Running while( processDebug->state() == QProcess::Running ) { processDebug->waitForFinished(5); } if (processDebug->exitCode() == 0) emit message( "---------------------- "+tr("Exited normally")+" ----------------------" ); else emit message( "---------------------- "+tr("Exited with error code %1").arg(processDebug->exitCode())+" ----------------------" ); emit endDebug(); } // void Debug::launchDebug() { emit message( tr("Debug...") ); processDebug = new QProcess(); connect(processDebug, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessagesDebug()) ); connect(processDebug, SIGNAL(readyReadStandardError()), this, SLOT(slotMessagesDebug()) ); setEnvironment( processDebug ); processDebug->start(m_gdbName, QStringList() << "--silent" << "--fullname" << executableName ); configureGdb(); writeMessagesToDebugger(); processDebug->write("run "+m_parameters.arguments.toLatin1()+"\n"); processDebug->waitForFinished(500); // On attend un peu pour passer en �at Running while( processDebug->state() == QProcess::Running ) { processDebug->waitForFinished(5); writeMessagesToDebugger(); } emit message( "---------------------- "+tr("Debug exited")+" ----------------------" ); } // void Debug::setEnvironment(QProcess *process) { process->setWorkingDirectory( m_parameters.workingDirectory ); process->setEnvironment( m_parameters.env ); } // void Debug::writeMessagesToDebugger() { QStringListIterator it(messagesToDebugger); while( it.hasNext() ) { QString msg = it.next(); processDebug->write( msg.toLatin1() ); } messagesToDebugger.clear(); } // void Debug::slotMessagesDebug() { char breakpoint[] = { 26, 26, 0x0 }; QString messages = processDebug->readAllStandardOutput(); if( m_executeWithoutDebug ) { slotMessagesError(); return; } static QString listMessagesDebug; listMessagesDebug += QString( messages ); if( !listMessagesDebug.endsWith("(gdb) ") ) { return; } while( listMessagesDebug.length() ) { QString s = listMessagesDebug.section("\n", 0, 0); listMessagesDebug = listMessagesDebug.section("\n", 1); if( !s.isEmpty() ) { if( s.indexOf( breakpoint )==0 ) { emit message( QString::fromUtf8(s.toLocal8Bit()) ); listVariables.clear(); listVariablesToSend.clear(); m_request = InfoScope; QString numLine = s.section(":", -4, -4); messagesToDebugger << "info scope "+numLine+"\n"; continue; } // if( s.indexOf("Program exited normally.") == 0 ) { emit message( QString::fromUtf8(s.toLocal8Bit()) ); slotStopDebug(); } else if( s.indexOf("[New Thread") == 0 && m_pid==0) { m_pid = s.section("(", 1, 1).section(" ", 1, 1).section(")", 0, 0).toInt(); } else if( m_request == Registers ) { s = "Registers:"+listMessagesDebug; emit message( QString::fromUtf8(s.toLocal8Bit()) ); listMessagesDebug.clear(); messagesToDebugger << "info sources\n"; m_request = InfoSources; } else if( m_request == InfoSources ) { if( s.indexOf("(gdb)") == 0) { m_request = None; s = "InfoSourcesEnd"; messagesToDebugger << "bt\n"; } else s = "InfoSources:"+s; emit message( QString::fromUtf8(s.toLocal8Bit()) ); } else if( m_request == InfoScope ) { if( s.indexOf("(gdb)") == 0 && listVariables.count() != 0 ) { foreach(QString s, m_otherVariables) { Variable v; v.name = s; v.kind = Debug::OtherArgs; listVariables.append( v ); } m_request = Whatis; Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; } else if( s.contains( "No arguments" ) ) { if( listVariables.count() ) { foreach(QString s, m_otherVariables) { Variable v; v.name = s; v.kind = Debug::OtherArgs; listVariables.append( v ); } m_request = Whatis; Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; } else { m_request = None; } } else if( s.indexOf("Symbol ") == 0 ) { QString name = s.section("Symbol ", 1).section(" ", 0, 0).simplified(); if( !name.isEmpty() ) { Variable variable; variable.name = name; variable.kind = Local; listVariables.append( variable ); } } } else if ( m_request == Whatis ) { QString type = s.section("type = ", 1).simplified(); if( !type.isEmpty() ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); variable.type = type; listVariables.prepend( variable ); m_request = Address; if( type.contains( "*" ) ) { messagesToDebugger << "p "+variable.name+"\n"; } else { messagesToDebugger << "p &"+variable.name+"\n"; } } } else if ( m_request == Address ) { QString address = s.section(" = ", 1).simplified(); if( !address.isEmpty() ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); variable.address = address; listVariables.prepend( variable ); if( variable.type.section(" ", 0, 0) == "QString" ) { m_request = Length; messagesToDebugger << "p "+variable.name+"->d.size\n"; } else { m_request = Value; if( variable.type.section(" ", 0, 0) == "string" ) messagesToDebugger << "p "+variable.name+".c_str()\n"; else messagesToDebugger << "p "+variable.name+"\n"; } } } else if ( m_request == Length ) { if( s.length() && s.at(0) == '$' ) { int length = s.section(" = ", 1).simplified().toInt(); Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); if( length > 0 ) { variable.length = qMin(length, 100); listVariables.prepend( variable ); m_request = Value; messagesToDebugger << "p "+variable.name+"->d.data[0]\n"; } else { listVariablesToSend.append( variable ); if( listVariables.count() ) { Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); m_request = None; } } } } else if ( m_request == Value ) { s.remove( "(gdb) "); if( s.length() && s.at(0) == '$' ) { Variable variable = listVariables.at(0); listVariables.removeAt( 0 ); QString content = s.section("= ", 1); if( variable.type.section(" ", 0, 0) == "QString" ) { if( variable.length && variable.content.length() < variable.length ) { variable.content += QChar( content.toInt() ); m_request = Value; listVariables.prepend( variable ); messagesToDebugger << "p "+variable.name+"->d.data["+QString::number(variable.content.length())+"]\n"; continue; } else { listVariablesToSend.append( variable ); } } else { variable.content = QString::fromUtf8(content.toLocal8Bit()); listVariablesToSend.append( variable ); } if( listVariables.count() ) { variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { m_request = None; emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); listMessagesDebug.clear(); messagesToDebugger << "info register\n"; m_request = Registers; } } } else { emit message( QString::fromUtf8(s.toLocal8Bit()) ); } } } slotMessagesError(); } void Debug::slotMessagesError() { QStringList list = QString(processDebug->readAllStandardError()).split("\n"); if( list.count() ) foreach(QString s, list) { if( !s.isEmpty() ) { if( m_request != None ) { if( listVariables.count() ) { Variable variable = listVariables.at(0); variable.content = tr("Error: Unable to evaluate value"); listVariablesToSend.append( variable ); listVariables.removeAt( 0 ); } if( listVariables.count() ) { Variable variable = listVariables.at(0); messagesToDebugger << "whatis "+variable.name+"\n"; m_request = Whatis; } else { emit debugVariables( listVariablesToSend ); listVariablesToSend.clear(); m_request = None; } } else emit message( s ); } } list.clear(); } // void Debug::slotOtherVariables(QStringList list) { m_otherVariables = list; } // void Debug::slotDebugCommand(QString text) { if( text == "info sources\n" ) m_request = InfoSources; messagesToDebugger << text; } // void Debug::slotBreakpoint(QString filename, unsigned int line, BlockUserData *blockUserData) { QString point; if( blockUserData->breakpoint ) { if( blockUserData->isTrue ) { if( blockUserData->breakpointCondition.isEmpty() ) point = "break "+filename+":"+QString::number(line)+"\n"; else point = "break "+filename+":"+QString::number(line)+" if "+blockUserData->breakpointCondition+"\n"; } else { point = "watch "+blockUserData->breakpointCondition+"\n"; } } else point = "clear "+filename+":"+QString::number(line)+"\n"; messagesToDebugger << point; } // void Debug::slotStopDebug() { emit endDebug(); #ifdef Q_OS_LINUX if( m_pid ) { kill(m_pid, SIGKILL); m_pid = 0; } #endif processDebug->kill(); processDebug->deleteLater(); } // void Debug::slotPauseDebug() { #ifdef Q_OS_LINUX if( m_pid ) { kill(m_pid, SIGINT); emit onPause(); } #endif } // void Debug::configureGdb() { slotDebugCommand("set pagination off\n"); slotDebugCommand("set width 0\n"); slotDebugCommand("set height 0\n"); slotDebugCommand("set complaints 0\n"); // } qdevelop-v0.28/src/.svn/text-base/addnewimpl.cpp.svn-base0000444000175000017500000001114211362261066022340 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include // AddNewImpl::AddNewImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); suffixe = "cpp"; connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(directoryButton, SIGNAL(clicked()), this, SLOT(slotDirectoryChoice()) ); connect(comboProjects, SIGNAL(activated(QString)), this, SLOT(slotComboProjects(QString)) ); connect(source, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(header, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(dialog, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(resource, SIGNAL(clicked()), this, SLOT(slotFileType()) ); connect(translation, SIGNAL(clicked()), this, SLOT(slotFileType()) ); } // void AddNewImpl::slotDirectoryChoice() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel choosen return; } location->setText( s ); } // void AddNewImpl::slotComboProjects(QString /*projectName*/) { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); m_projectDirectory = m_projectManager->projectDirectory( item ); location->setText( m_projectDirectory ); } // void AddNewImpl::slotFileType() { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); if( source->isChecked() ) { suffixe = "cpp"; location->setText( m_projectManager->srcDirectory( item ) ); } else if( header->isChecked() ) { suffixe = "h"; location->setText( m_projectManager->srcDirectory( item ) ); } else if( dialog->isChecked() ) { suffixe = "ui"; location->setText( m_projectManager->uiDirectory( item ) ); } else if( resource->isChecked() ) { suffixe = "qrc"; location->setText( m_projectManager->projectDirectory( item ) ); } else if( translation->isChecked() ) { suffixe = "ts"; location->setText( m_projectManager->projectDirectory( item ) ); } // if( filename->text().lastIndexOf(".") > 0 ) { QString prefixe = filename->text().left( filename->text().lastIndexOf(".") ); filename->setText( prefixe + "." + suffixe); } else if( filename->text().length() ) filename->setText( filename->text() + "." + suffixe); } // void AddNewImpl::slotAccept() { QString suffixeSaisi; if( filename->text().lastIndexOf(".") > 0 ) { suffixeSaisi = filename->text().mid( filename->text().lastIndexOf(".")+1 ); } if( suffixeSaisi != suffixe && !(suffixe == "h" && suffixeSaisi == "hpp") ) { QMessageBox::warning(this, "QDevelop", tr("The suffix of the file is not correct."), tr("Cancel") ); return; } if( suffixe == "cpp" || suffixe == "c" || suffixe == "h" || suffixe == "hpp" ) { QString type = tr("header"); QString autreSuffixe = "h"; if( suffixe == "h" || suffixe == "hpp") { type = tr("source"); autreSuffixe = "cpp"; } int rep = 1; if (suffixeSaisi != "hpp") rep = QMessageBox::question(0, "QDevelop", tr("Also create the file %1 in same location ?").arg(type), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if( rep == 2 ) return; if( rep == 0 ) { QString nomFic = filename->text(); QString nomAutre = nomFic.left( nomFic.lastIndexOf(".") ) + "." + autreSuffixe; filename->setText( "\"" + nomFic + "\", " + "\"" + nomAutre + "\""); } } else filename->setText( "\"" + filename->text() + "\""); accept(); } // qdevelop-v0.28/src/.svn/text-base/selectionborder.cpp.svn-base0000444000175000017500000000513511362261066023404 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "selectionborder.h" #include "textEdit.h" // #include #include #include #include #include #include #include #include // SelectionBorder::SelectionBorder( TextEdit* edit ) : QWidget( (QWidget *)edit ), m_textEdit( edit ) { setObjectName( "editorZone" ); m_begin = m_end = 0; setBackgroundColor( QColor( "#ffffd2" ) ); setFixedWidth( 10 ); setCursor( QCursor(QPixmap(":/divers/images/curseurDroit.png"), 12, 0)); } // void SelectionBorder::paintEvent( QPaintEvent* ) { QPainter p( this ); p.setBrush( backgroundColor() ); p.setPen( backgroundColor() ); p.drawRect( rect() ); } // void SelectionBorder::mousePressEvent ( QMouseEvent * event ) { if( event->modifiers() == Qt::NoModifier ) m_begin = m_end = 0; mouseMoveEvent( event ); } // void SelectionBorder::mouseMoveEvent ( QMouseEvent * event ) { QTextCursor cursor = m_textEdit->cursorForPosition( event->pos() ); int num = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid() && block != cursor.block(); block = block.next(), num++ ) ; if( cursor.isNull() ) return; if( m_begin == 0 ) m_begin = num; m_end = num; //if( m_begin > m_end ) //qSwap( m_begin, m_end); m_textEdit->selectLines(m_begin, m_end); } // void SelectionBorder::mouseReleaseEvent ( QMouseEvent * /*event*/ ) {} // // void SelectionBorder::setBackgroundColor( const QColor& c ) { if ( c == mBackgroundColor ) return; mBackgroundColor = c; QPalette p( palette() ); p.setColor( backgroundRole(), mBackgroundColor ); setPalette( p ); } // const QColor& SelectionBorder::backgroundColor() const { return mBackgroundColor; } qdevelop-v0.28/src/.svn/text-base/linenumbers.cpp.svn-base0000444000175000017500000002201411362261066022537 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ /******************************************************************************************************** * Une partie de cette classe fait partie du projet Monkey Studio * de Azevedo Filipe aka Nox PasNox ( pasnox at gmail dot com ) ********************************************************************************************************/ #include "linenumbers.h" #include "textEdit.h" #include "editor.h" // #include #include #include #include #include #include #include #include #include "ui_breakpointcondition.h" // #define QD qDebug() << __FILE__ << __LINE__ << ":" // LineNumbers::LineNumbers( TextEdit* edit, Editor *editor) : QWidget( (QWidget *)edit ), m_textEdit( edit ), m_editor( editor ) { setObjectName( "editorZone" ); setAutoFillBackground( true ); connect( m_textEdit->document()->documentLayout(), SIGNAL( update( const QRectF& ) ), this, SLOT( update() ) ); connect( m_textEdit->verticalScrollBar(), SIGNAL( valueChanged( int ) ), this, SLOT( update() ) ); m_executedLine = 0; setDefaultProperties(); setMouseTracking( true ); } // void LineNumbers::paintEvent( QPaintEvent* ) { int contentsY = m_textEdit->verticalScrollBar()->value(); qreal pageBottom = contentsY + m_textEdit->viewport()->height(); int m_lineNumber = 1; const QFontMetrics fm = fontMetrics(); const int ascent = fontMetrics().ascent() +1; // QPainter p( this ); // need a hack to only browse the viewed block for big document for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), m_lineNumber++ ) { QTextLayout* layout = block.layout(); const QRectF boundingRect = layout->boundingRect(); QPointF position = layout->position(); if ( position.y() +boundingRect.height() < contentsY ) continue; if ( position.y() > pageBottom ) break; const QString txt = QString::number( m_lineNumber ); if( m_lineNumber == m_executedLine ) { int centreV = qRound( position.y() ) -contentsY + 8; p.setBrush( Qt::blue ); float x = width()-1; const QPointF points[7] = { QPointF(x, centreV), QPointF(x-9, centreV-8), QPointF(x-9, centreV-4), QPointF(x-15, centreV-4), QPointF(x-15, centreV+4), QPointF(x-9, centreV+4), QPointF(x-9, centreV+8), }; p.drawPolygon(points, 7); } else p.drawText( width() -fm.width( txt ) - 2, qRound( position.y() ) -contentsY +ascent, txt ); // -fm.width( "0" ) is an ampty place/indent BlockUserData *blockUserData = (BlockUserData*)block.userData(); if( blockUserData && blockUserData->breakpoint ) { QPixmap pixmap = QPixmap(":/divers/images/breakpoint.png"); if( !blockUserData->breakpointCondition.isEmpty() ) pixmap = QPixmap(":/divers/images/breakpoint2.png"); p.drawPixmap( 1, qRound( position.y() ) -contentsY-4, pixmap); } if( blockUserData && blockUserData->bookmark ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-6,QPixmap(":/divers/images/bookmark.png")); } if( blockUserData && !blockUserData->errorString.isEmpty() ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-2,QPixmap(":/divers/images/error.png") ); } else if( blockUserData && !blockUserData->warningString.isEmpty() ) { p.drawPixmap( 3, qRound( position.y() ) -contentsY-2,QPixmap(":/divers/images/warning.png") ); } } p.end(); } // PROPERTIES void LineNumbers::setDigitNumbers( int i ) { if ( i == mDigitNumbers ) return; mDigitNumbers = i; setFixedWidth( fontMetrics().width( "0" ) * (i) + 22 ); // +2 = 1 empty place before and 1 empty place after //setFixedWidth( fontMetrics().width( "0" ) * ( mDigitNumbers +2 ) ); // +2 = 1 empty place before and 1 empty place after emit digitNumbersChanged(); } // int LineNumbers::digitNumbers() const { return mDigitNumbers; } // void LineNumbers::setTextColor( const QColor& c ) { if ( c == mTextColor ) return; mTextColor = c; QPalette p( palette() ); p.setColor( foregroundRole(), mTextColor ); setPalette( p ); emit textColorChanged( mTextColor ); } // const QColor& LineNumbers::textColor() const { return mTextColor; } // void LineNumbers::setBackgroundColor( const QColor& c ) { if ( c == mBackgroundColor ) return; mBackgroundColor = c; QPalette p( palette() ); p.setColor( backgroundRole(), mBackgroundColor ); setPalette( p ); emit backgroundColorChanged( mBackgroundColor ); } // const QColor& LineNumbers::backgroundColor() const { return mBackgroundColor; } // END PROPERTIES void LineNumbers::setDefaultProperties() { // Default properties setFont( m_textEdit->font() ); setBackgroundColor( QColor( "#ffffd2" ) ); setTextColor( QColor( Qt::black ) ); //setTextColor( QColor( "#aaaaff" ) ); setDigitNumbers( 4 ); } void LineNumbers::mouseMoveEvent ( QMouseEvent * event ) { m_cursor = m_textEdit->cursorForPosition( event->pos() ); if( m_cursor.isNull() ) { setToolTip(""); return; } BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); QString tooltip; if( blockUserData && !blockUserData->errorString.isEmpty() ) { tooltip = blockUserData->errorString.left(blockUserData->errorString.length()-1); } else if( blockUserData && !blockUserData->warningString.isEmpty() ) { tooltip = blockUserData->warningString.left(blockUserData->warningString.length()-1); } else tooltip = ""; setToolTip( tooltip ); QWidget::mouseMoveEvent( event ); } // void LineNumbers::mousePressEvent ( QMouseEvent * event ) { m_cursor = m_textEdit->cursorForPosition( event->pos() ); if( m_cursor.isNull() ) return; m_currentLine = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid() && block != m_cursor.block(); block = block.next(), m_currentLine++ ) ; if( event->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); connect(menu->addAction(QIcon(":/divers/images/bookmark.png"), tr("Toogle Bookmark")), SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(menu->addAction(QIcon(":/divers/images/breakpoint.png"), tr("Toogle Breakpoint")), SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); // BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); if( blockUserData && blockUserData->breakpoint ) { menu->addSeparator(); connect(menu->addAction(QIcon(":/divers/images/breakpoint2.png"), tr("Breakpoint Condition...")), SIGNAL(triggered()), this, SLOT(slotBreakpointCondition()) ); } // menu->exec(event->globalPos()); delete menu; } else if ( event->button() == Qt::MidButton ) slotToggleBreakpoint(); else slotToggleBookmark(); } // void LineNumbers::slotToggleBreakpoint() { m_editor->toggleBreakpoint( m_currentLine, QString(), true ); repaint(); } // void LineNumbers::slotToggleBookmark() { m_editor->toggleBookmark( m_currentLine ); repaint(); } // void LineNumbers::setExecutedLine(int ligne) { m_executedLine = ligne; repaint(); } // void LineNumbers::slotResetExecutedLine() { if( m_executedLine ) { m_executedLine = 0; update(); } else m_executedLine = 0; } void LineNumbers::slotBreakpointCondition() { BlockUserData *blockUserData = (BlockUserData*)m_cursor.block().userData(); if( m_cursor.isNull() ) return; if( blockUserData && blockUserData->breakpoint ) { QDialog *condition = new QDialog; Ui::BreakpointCondition ui; ui.setupUi(condition); ui.condition->setText( blockUserData->breakpointCondition ); ui.checkboxCondition->setChecked( !blockUserData->breakpointCondition.isEmpty() ); if( blockUserData->isTrue ) ui.isTrue->setChecked( true ); else ui.hasChanged->setChecked( true ); if( condition->exec() == QDialog::Accepted ) { blockUserData->breakpointCondition = ui.condition->text(); blockUserData->isTrue = ui.isTrue->isChecked(); m_cursor.block().setUserData( blockUserData ); m_editor->toggleBreakpoint( m_currentLine, blockUserData->breakpointCondition, blockUserData->isTrue); // Disable breakpoint m_editor->toggleBreakpoint( m_currentLine, blockUserData->breakpointCondition, blockUserData->isTrue ); // Enable breakpoint repaint(); } delete condition; } } qdevelop-v0.28/src/.svn/text-base/projectpropertieimpl.cpp.svn-base0000444000175000017500000011240211362261066024477 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "projectpropertieimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include #include #include #include // ProjectPropertieImpl::ProjectPropertieImpl(ProjectManager * parent, QTreeWidget *tree, QTreeWidgetItem *itProject) : QDialog(0), m_projectManager(parent), m_itProject(itProject), m_treeFiles(tree) { setupUi(this); m_copyItProject = 0; m_copyTreeFiles = new QTreeWidget(this); m_copyTreeFiles->setColumnCount(1); m_copyTreeFiles->setHeaderLabels(QStringList("")); m_copyTreeFiles->setHidden( true ); m_projectName = itProject->text(0); srcDirectory->setText( m_projectManager->srcDirectory( itProject ) ); uiDirectory->setText( m_projectManager->uiDirectory( itProject ) ); new QTreeWidgetItem(m_copyTreeFiles); copyTreeWidget(m_treeFiles->topLevelItem(0), m_copyTreeFiles->topLevelItem(0)); while ( m_projectManager->toKey( m_copyItProject->data(0, Qt::UserRole) ) != "PROJECT" ) m_copyItProject = m_copyItProject->parent(); setWindowTitle( tr("Properties of %1").arg(m_projectName) ); populateComboScope(); resize(10,10); } // void ProjectPropertieImpl::clearFields() { QList enfants; enfants = groupeDebug->children(); QListIterator iterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeWarn->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeBibliotheques->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } // enfants = groupeAvancees->children(); iterator = QListIterator(enfants); while ( iterator.hasNext() ) { QObject *objet = iterator.next(); QString classe = objet->metaObject()->className(); if ( classe == "QCheckBox" ) ((QCheckBox *)objet)->setChecked(false); else if ( classe == "QRadioButton" ) ((QRadioButton *)objet)->setChecked(false); } supplement->clear(); } // void ProjectPropertieImpl::connections() { connect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotSubdirs(bool)) ); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(comboScope, SIGNAL(activated(int)), this, SLOT(slotComboScope(int)) ); connect(variablesList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); connect(valuesList, SIGNAL(doubleClicked ( const QModelIndex &)), this, SLOT(slotModifyValue()) ); // connect(addVariable, SIGNAL(clicked()), this, SLOT(slotAddVariable()) ); connect(deleteVariable, SIGNAL(clicked()), this, SLOT(slotDeleteVariable()) ); connect(addValue, SIGNAL(clicked()), this, SLOT(slotAddValue()) ); connect(deleteValue, SIGNAL(clicked()), this, SLOT(slotDeleteValue()) ); connect(modifyValue, SIGNAL(clicked()), this, SLOT(slotModifyValue()) ); // connect(debug, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(debug_and_release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(build_all, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(warn_on, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(warn_off, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(app_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(assistant, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(console, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(designer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(dll, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(exceptions, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(lib_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(link_pkgconfig, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(no_lflags_merge, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(opengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(plugin, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(ppc, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qaxcontainer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qaxserver, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qt, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qtestlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(resources, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(rtti, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(staticlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(stl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(Thread, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(uic3, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(uitools, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(windows, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(x11, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(x86, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(core, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(network, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(sql, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(xml, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(gui, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(libopengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(svg, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(qt3support, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(app, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(lib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(webkit, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(phonon, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(xmlpatterns, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); connect(script, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); // connect(srcDirectoryButton, SIGNAL(clicked()), this, SLOT(slotSrcDirectory()) ); connect(uiDirectoryButton, SIGNAL(clicked()), this, SLOT(slotUiDirectory()) ); } // void ProjectPropertieImpl::unconnections() { disconnect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotSubdirs(bool)) ); disconnect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); disconnect(comboScope, SIGNAL(activated(int)), this, SLOT(slotComboScope(int)) ); disconnect(variablesList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *, QListWidgetItem *)) ); // disconnect(addVariable, SIGNAL(clicked()), this, SLOT(slotAddVariable()) ); disconnect(deleteVariable, SIGNAL(clicked()), this, SLOT(slotDeleteVariable()) ); disconnect(addValue, SIGNAL(clicked()), this, SLOT(slotAddValue()) ); disconnect(deleteValue, SIGNAL(clicked()), this, SLOT(slotDeleteValue()) ); disconnect(modifyValue, SIGNAL(clicked()), this, SLOT(slotModifyValue()) ); // disconnect(debug, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(debug_and_release, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(build_all, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(warn_on, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(warn_off, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(app_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(assistant, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(console, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(designer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(dll, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(exceptions, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(lib_bundle, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(link_pkgconfig, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(no_lflags_merge, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(opengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(plugin, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(ppc, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qaxcontainer, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qaxserver, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qt, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qtestlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(resources, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(rtti, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(staticlib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(stl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(Thread, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(uic3, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(uitools, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(windows, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(x11, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(x86, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(core, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(network, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(sql, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(xml, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(gui, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(libopengl, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(svg, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(qt3support, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(app, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(lib, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(subdirs, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(webkit, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(phonon, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(xmlpatterns, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); disconnect(script, SIGNAL(toggled(bool)), this, SLOT(slotCheck(bool)) ); } // void ProjectPropertieImpl::slotCheck(bool activer) { QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *itCombo = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itCombo = (QTreeWidgetItem*)variantToItem(variant); QObject *objet = sender(); QString classe = objet->metaObject()->className(); QString nomVariable; QTreeWidgetItem *it; nomVariable = objet->objectName().simplified(); nomVariable = nomVariable.toLower(); // some (actually, one) of the checkboxes have upper characters to avoid name conflicts if ( QString(":app:lib:subdirs:").contains( ":"+nomVariable+":" ) ) { QTreeWidgetItem *itTemplate = subItTemplate( itCombo ); if ( !itTemplate ) { itTemplate = new QTreeWidgetItem( itCombo ); itTemplate->setText(0, "TEMPLATE"); itTemplate->setData(0, Qt::UserRole, m_projectManager->toItem("TEMPLATE", "=")); m_copyTreeFiles->setItemHidden(itTemplate, true); } it = itTemplate; } else if ( QString(":core:gui:network:libopengl:sql:svg:xml:qt3support:webkit:phonon:xmlpatterns:script:").contains( ":"+nomVariable+":" ) ) { if (nomVariable == "libopengl") nomVariable = "opengl"; // There's both CONFIG += opengl and QT += opengl - the latter widget is called libopengl so the name must be manually replaced here QTreeWidgetItem *itQT = subItQT( itCombo ); if ( !itQT ) { itQT = new QTreeWidgetItem( itCombo ); itQT->setText(0, "QT"); itQT->setData(0, Qt::UserRole, m_projectManager->toItem("QT", "+=")); m_copyTreeFiles->setItemHidden(itQT, true); } it = itQT; } else { QTreeWidgetItem *itConfig = subItConfig( itCombo ); if ( !itConfig ) { itConfig = new QTreeWidgetItem( itCombo ); itConfig->setText(0, "CONFIG"); itConfig->setData(0, Qt::UserRole, m_projectManager->toItem("CONFIG", "+=")); m_copyTreeFiles->setItemHidden(itConfig, true); } it = itConfig; } if ( activer ) { QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( it ); nouvelItem->setText(0, nomVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); } else { for (int i=0; ichildCount(); i++) { if ( it->child( i )->text( 0 ) == nomVariable ) { QTreeWidgetItem *parent = it->child( i )->parent(); delete it->child( i ); while ( !parent->childCount() && m_projectManager->toKey( parent->data(0, Qt::UserRole) ) != "PROJECT" && m_projectManager->toKey( parent->data(0, Qt::UserRole) ) != "SCOPE" ) { it = parent->parent(); delete parent; parent = it; } } } } } // QTreeWidgetItem *ProjectPropertieImpl::subItTemplate(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "TEMPLATE" ) return item; } return 0; } // QTreeWidgetItem *ProjectPropertieImpl::subItQT(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "QT" ) return item; } return 0; } // QTreeWidgetItem *ProjectPropertieImpl::subItConfig(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "CONFIG" ) return item; } return 0; } // void ProjectPropertieImpl::copyTreeWidget(QTreeWidgetItem *source, QTreeWidgetItem *dest) { if ( source == m_itProject ) m_copyItProject = dest; dest->setText(0, source->text(0)); dest->setData(0, Qt::UserRole, source->data(0, Qt::UserRole ) ); dest->setToolTip(0, source->toolTip(0) ); dest->setIcon(0, source->icon(0)); dest->treeWidget()->setItemHidden(dest, source->treeWidget()->isItemHidden(source)); dest->treeWidget()->setItemExpanded(dest, source->treeWidget()->isItemExpanded(source)); for (int i=0; ichildCount(); i++) { copyTreeWidget(source->child(i), new QTreeWidgetItem( dest ) ); } } // void ProjectPropertieImpl::slotAccept() { QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *itCombo = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itCombo = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *itConfig = subItConfig( itCombo ); if ( !itConfig && supplement->text().simplified().split(" ", QString::SkipEmptyParts).count() ) { itConfig = new QTreeWidgetItem( m_copyItProject ); itConfig->setText(0, "CONFIG"); itConfig->setData(0, Qt::UserRole, m_projectManager->toItem("CONFIG", "+=") ); m_copyTreeFiles->setItemHidden(itConfig, true); } foreach(QString nomVariable, supplement->text().simplified().split(" ", QString::SkipEmptyParts)) { QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( itConfig ); nouvelItem->setText(0, nomVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); } m_treeFiles->clear(); new QTreeWidgetItem(m_treeFiles); copyTreeWidget(m_copyTreeFiles->topLevelItem(0), m_treeFiles->topLevelItem(0)); m_treeFiles->setItemExpanded(m_treeFiles->topLevelItem(0), m_copyTreeFiles->isItemExpanded(m_copyTreeFiles->topLevelItem(0))); //m_projectManager->setSrcDirectory(m_projectManager->itemProject(m_projectName), srcDirectory->text() ); //m_projectManager->setUiDirectory(m_projectManager->itemProject(m_projectName), uiDirectory->text() ); accept(); } // void ProjectPropertieImpl::slotCurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * /*previous*/ ) { valuesList->clear(); if ( !current ) return; QVariant variant = current->data( Qt::UserRole ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); for (int nb=0; nb < item->childCount(); nb++) { valuesList->addItem( item->child( nb )->text(0) ); valuesList->item( valuesList->count()-1 )->setData(Qt::UserRole, addressToVariant(item->child( nb ) ) ); } } // void ProjectPropertieImpl::slotAddVariable() { QString nouvelleVariable; //QString text = QInputDialog::getText(this, "QDevelop", //tr("New variable:"), QLineEdit::Normal, //"", &ok); QString text; QDialog *newVariable = new QDialog; Ui::NewVariable ui; ui.setupUi(newVariable); newVariable->setWindowTitle("QDevelop"); QComboBox *c = ui.comboVariables; makeComboVariables( c ); bool ok = newVariable->exec(); if (ok) { if ( !ui.groupUserVariable->isChecked() ) nouvelleVariable = ui.comboVariables->itemData(ui.comboVariables->currentIndex(), Qt::UserRole).toString(); else if( (QStringList() << "TEMPLATE" << "CONFIG" << "QT").contains(ui.userVariable->text()) ) { QMessageBox::warning(0, "QDevelop", tr("A new variable can not be \"QT\", \"CONFIG\" or \"TEMPLATE\""), tr("Cancel") ); delete newVariable; return; } else if ( ui.groupUserVariable->isChecked() && !ui.userVariable->text().isEmpty() ) nouvelleVariable = ui.userVariable->text(); else { delete newVariable; return; } } else { delete newVariable; return; } QComboBox *comboOperator = ui.comboOperator; QVariant variant = comboScope->itemData( comboScope->currentIndex() ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( item ); m_copyTreeFiles->setItemHidden(nouvelItem, true); nouvelItem->setText(0, nouvelleVariable); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem(nouvelleVariable, comboOperator->currentText())); slotComboScope( comboScope->currentIndex() ); } // void ProjectPropertieImpl::slotDeleteVariable() { QListWidgetItem *itemCourant; if ( !(itemCourant = variablesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); delete itemTree; slotComboScope( comboScope->currentIndex() ); } // void ProjectPropertieImpl::slotAddValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = variablesList->currentItem()) ) return; QString nouvelleValeur; bool ok; int corriger = -1; QString text; do { text = QInputDialog::getText(this, "QDevelop", tr("New Value:"), QLineEdit::Normal, text, &ok); if ( text.contains(" ") && !text.contains("\"")) { corriger = QMessageBox::warning(0, "QDevelop", tr("The spaces aren't correctly parsed by qmake") +",\n" +tr("delete spaces or put quotes."), tr("Modify"), tr("Cancel") ); if ( corriger == 1 ) ok = false; } } while ( ok && corriger==0 ); if (ok && !text.isEmpty()) nouvelleValeur = text; else return; QVariant variant = itemCourant->data( Qt::UserRole ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QTreeWidgetItem *nouvelItem = new QTreeWidgetItem( item ); m_copyTreeFiles->setItemHidden(nouvelItem, true); nouvelItem->setText(0, nouvelleValeur); nouvelItem->setData(0, Qt::UserRole, m_projectManager->toItem("DATA")); slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotDeleteValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = valuesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); delete itemTree; slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotModifyValue() { QListWidgetItem *itemCourant; if ( !(itemCourant = valuesList->currentItem()) ) return; QVariant variant = itemCourant->data( Qt::UserRole ); QString nouvelleValeur; //QTreeWidgetItem *itemTree = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *itemTree = (QTreeWidgetItem*)variantToItem(variant); bool ok; int corriger = -1; QString text = itemCourant->text(); do { text = QInputDialog::getText(this, "QDevelop", tr("New Value:"), QLineEdit::Normal, text, &ok); if ( text.contains(" ") && !text.contains("\"")) { corriger = QMessageBox::warning(0, "QDevelop", tr("The spaces aren't correctly parsed by qmake") +",\n" +tr("delete spaces or put quotes."), tr("Modify"), tr("Cancel") ); if ( corriger == 1 ) ok = false; } } while ( ok && corriger==0 ); if (ok && !text.isEmpty()) nouvelleValeur = text; else return; itemTree->setText(0, nouvelleValeur); slotCurrentItemChanged(variablesList->currentItem(), 0); } // void ProjectPropertieImpl::slotComboScope(int index) { unconnections(); variablesList->clear(); valuesList->clear(); clearFields(); QVariant variant = comboScope->itemData( index ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); if ( m_projectManager->toKey( item->data(0, Qt::UserRole) ) != "PROJECT" ) projectTemplate->setDisabled( true ); else projectTemplate->setDisabled( false ); parse( item ); QList listeScope; for (int nbScope=0; nbScope < item->childCount(); nbScope++) { QTreeWidgetItem *it = item->child( nbScope ); QString cle = m_projectManager->toKey( it->data(0, Qt::UserRole) ); QString donnee = it->text( 0 ); if ( !QString("CONFIG|FORMS|HEADERS|QT|RESOURCES|SOURCES|TRANSLATIONS|TEMPLATE|SCOPE|SUBDIRS|absoluteNameProjectFile|projectDirectory|subProjectName|qmake|srcDirectory|uiDirectory").contains( cle ) ) { variablesList->addItem( cle ); //variablesList->item( variablesList->count()-1 )->setData(Qt::UserRole, QVariant(reinterpret_cast(it) ) ); variablesList->item( variablesList->count()-1 )->setData(Qt::UserRole, addressToVariant(it) ); } } if ( variablesList->count() ) slotCurrentItemChanged( variablesList->item( 0 ), 0); connections(); if ( m_projectManager->toKey( item->data(0, Qt::UserRole) ) != "PROJECT" ) projectTemplate->setDisabled( true ); else projectTemplate->setDisabled( false ); } // void ProjectPropertieImpl::parse(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString cle = m_projectManager->toKey( item->data(0, Qt::UserRole) ); if ( cle == "TEMPLATE" ) parseTemplate(item); else if ( cle == "QT" ) parseQT(item); else if ( cle == "CONFIG" ) parseConfig(item); //else if( cle == "SCOPE" ) //analyseScope(it); } } // void ProjectPropertieImpl::parseConfig(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemConfig = it->child( i ); QString donnee = itemConfig->text(0); if ( donnee == "debug" ) debug->setChecked(true); else if ( donnee == "release" ) release->setChecked(true); else if ( donnee == "debug_and_release" ) debug_and_release->setChecked(true); else if ( donnee == "build_all" ) build_all->setChecked(true); else if ( donnee == "warn_on" ) warn_on->setChecked(true); else if ( donnee == "warn_off" ) warn_off->setChecked(true); else if ( donnee == "app_bundle" ) app_bundle->setChecked(true); else if ( donnee == "assistant" ) assistant->setChecked(true); else if ( donnee == "console" ) console->setChecked(true); else if ( donnee == "designer" ) designer->setChecked(true); else if ( donnee == "dll" ) dll->setChecked(true); else if ( donnee == "exceptions" ) exceptions->setChecked(true); else if ( donnee == "lib_bundle" ) lib_bundle->setChecked(true); else if ( donnee == "link_pkgconfig" ) link_pkgconfig->setChecked(true); else if ( donnee == "no_lflags_merge" ) no_lflags_merge->setChecked(true); else if ( donnee == "opengl" ) opengl->setChecked(true); else if ( donnee == "plugin" ) plugin->setChecked(true); else if ( donnee == "ppc" ) ppc->setChecked(true); else if ( donnee == "qaxcontainer" ) qaxcontainer->setChecked(true); else if ( donnee == "qaxserver" )qaxserver->setChecked(true); else if ( donnee == "qt" ) qt->setChecked(true); else if ( donnee == "qtestlib" ) qtestlib->setChecked(true); else if ( donnee == "resources" )resources->setChecked(true); else if ( donnee == "rtti" ) rtti->setChecked(true); else if ( donnee == "staticlib" ) staticlib->setChecked(true); else if ( donnee == "stl" ) stl->setChecked(true); else if ( donnee == "thread" ) Thread->setChecked(true); else if ( donnee == "uic3" ) uic3->setChecked(true); else if ( donnee == "uitools" ) uitools->setChecked(true); else if ( donnee == "windows" ) windows->setChecked(true); else if ( donnee == "x11" ) x11->setChecked(true); else if ( donnee == "x86" ) x86->setChecked(true); else { supplement->setText( supplement->text() + " "+ donnee ); delete itemConfig; } } supplement->setText( supplement->text().simplified() ); } // void ProjectPropertieImpl::parseQT(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemConfig = it->child( i ); QString donnee = itemConfig->text(0); if ( donnee == "core" ) core->setChecked(true); if ( donnee == "network" ) network->setChecked(true); if ( donnee == "sql" ) sql->setChecked(true); if ( donnee == "xml" ) xml->setChecked(true); if ( donnee == "gui" ) gui->setChecked(true); if ( donnee == "opengl" ) libopengl->setChecked(true); if ( donnee == "svg" ) svg->setChecked(true); if ( donnee == "qt3support" ) qt3support->setChecked(true); if ( donnee == "webkit" ) webkit->setChecked(true); if ( donnee == "phonon" ) phonon->setChecked(true); if ( donnee == "xmlpatterns" ) xmlpatterns->setChecked(true); if ( donnee == "script" ) script->setChecked(true); } } // void ProjectPropertieImpl::parseTemplate(QTreeWidgetItem *it) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itemTemplate = it->child( i ); QString donnee = itemTemplate->text(0); if ( donnee == "app" ) { app->setChecked( true ); subdirs->setDisabled( true ); } else if ( donnee == "lib" ) { lib->setChecked( true ); subdirs->setDisabled( true ); } else if ( donnee == "subdirs" ) { subdirs->setChecked( true ); lib->setDisabled (true ); app->setDisabled (true ); slotSubdirs( true ); } } } // void ProjectPropertieImpl::populateComboScope() { //comboScope->addItem(m_copyItProject->text(0) , QVariant(reinterpret_cast(m_copyItProject))); comboScope->addItem(m_copyItProject->text(0) , addressToVariant(m_copyItProject)); QString projectName = m_projectManager->projectFilename( m_copyItProject ); QList listeScope; m_projectManager->childsList(m_copyItProject, "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString scopeName; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbEspace = 0; while ( tmp ) { QString cleTmp = m_projectManager->toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + scopeName.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbEspace++; } if ( m_projectManager->projectFilename( listeScope.at(nbScope) ) == projectName ) comboScope->addItem( scopeName, addressToVariant(listeScope.at(nbScope))); //comboScope->addItem( scopeName, QVariant(reinterpret_cast(listeScope.at(nbScope)))); } if ( comboScope->count() == 1 ) comboScope->setDisabled( true ); if ( comboScope->count() ) { comboScope->setCurrentIndex( 0 ); slotComboScope( 0 ); } } // void ProjectPropertieImpl::slotSubdirs(bool coche) { tabConfig->setEnabled(!coche); } // // void ProjectPropertieImpl::makeComboVariables( QComboBox *combo ) { combo->addItem("DEFINES: qmake adds the values of this variable as compiler C preprocessor macros (-D option).", QVariant( QString("DEFINES") ) ); combo->addItem("DEF_FILE: This is only used on Windows when using the app template.", QVariant( QString("DEF_FILE") ) ); combo->addItem("DEPENDPATH: This variable contains the list of all directories to look in to resolve dependencies. This will be used when crawling through included files. ", QVariant( QString("DEPENDPATH") ) ); combo->addItem("DESTDIR: Specifies where to put the target file.", QVariant( QString("DESTDIR") ) ); combo->addItem("DLLDESTDIR: Specifies where to copy the target dll. ", QVariant( QString("DLLDESTDIR") ) ); combo->addItem("DISTFILES: This variable contains a list of files to be included in the dist target.", QVariant( QString("DISTFILES") ) ); combo->addItem("INCLUDEPATH: This variable specifies the #include directories which should be searched when compiling the project.", QVariant( QString("INCLUDEPATH") ) ); combo->addItem("INSTALLS: This variable contains a list of resources that will be installed when make install is executed.", QVariant( QString("INSTALLS") ) ); combo->addItem("LEXSOURCES: This variable contains a list of lex source files.", QVariant( QString("LEXSOURCES") ) ); combo->addItem("LIBS: This variable contains a list of libraries to be linked into the project.", QVariant( QString("LIBS") ) ); combo->addItem("MAKEFILE: This variable specifies the name of the Makefile which qmake should use when outputting the dependency information for building a project.", QVariant( QString("MAKEFILE") ) ); combo->addItem("MOC_DIR: This variable specifies the directory where all intermediate moc files should be placed.", QVariant( QString("MOC_DIR") ) ); combo->addItem("OBJECTS_DIR: This variable specifies the directory where all intermediate objects should be placed.", QVariant( QString("OBJECTS_DIR") ) ); combo->addItem("QTPLUGIN: This variable contains a list of names of static plugins that are to be compiled with an application so that they are available as built-in resources. ", QVariant( QString("QTPLUGIN") ) ); combo->addItem("RCC_DIR: This variable specifies the directory where all intermediate resource files should be placed.", QVariant( QString("RCC_DIR") ) ); combo->addItem("TARGET: This specifies the name of the target file.", QVariant( QString("TARGET") ) ); combo->addItem("UI_DIR: This variable specifies the directory where all intermediate files from uic should be placed.", QVariant( QString("UI_DIR") ) ); combo->addItem("UI_HEADERS_DIR: This variable specifies the directory where all declaration files (as generated by uic) should be placed.", QVariant( QString("UI_HEADERS_DIR") ) ); combo->addItem("UI_SOURCES_DIR: This variable specifies the directory where all implementation files (as generated by uic) should be placed.", QVariant( QString("UI_SOURCES_DIR") ) ); combo->addItem("VERSION: This variable contains the version number of the library if the lib TEMPLATE is specified.", QVariant( QString("VERSION") ) ); combo->addItem("VER_MAJ: This variable contains the major version number of the library, if the lib template is specified. ", QVariant( QString("VER_MAJ") ) ); combo->addItem("VER_MIN: This variable contains the minor version number of the library, if the lib template is specified. ", QVariant( QString("VER_MIN") ) ); combo->addItem("VER_PAT: This variable tells qmake where to search for files it cannot open.", QVariant( QString("VER_PAT") ) ); } // void ProjectPropertieImpl::slotSrcDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the sources location"), srcDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { return; } srcDirectory->setText( s ); } // void ProjectPropertieImpl::slotUiDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the dialogs location"), uiDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { return; } uiDirectory->setText( s ); } // qdevelop-v0.28/src/.svn/text-base/addnewclassvariableimpl.cpp.svn-base0000444000175000017500000002032211362261066025074 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassvariableimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include // AddNewClassVariableImpl::AddNewClassVariableImpl( MainImpl * parent, TreeClasses *treeClasses, QTreeWidgetItem *treeWidget, QString declaration, QString implementation, QString classname) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_treeWidget(treeWidget), m_declaration(declaration), m_implementation(implementation), m_classname(classname) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private"); type->addItems(QStringList() << "bool" << "char" << "short" << "long" << "int" << "signed" << "unsigned " << "float" << "double" << "QString" << "void" ); } // void AddNewClassVariableImpl::on_okButton_clicked() { if ( get->isChecked() && getName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The get method name is empty", tr("Cancel") ); return; } if ( set->isChecked() && setName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The set method name is empty", tr("Cancel") ); return; } QString l_variableName = variableName->text(); QString l_type = type->currentText(); QString l_scope = scope->currentText(); for (int i=0; ichildCount(); i++) { ParsedItem parsedItem = m_treeWidget->child( i )->data(0, Qt::UserRole).value(); if ( parsedItem.name == l_variableName ) { QMessageBox::warning(this, "QDevelop", tr("%1 already exists in class %2.").arg(l_variableName, m_classname), tr("Cancel") ); return; } } // Add in declaration file or editor // The file is perhaps already opened. Find filename in tabs. QString insertedText = "\t" + l_type + " " + l_variableName + ";"; insertInDeclaration(l_scope, insertedText); //insertedText += "\t" + l_type + " " + l_variableName + ";"; // Add get/set methods if ( get->isChecked() ) { if ( getInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\t" + l_type + " " + getName->text() + "() { return " + l_variableName + "; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\t" + l_type + " " + getName->text() + "();"; insertInDeclaration("public", insertedText); insertedText = l_type + " " + m_classname+"::" + getName->text() + "()\n{\n\treturn " + l_variableName + ";\n}\n"; insertInImplementation(insertedText); } } if ( set->isChecked() ) { if ( setInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\tvoid " + setName->text() + "("+l_type+" value) { " + l_variableName + " = value; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\tvoid " + setName->text() + "("+l_type+" value);"; insertInDeclaration("public", insertedText); insertedText = "void " + m_classname+"::"+setName->text() + "("+l_type+" value)\n{\n\t" + l_variableName + " = value;\n}\n"; insertInImplementation(insertedText); } } accept(); } // void AddNewClassVariableImpl::insertInDeclaration(QString scope, QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, afterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(afterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } // void AddNewClassVariableImpl::insertInImplementation(QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, get content from file QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } void AddNewClassVariableImpl::on_variableName_textChanged(QString ) { setName->setText( "set"+variableName->text().toUpper().left(1)+variableName->text().mid(1) ); getName->setText( "get"+variableName->text().toUpper().left(1)+variableName->text().mid(1) ); } qdevelop-v0.28/src/.svn/text-base/tabwidget.h.svn-base0000444000175000017500000000334111362261066021635 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TABWIDGET_H #define TABWIDGET_H #include // class MainImpl; class QToolButton; // class TabWidget : public QTabWidget { Q_OBJECT public: TabWidget(MainImpl *parent); virtual ~TabWidget(); void setCloseButtonInTabs(bool b); protected: //void mousePressEvent( QMouseEvent * event ); bool eventFilter(QObject *obj, QEvent *event); void tabInserted ( int index ); private: bool swapTabs(int index1, int index2); int m_clickedItem; MainImpl *m_mainImpl; QToolButton *cross; QPoint mousePos; bool m_closeButtonInTabs; private slots: void slotCloseTab(); void slotCloseOtherTab(); void slotCloseAllTab(); }; #endif // kate: space-indent on; tab-indent off; tab-width 4; indent-width 4; mixedindent off; indent-mode cstyle; // kate: end-of-line: unix qdevelop-v0.28/src/.svn/text-base/optionsimpl.cpp.svn-base0000444000175000017500000003411511362261066022576 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "optionsimpl.h" #include "cpphighlighter.h" #include #include #include #include #include #include #include #include // OptionsImpl::OptionsImpl(QWidget * parent, QFont f, bool num, bool marge, bool ind, bool color, int tab, bool enr, bool res, QTextCharFormat pre, QTextCharFormat qt, QTextCharFormat commSimples, QTextCharFormat commMulti, QTextCharFormat guil, QTextCharFormat meth, QTextCharFormat cles, bool /*autoMask*/, int end, bool spaces, bool complete, QColor back, bool prompt, bool hcl, QColor lc, bool bk, bool comm, bool tc, int in, QString directory, bool m, QColor mc, bool close, QString pd, QString mo, int mi, QString ic, bool editorToolbars, bool whiteSpaces, int rightMargin, QString docDirectory, QColor textCol, bool ac, bool ww, int findReplace, bool sc ) : QDialog(parent) { setupUi(this); QFontDatabase db; comboFont->addItems( db.families() ); comboFont->setCurrentIndex( comboFont->findText( f.family() ) ); fontSize->setValue( f.pointSize() ); numbers->setChecked( num ); selectionBorder->setChecked( marge ); indent->setChecked( ind ); compileAuto->setChecked( ac ); highlight->setChecked( color ); tabStopWidth->setValue( tab ); saveAll->setChecked( enr ); restore->setChecked( res ); endLine->setCurrentIndex( end ); tabSpaces->setChecked( spaces ); completion->setChecked( complete ); promptBeforeQuit->setChecked( prompt ); brackets->setChecked( bk ); // Divius: comments autoclose comments->setChecked( comm ); // showTreeClasses->setChecked( tc ); interval->setValue( in ); interval->setEnabled( tc ); match->setChecked( m ); groupHighlightCurrentLine->setChecked( hcl ); closeButton->setChecked( close ); projectsDirectory->setText( directory ); pluginsDirectory->setText( pd ); includeDirectory->setText( ic ); documentationDirectory->setText( docDirectory ); makeOptions->setText( mo ); showEditorToolbars->setChecked( editorToolbars ); displayWhiteSpaces->setChecked( whiteSpaces ); rightMarginLine->setChecked( rightMargin > 0 ); rightMarginPos->setValue( rightMargin > 0 ? rightMargin : 80 ); wordwrap->setChecked( ww ); hideFindReplace->setChecked( findReplace > 0 ); findReplaceDelay->setValue( findReplace > 0 ? findReplace : 10 ); smartClick->setChecked( sc ); // QPixmap pix(25, 25); pix.fill( pre.foreground().color() ); preprocessor->setIcon( pix ); pix.fill( qt.foreground().color() ); qtWords->setIcon( pix ); pix.fill( commSimples.foreground().color() ); singleComment->setIcon( pix ); pix.fill( commMulti.foreground().color() ); multilinesComment->setIcon( pix ); pix.fill( guil.foreground().color() ); quotation->setIcon( pix ); pix.fill( meth.foreground().color() ); methods->setIcon( pix ); pix.fill( cles.foreground().color() ); keywords->setIcon( pix ); pix.fill( back ); background->setIcon( pix ); m_backgroundColor = back; pix.fill( textCol ); text->setIcon( pix ); m_textColor = textCol; pix.fill( mc ); matching->setIcon( pix ); m_matchingColor = mc; pix.fill( lc ); lineColor->setIcon( pix ); m_colorCurrentLine = lc; // cppHighLighter = new CppHighlighter( 0 ); cppHighLighter->setPreprocessorFormat( pre ); cppHighLighter->setClassFormat( qt ); cppHighLighter->setSingleLineCommentFormat( commSimples ); cppHighLighter->setMultiLineCommentFormat( commMulti ); cppHighLighter->setQuotationFormat( guil ); cppHighLighter->setFunctionFormat( meth ); cppHighLighter->setKeywordFormat( cles ); cppHighLighter->setDocument( textEdit->document() ); QPalette p = textEdit->palette(); p.setColor(QPalette::Base, m_backgroundColor); p.setColor( QPalette::Text, m_textColor); textEdit->setPalette(p); // connect(preprocessor, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(qtWords, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(singleComment, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(multilinesComment, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(quotation, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(methods, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(keywords, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(background, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(text, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(lineColor, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect(matching, SIGNAL(clicked()), this, SLOT(slotChangeColor())); connect((QObject *)buttonBox->button(QDialogButtonBox::RestoreDefaults), SIGNAL(clicked()), this, SLOT(slotDefault())); // I don't know why the cast to QObject * is necessary, but gcc doesn't compile without it connect(chooseProjectsDirectory, SIGNAL(clicked()), this, SLOT(slotChooseProjectsDirectory())); connect(choosePluginsDirectory, SIGNAL(clicked()), this, SLOT(slotChoosePluginsDirectory())); connect(chooseIncludeDirectory, SIGNAL(clicked()), this, SLOT(slotChooseIncludeDirectory())); connect(chooseDocumentationDirectory, SIGNAL(clicked()), this, SLOT(slotChooseDocumentationDirectory())); textEdit->setPlainText( textEdit->toPlainText() ); findCodecs(); setCodecList(codecs, mi); } // QFont OptionsImpl::font() { return QFont(comboFont->currentText(), fontSize->value() ); } // QColor OptionsImpl::backgroundColor() { return m_backgroundColor; } // QColor OptionsImpl::textColor() { return m_textColor; } // QColor OptionsImpl::currentLineColor() { return m_colorCurrentLine; } // QColor OptionsImpl::matchingColor() { return m_matchingColor; } // void OptionsImpl::slotChangeColor() { QTextCharFormat format; QToolButton *button = (QToolButton*)sender(); QColor color; if( button == preprocessor ) color = cppHighLighter->preprocessorFormat().foreground().color(); else if( button == qtWords ) color = cppHighLighter->classFormat().foreground().color(); else if( button == singleComment ) color = cppHighLighter->singleLineCommentFormat().foreground().color(); else if( button == multilinesComment ) color = cppHighLighter->multiLineCommentFormat().foreground().color(); else if( button == quotation ) color = cppHighLighter->quotationFormat().foreground().color(); else if( button == methods ) color = cppHighLighter->functionFormat().foreground().color(); else if( button == keywords ) color = cppHighLighter->keywordFormat().foreground().color(); else if( button == background ) color = m_backgroundColor; else if( button == text ) color = m_textColor; else if( button == lineColor ) color = m_colorCurrentLine; else if( button == matching ) color = m_matchingColor; color = QColorDialog::getColor(color); if( color.isValid() ) { QPixmap pix(25, 25); pix.fill( color ); button->setIcon( pix ); format.setForeground(color); if( button == preprocessor ) cppHighLighter->setPreprocessorFormat( format ); else if( button == qtWords ) cppHighLighter->setClassFormat( format ); else if( button == singleComment ) cppHighLighter->setSingleLineCommentFormat( format ); else if( button == multilinesComment ) cppHighLighter->setMultiLineCommentFormat( format ); else if( button == quotation ) cppHighLighter->setQuotationFormat( format ); else if( button == methods ) cppHighLighter->setFunctionFormat( format ); else if( button == keywords ) cppHighLighter->setKeywordFormat( format ); else if( button == background ) m_backgroundColor = color; else if( button == text ) m_textColor = color; else if( button == lineColor ) m_colorCurrentLine = color; else if( button == matching ) m_matchingColor = color; cppHighLighter->setDocument( textEdit->document() ); QPalette p = textEdit->palette(); p.setColor(QPalette::Base, m_backgroundColor); p.setColor( QPalette::Text, m_textColor); textEdit->setPalette(p); } } // void OptionsImpl::slotDefault() { QPixmap pix(25, 25); QTextCharFormat format; // pix.fill( Qt::blue ); format.setForeground( Qt::blue ); preprocessor->setIcon( pix ); cppHighLighter->setPreprocessorFormat( format ); // qtWords->setIcon( pix ); cppHighLighter->setClassFormat( format ); // pix.fill( Qt::red ); format.setForeground( Qt::red ); singleComment->setIcon( pix ); cppHighLighter->setSingleLineCommentFormat( format ); // multilinesComment->setIcon( pix ); cppHighLighter->setMultiLineCommentFormat( format ); // pix.fill( Qt::darkGreen ); format.setForeground( Qt::darkGreen ); quotation->setIcon( pix ); cppHighLighter->setQuotationFormat( format ); // pix.fill( Qt::black ); format.setForeground( Qt::black ); methods->setIcon( pix ); cppHighLighter->setFunctionFormat( format ); // pix.fill( Qt::blue ); format.setForeground( Qt::blue ); keywords->setIcon( pix ); cppHighLighter->setKeywordFormat( format ); // cppHighLighter->setDocument( textEdit->document() ); // pix.fill( Qt::white ); m_backgroundColor = Qt::white; background->setIcon( pix ); // pix.fill( Qt::black ); m_textColor = Qt::black; text->setIcon( pix ); // pix.fill( Qt::red ); m_matchingColor = Qt::red; matching->setIcon( pix ); // pix.fill( QColor(215,252,255) ); m_colorCurrentLine = QColor(215,252,255); lineColor->setIcon( pix ); // saveAll->setChecked( true ); restore->setChecked( true ); promptBeforeQuit->setChecked( false ); groupHighlightCurrentLine->setChecked( true ); //lineColor->setEnabled( true ); compileAuto->setChecked( false ); numbers->setChecked( true ); selectionBorder->setChecked( true ); completion->setChecked( true ); indent->setChecked( true ); brackets->setChecked( true ); // Divius: comments autoclose comments->setChecked( true ); // highlight->setChecked( true ); match->setChecked( true ); projectsDirectory->setText( QDir::homePath() ); pluginsDirectory->setText( "" ); includeDirectory->setText( QLibraryInfo::location( QLibraryInfo::HeadersPath ) ); documentationDirectory->setText( QLibraryInfo::location( QLibraryInfo::DocumentationPath ) ); makeOptions->setText( "" ); tabStopWidth->setValue( 4 ); tabSpaces->setChecked( false ); wordwrap->setChecked( false ); hideFindReplace->setChecked( true ); findReplaceDelay->setValue( 10 ); smartClick->setChecked( true ); #ifdef WIN32 comboFont->setCurrentIndex( comboFont->findText( "Courier New" ) ); #else comboFont->setCurrentIndex( comboFont->findText( "Monospace" ) ); #endif fontSize->setValue( 10 ); closeButton->setChecked( false ); setCodecList( codecs, 106 ); // UTF-8 by default endLine->setCurrentIndex( 0 ); interval->setValue( 5 ); showTreeClasses->setChecked( true ); showEditorToolbars->setChecked( true ); displayWhiteSpaces->setChecked( true ); rightMarginLine->setChecked( true ); rightMarginPos->setValue( 80 ); } // void OptionsImpl::slotChooseProjectsDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } projectsDirectory->setText( s ); } // void OptionsImpl::slotChoosePluginsDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), pluginsDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } pluginsDirectory->setText( s ); } // void OptionsImpl::slotChooseIncludeDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), includeDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } includeDirectory->setText( s ); } // void OptionsImpl::slotChooseDocumentationDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), documentationDirectory->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } documentationDirectory->setText( s ); } // void OptionsImpl::findCodecs() { QMap codecMap; QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*"); foreach (int mib, QTextCodec::availableMibs()) { QTextCodec *codec = QTextCodec::codecForMib(mib); QString sortKey = codec->name().toUpper(); int rank; if (sortKey.startsWith("UTF-8")) { rank = 1; } else if (sortKey.startsWith("UTF-16")) { rank = 2; } else if (iso8859RegExp.exactMatch(sortKey)) { if (iso8859RegExp.cap(1).size() == 1) rank = 3; else rank = 4; } else { rank = 5; } sortKey.prepend(QChar('0' + rank)); codecMap.insert(sortKey, codec); } codecs = codecMap.values(); } void OptionsImpl::setCodecList(const QList &list, int m) { encodingComboBox->clear(); foreach (QTextCodec *codec, list) { encodingComboBox->addItem(codec->name(), codec->mibEnum()); if( codec->mibEnum() == m ) encodingComboBox->setCurrentIndex( encodingComboBox->count()-1 ); } } // int OptionsImpl::mib() { return encodingComboBox->itemData( encodingComboBox->currentIndex() ).toInt(); } qdevelop-v0.28/src/.svn/text-base/treeclasses.cpp.svn-base0000444000175000017500000010370211362261066022535 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "treeclasses.h" #include "projectmanager.h" #include "mainimpl.h" #include "misc.h" #include "ui_addnewclassvariable.h" #include "addnewclassmethodimpl.h" #include "addnewclassvariableimpl.h" #include "addsetgetimpl.h" #include #include #include #include #include #include #include #include #include #include #include // TreeClasses::TreeClasses(QWidget * parent) : QTreeWidget(parent) { header()->hide(); m_treeClassesItems = new QList(); } // TreeClasses::~TreeClasses() { delete m_treeClassesItems; } // void TreeClasses::clear() { QTreeWidget::clear(); } // void TreeClasses::updateClasses(QString filename, QString buffer, QStringList parents, QString ext) { if ( !m_ctagsPresent || !QFile::exists(m_ctagsName) ) return; while ( tempProcessMap.count() > 10 ) qApp->processEvents(); QProcess *process = new QProcess(); connect(process, SIGNAL(finished(int , QProcess::ExitStatus)), this, SLOT(slotParseCtags()) ); tempProcessMap[process].ext = ext; tempProcessMap[process].numTempFile = 0; tempProcessMap[process].filename = filename; QString f; do { tempProcessMap[process].numTempFile++; f = QDir::tempPath()+"/qdevelop_"+QString::number(tempProcessMap[process].numTempFile)+ext; } while ( QFile::exists( f ) ); QFile tempFileRead( QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+ext ); if (!tempFileRead.open(QIODevice::WriteOnly | QIODevice::Text)) return; tempFileRead.write( buffer.toLocal8Bit() ); tempProcessMap[process].parents = parents; tempFileRead.close(); // process->start(m_ctagsName, QStringList()<<"-f " + QDir::tempPath()+"/qdevelop_ctags"+ext+"."+QString::number(tempProcessMap[process].numTempFile) << "--fields=+z+k+a+S+l+n" << "--c++-kinds=+p"<< QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+tempProcessMap[process].ext); // } // void TreeClasses::slotParseCtags() { QProcess *process = ((QProcess*)sender()); process->waitForFinished( -1 ); QString read; QFile file( QDir::tempPath()+"/qdevelop_ctags"+tempProcessMap[process].ext+"."+QString::number(tempProcessMap[process].numTempFile) ); if ( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) return; read = file.readAll(); file.close(); // QString filenameRead = QDir::tempPath()+"/qdevelop_"+QString::number( tempProcessMap[process].numTempFile )+tempProcessMap[process].ext; if ( !QFile( filenameRead ).remove() ) qDebug()<<"Unable to remove"<deleteLater(); QDir dir(filename); dir.makeAbsolute(); QString absolutePath = dir.path(); QString pathHash = getPathHash(absolutePath); if ( read.isEmpty() ) return; if ( topLevelItem(0) ) { setSortingSymbols(topLevelItem(0), true, filename, ext, parents); } foreach(QString s, read.split("\n", QString::SkipEmptyParts) ) { if ( !s.isEmpty() && s.simplified().at(0) == '!' ) continue; //if( s.contains("typeref:") ) //continue; s += '\t'; s.replace("__anon", pathHash); ParsedItem parsedItem; parsedItem.parents = parents; parsedItem.markedForDelete = false; parsedItem.name = s.section("\t", 0, 0).simplified(); //parsedItem.ex_cmd = s.section("/^", -1, -1).section("$/", 0, 0).simplified(); QString ex_cmd = s.section("/^", -1, -1).section("\"", 0, 0).simplified(); parsedItem.ex_cmd = ex_cmd; QString numline = s.section("line:", -1, -1).section("\t", 0, 0).simplified(); if ( ext == QString(".cpp") ) parsedItem.implementation = filename + "|" + numline; else parsedItem.declaration = filename + "|" + numline; parsedItem.language = s.section("language:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("class:") ) parsedItem.classname = s.section("class:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("struct:") ) parsedItem.structname = s.section("struct:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("namespace:") ) parsedItem.structname = s.section("namespace:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("enum:") ) parsedItem.enumname = s.section("enum:", -1, -1).section("\t", 0, 0).simplified(); if ( s.contains("access:") ) parsedItem.access = s.section("access:", -1, -1).section("\t", 0, 0).simplified(); parsedItem.signature = s.section("signature:", -1, -1).section("\t", 0, 0).simplified(); parsedItem.kind = s.section("kind:", -1, -1).section("\t", 0, 0).simplified(); //m_parsedItemsList.append( parsedItem ); parse(parsedItem); } //m_parsedItemsList.clear(); if ( topLevelItem(0) ) { m_listDeletion.clear(); deleteMarked( topLevelItem(0) ); for (int i=0; iclear(); setSortingSymbols(topLevelItem(0), false, QString(), QString(), QStringList()); } } // void TreeClasses::parse(ParsedItem parsedItem) { // Begin parsing if ( parsedItem.name.simplified().isEmpty() ) return; QTreeWidgetItem *itemParent = topLevelItem(0); int level = 0; foreach(QString s, parsedItem.parents) { itemParent = findAndCreate(itemParent, "", s, "parent:"+QString::number(level++)+":"+s, false, false, ParsedItem()); } if ( parsedItem.classname.count() || parsedItem.structname.count() || parsedItem.enumname.count() ) { QString text; QString pixname; if ( parsedItem.classname.count() ) { text = parsedItem.classname; pixname = "class"; } else if ( parsedItem.structname.count() ) { text = parsedItem.structname; pixname = "struct"; } else if ( parsedItem.enumname.count() ) { text = parsedItem.enumname; pixname = "enum"; } foreach(QString classname, text.split("::", QString::SkipEmptyParts) ) { //itemParent = findAndCreate(itemParent, QString(), parsedItem.classname, "class:"+classname, true, false, ParsedItem()); itemParent = findAndCreate(itemParent, pixname, classname, "class:"+classname, true, false, ParsedItem()); } } if ( parsedItem.kind == "c" ) // class { findAndCreate(itemParent, "class", parsedItem.name, "class:"+parsedItem.name, true, true, parsedItem); } else if ( parsedItem.kind == "p" ) // function prototype in declaration (header) { QString pixname; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_meth"; findAndCreate(itemParent, pixname, parsedItem.name+parsedItem.signature, "function:"+parsedItem.name+signature(parsedItem.signature), false, true, parsedItem); } else if ( parsedItem.kind == "f" ) // function in implementation (sources) { QString pixname; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_meth"; else if ( parsedItem.classname.isEmpty() ) pixname = "global_meth"; findAndCreate(itemParent, pixname, parsedItem.name+parsedItem.signature, "function:"+parsedItem.name+signature(parsedItem.signature), false, true, parsedItem); } else if ( parsedItem.kind == "m" ) // member { findAndCreate(itemParent, parsedItem.access+"_var", parsedItem.name, "variable:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "v" ) // variable { QString pixname; if ( parsedItem.classname.isEmpty() ) pixname = "global_var"; findAndCreate(itemParent, pixname, parsedItem.name, "variable:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "s" ) // struct { QString pixname; pixname = "struct"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "g" ) // enum name { QString pixname; pixname = "public_enum"; if ( !parsedItem.access.isEmpty() ) pixname = parsedItem.access+"_enum"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "e" ) // enum value { QString pixname; if ( parsedItem.classname.isEmpty() ) pixname = "public_var"; findAndCreate(itemParent, pixname, parsedItem.name, "enum:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "t" ) // typedef { QString pixname; pixname = "typedef"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } else if ( parsedItem.kind == "n" ) // namespace { QString pixname; pixname = "namespace"; findAndCreate(itemParent, pixname, parsedItem.name, "class:"+parsedItem.name, false, true, parsedItem); } // End parsing } // void TreeClasses::setSortingSymbols(QTreeWidgetItem *it, bool active, QString filename, QString ext, QStringList parents) { ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); m_treeClassesItems->append( parsedItem ); if ( active ) { it->setText(0, markForSorting(parsedItem.kind, it->text(0)) ); markForDeletion(it, filename, ext, parents); } else { it->setText(0, it->text(0).section('|', -1, -1) ); if ( parsedItem.markedForDelete || it->text(0).simplified().isEmpty() ) { //delete current; m_listDeletion.append( it ); return; } } for (int i=0; ichildCount(); i++) { setSortingSymbols( it->child( i ), active, filename, ext, parents); } } // void TreeClasses::markForDeletion(QTreeWidgetItem *current, QString filename, QString ext, QStringList parents ) { ParsedItem parsedItem = current->data(0, Qt::UserRole).value(); parsedItem.markedForDelete = false; if ( ext==".cpp" && parsedItem.implementation.section("|", 0, 0) == filename && parsedItem.parents == parents) { if ( !parsedItem.declaration.toLower().endsWith(".h") ) { parsedItem.markedForDelete = true; } parsedItem.implementation = ""; } else if ( ext==".h" && parsedItem.declaration.section("|", 0, 0) == filename && parsedItem.parents == parents ) { if ( !parsedItem.implementation.toLower().endsWith(".cpp") ) { parsedItem.markedForDelete = true; } parsedItem.declaration = ""; } else parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); current->setData(0, Qt::UserRole, v ); } // void TreeClasses::deleteMarked(QTreeWidgetItem *current) { ParsedItem parsedItem = current->data(0, Qt::UserRole).value(); if ( parsedItem.markedForDelete ) { //delete current; m_listDeletion.append( current ); //emit modifiedClasse( parsedItem.classname ); return; } for (int i=0; ichildCount(); i++) { deleteMarked( current->child( i )); } return; } // // QTreeWidgetItem *TreeClasses::findAndCreate(QTreeWidgetItem *begin, QString pixname, QString text, QString key, bool recursive, bool update, ParsedItem parsedItem) { QTreeWidgetItem *newItem = findItem(begin, text, key, recursive); if ( !newItem ) { //emit modifiedClasse( parsedItem.classname ); if ( begin ) newItem = new QTreeWidgetItem( begin ); else newItem = new QTreeWidgetItem( this ); parsedItem.key = key; parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); text = markForSorting(parsedItem.kind, text); newItem->setText(0, text); setTooltip(newItem, parsedItem); newItem->setData(0, Qt::UserRole, v ); if ( !pixname.isEmpty() ) { newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png")); parsedItem.icon = ":/CV/images/CV"+pixname+".png"; } } if ( update ) { ParsedItem oldParsedItem = newItem->data(0, Qt::UserRole).value(); if ( parsedItem.declaration.isEmpty() && !oldParsedItem.declaration.isEmpty() ) parsedItem.declaration = oldParsedItem.declaration; if ( parsedItem.implementation.isEmpty() && !oldParsedItem.implementation.isEmpty() ) parsedItem.implementation = oldParsedItem.implementation; if ( parsedItem.access.isEmpty() && !oldParsedItem.access.isEmpty() ) parsedItem.access = oldParsedItem.access; parsedItem.icon = oldParsedItem.icon; text = markForSorting(parsedItem.kind, text); setTooltip(newItem, parsedItem); newItem->setText(0, text); parsedItem.key = key; if ( !pixname.isEmpty() ) { newItem->setIcon(0, QIcon(":/CV/images/CV"+pixname+".png")); parsedItem.icon = ":/CV/images/CV"+pixname+".png"; } parsedItem.markedForDelete = false; QVariant v; v.setValue( parsedItem ); newItem->setData(0, Qt::UserRole, v ); } return newItem; } // void TreeClasses::setTooltip(QTreeWidgetItem *item, ParsedItem parsedItem) { if ( parsedItem.key.indexOf( "parent:" ) != 0 ) { QString ex_cmd = parsedItem.ex_cmd; //if( parsedItem.kind == "p" || parsedItem.kind == "f" || parsedItem.kind == "c" ) //{ ex_cmd = ex_cmd.section(";", 0, 0).simplified(); ex_cmd = ex_cmd.section("$", 0, 0).simplified(); ex_cmd = ex_cmd.section("{", 0, 0).simplified(); //} //else //ex_cmd = ex_cmd.section(";", 0, 0).simplified(); QString tooltip; if ( !parsedItem.access.isEmpty() ) tooltip = '['+parsedItem.access+']'+" "; tooltip += ex_cmd; item->setToolTip(0, tooltip); } } // QString TreeClasses::markForSorting(QString kind, QString text ) { if ( text.contains( '|' ) ) text = text.section('|', -1, -1); if ( kind == "c" ) text = "A|"+text; else if ( kind == "f" || kind == "p" ) text = "B|"+text; else if ( kind == "s" ) text = "C|"+text; else if ( kind == "g" ) text = "D|"+text; else if ( kind == "t" ) text = "E|"+text; else if ( kind == "m" || kind == "v" || kind == "e" ) text = "F|"+text; return text; } // QTreeWidgetItem *TreeClasses::findItem(const QTreeWidgetItem *begin, const QString text, const QString key, const bool recursive) { QTreeWidgetItem *newItem = 0; QTreeWidgetItem *it = (QTreeWidgetItem *)begin; if ( it == 0 ) it = topLevelItem( 0 ); if ( it ) { ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); if ( parsedItem.key == key ) { return it; } else { for (int i=0; ichildCount(); i++) { ParsedItem parsedItem = it->child( i )->data(0, Qt::UserRole).value(); if ( parsedItem.key == key ) return it->child( i ); else if ( recursive ) newItem = findItem(it->child( i ), text, key, recursive); } } } return newItem; } // void TreeClasses::mousePressEvent( QMouseEvent * event ) { m_itemClicked = itemAt( event->pos() ); if ( event->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); if ( m_itemClicked ) { setCurrentItem( m_itemClicked ); ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); if ( parsedItem.key.left(10) != "parent:" ) { if ( !parsedItem.declaration.isEmpty() ) connect(menu->addAction(QIcon(":/treeview/images/h.png"), tr("Open Declaration")), SIGNAL(triggered()), this, SLOT(slotOpenDeclaration()) ); if ( !parsedItem.implementation.isEmpty() ) connect(menu->addAction(QIcon(":/treeview/images/cpp.png"), tr("Open Implementation")), SIGNAL(triggered()), this, SLOT(slotOpenImplementation()) ); } if ( parsedItem.kind == "c" ) { connect(menu->addAction(QIcon(""), tr("Add Method...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassMethod()) ); connect(menu->addAction(QIcon(""), tr("Add Variable...")), SIGNAL(triggered()), this, SLOT(slotAddNewClassVariable()) ); } else if ( parsedItem.kind == "m" ) { connect(menu->addAction(QIcon(""), tr("Add get/set Methods...")), SIGNAL(triggered()), this, SLOT(slotAddGetSetMethod()) ); } } else { menu->addSeparator(); } connect(menu->addAction(QIcon(":/toolbar/images/refresh.png"), tr("Refresh contents")), SIGNAL(triggered()), this, SLOT(slotRefresh()) ); menu->exec(event->globalPos()); delete menu; } QTreeWidget::mousePressEvent(event); } // void TreeClasses::slotOpenImplementation() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString s = parsedItem.implementation; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); m_mainImpl->openFile(QStringList(filename) , numLine, false, true); } // void TreeClasses::slotOpenDeclaration() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString s = parsedItem.declaration; QString filename = s.section("|", 0, 0); int numLine = s.section("|", -1, -1).toInt(); m_mainImpl->openFile(QStringList(filename) , numLine, false, true); } // void TreeClasses::slotRefresh() { if ( m_projectManager ) m_projectManager->parseTreeClasses(true); } // void TreeClasses::toDB(QString projectDirectory) { if ( !topLevelItem(0) ) return; QApplication::setOverrideCursor(Qt::WaitCursor); QSqlQuery query( QSqlDatabase::database( projectDirectory + "/" + SETTINGS_FILE_NAME )); QString queryString = "delete from classesbrowser where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from checksums where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } query.exec("BEGIN TRANSACTION;"); writeItemsInDB(topLevelItem(0), QString(), query, projectDirectory); /** Here, for each file, a checksum is computed with his contents then this checksum is saved in database. When the database is reloaded in fromDB() function, the checksum is computed again. If the new checksum and the checksum in database are different, the file was modified between the recording and the reloading (certainly by an external editor). A new parsing for this file is required to populate correctly the classes browser. */ QStringList files; m_projectManager->sources( 0, files ); m_projectManager->headers( 0, files ); foreach(QString filename, files) { QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; QByteArray array( file.readAll() ); if ( !array.count() ) continue; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); queryString = "insert into checksums values("; queryString = queryString + "'" + filename + "', " + "'" + QString::number(check) + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; exit(0); } file.close(); } query.exec("END TRANSACTION;"); QApplication::restoreOverrideCursor(); } // void TreeClasses::writeItemsInDB(const QTreeWidgetItem *it, QString parents, QSqlQuery query, QString projectDirectory) { // ParsedItem parsedItem = it->data(0, Qt::UserRole).value(); QString queryString = "insert into classesbrowser values("; queryString = queryString + "'" + it->text(0).replace("'", "$") + "', " + "'" + it->toolTip(0).replace("'", "$") + "', " + "'" + parsedItem.icon.replace("'", "$") + "', " + "'" + parsedItem.key.replace("'", "$") + "', " + "'" + parents.replace("'", "$") + "', " + "'" + parsedItem.name.replace("'", "$") + "', " + "'" + QDir( projectDirectory ).relativeFilePath( QDir::cleanPath( parsedItem.implementation ) ).replace("'", "$") + "', " + "'" + QDir( projectDirectory ).relativeFilePath( QDir::cleanPath( parsedItem.declaration ) ).replace("'", "$") + "', " + "'" + parsedItem.ex_cmd.replace("'", "$") + "', " + "'" + parsedItem.language.replace("'", "$") + "', " + "'" + parsedItem.classname.replace("'", "$") + "', " + "'" + parsedItem.structname.replace("'", "$") + "', " + "'" + parsedItem.enumname.replace("'", "$") + "', " + "'" + parsedItem.access.replace("'", "$") + "', " + "'" + parsedItem.signature.replace("'", "$") + "', " + "'" + parsedItem.kind.replace("'", "$") + "')"; bool rc = query.exec(queryString); if (rc == false) { qDebug() << "Failed to insert record to db" << query.lastError(); qDebug() << queryString; exit(0); } // for (int i=0; ichildCount(); i++) { writeItemsInDB( it->child( i ), parents+":"+it->text(0), query, projectDirectory); } } // void TreeClasses::fromDB(QString projectDirectory) { m_treeClassesItems->clear(); connectDB(projectDirectory + "/" + SETTINGS_FILE_NAME); QSqlQuery query( QSqlDatabase::database( projectDirectory + "/" + SETTINGS_FILE_NAME )); query.exec("BEGIN TRANSACTION;"); QString queryString = QString() + "select * from classesbrowser where 1"; query.exec(queryString); while (query.next()) { ParsedItem parsedItem; QString text = query.value(0).toString().replace("$", "'"); QString tooltip = query.value(1).toString().replace("$", "'"); parsedItem.icon = query.value(2).toString().replace("$", "'"); parsedItem.key = query.value(3).toString().replace("$", "'"); QString parents = query.value(4).toString().replace("$", "'"); parsedItem.name = query.value(5).toString().replace("$", "'"); parsedItem.implementation = query.value(6).toString().replace("$", "'"); parsedItem.implementation = QDir( projectDirectory ).absoluteFilePath(parsedItem.implementation ); parsedItem.declaration = query.value(7).toString().replace("$", "'"); parsedItem.declaration = QDir( projectDirectory ).absoluteFilePath(parsedItem.declaration ); parsedItem.ex_cmd = query.value(8).toString().replace("$", "'"); parsedItem.language = query.value(9).toString().replace("$", "'"); parsedItem.classname = query.value(10).toString().replace("$", "'"); parsedItem.structname = query.value(11).toString().replace("$", "'"); parsedItem.enumname = query.value(12).toString().replace("$", "'"); parsedItem.access = query.value(13).toString().replace("$", "'"); parsedItem.signature = query.value(14).toString().replace("$", "'"); parsedItem.kind = query.value(15).toString().replace("$", "'"); createItemFromDB(topLevelItem(0), text, tooltip, parents, parsedItem); m_treeClassesItems->append( parsedItem ); } queryString = QString() + "select * from checksums where 1"; query.exec(queryString); while (query.next()) { QString filename = query.value(0).toString(); quint16 checksum = query.value(1).toInt(); QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray array( file.readAll() ); if ( !array.count() ) return; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); if ( check != checksum ) { m_mainImpl->slotUpdateClasses(filename, QString(array)); } file.close(); } query.exec("END TRANSACTION;"); } // // void TreeClasses::createItemFromDB(QTreeWidgetItem *parent, QString text, QString /*tooltip*/, QString parents, ParsedItem parsedItem) { if ( !parent ) { QTreeWidgetItem *it = new QTreeWidgetItem( this ); it->setText(0, text); setTooltip(it, parsedItem); it->setIcon(0, QIcon(parsedItem.icon)); QVariant v; v.setValue( parsedItem ); it->setData(0, Qt::UserRole, v ); setItemExpanded( it, true ); return; } parents = parents.section(":", 2); if ( !parents.isEmpty() ) { foreach( QString p, parents.split(":", QString::SkipEmptyParts) ) { // QTreeWidgetItem *find; for (int i=0; ichildCount(); i++) { if ( parent->child( i )->text( 0 ) == p ) parent = parent->child( i ); } } } QTreeWidgetItem *it = new QTreeWidgetItem( parent ); it->setText(0, text); setTooltip(it, parsedItem); it->setIcon(0, QIcon(parsedItem.icon)); QVariant v; v.setValue( parsedItem ); it->setData(0, Qt::UserRole, v ); } // void TreeClasses::mouseDoubleClickEvent ( QMouseEvent * event ) { m_itemClicked = itemAt( event->pos() ); if ( !m_itemClicked ) return; ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); if ( parsedItem.key.left(10) != "parent:" ) { if ( !parsedItem.implementation.isEmpty() && (parsedItem.kind!="c" || parsedItem.declaration.isEmpty() )) slotOpenImplementation(); else if ( !parsedItem.declaration.isEmpty() ) slotOpenDeclaration(); } else setItemExpanded( m_itemClicked, !isItemExpanded(m_itemClicked) ); } // QString TreeClasses::signature(QString line) { QString params = line.mid( line.indexOf("(")+1 ); params = params.left( params.lastIndexOf(")") ) .simplified(); QString formattedParams; foreach(QString param, params.split(",") ) { param = param.simplified(); if ( param.contains("&") ) param = param.simplified().left( param.simplified().lastIndexOf("&")+1 ); else if ( param.contains("*") ) param = param.simplified().left( param.simplified().lastIndexOf("*")+1 ); else if ( param.simplified().contains(" ") ) param = param.simplified().left( param.simplified().indexOf(" ") ); else if ( param.simplified().contains("=") ) param = param.simplified().left( param.simplified().lastIndexOf("=") ); formattedParams += param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.lastIndexOf(",") ); formattedParams.remove( " " ); QString s ="(" + formattedParams + ")"; return s; } // QString TreeClasses::getPathHash(QString const& pathName) { unsigned intHash = qHash(pathName); return QString().sprintf("_%x_", intHash); } // // void TreeClasses::slotAddNewClassMethod() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString implementation = parsedItem.implementation; QString declaration = parsedItem.declaration; QString classname = parsedItem.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClicked->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } AddNewClassMethodImpl *dialog = new AddNewClassMethodImpl(m_mainImpl, this, implementation, declaration, classname); dialog->exec(); delete dialog; // } // void TreeClasses::slotAddNewClassVariable() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); QString implementation = parsedItem.implementation; QString declaration = parsedItem.declaration; QString classname = parsedItem.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClicked->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } AddNewClassVariableImpl *dialog = new AddNewClassVariableImpl(m_mainImpl, this, m_itemClicked, declaration, implementation, classname); dialog->exec(); delete dialog; // } // void TreeClasses::slotAddGetSetMethod() { ParsedItem parsedItem = m_itemClicked->data(0, Qt::UserRole).value(); ParsedItem parsedItemParent = m_itemClicked->parent()->data(0, Qt::UserRole).value(); QTreeWidgetItem *m_itemClickedParent = m_itemClicked->parent(); QString implementation = parsedItemParent.implementation; QString declaration = parsedItemParent.declaration; QString classname = parsedItemParent.name; if ( !QFileInfo(implementation.section("|", 0, 0)).isFile() ) { for (int i=0; ichildCount(); i++) { ParsedItem childItem = m_itemClickedParent->child( i )->data(0, Qt::UserRole).value(); if ( QFileInfo(childItem.implementation.section("|", 0, 0)).isFile() ) { implementation = childItem.implementation; break; } } } QString type = parsedItem.ex_cmd.left( parsedItem.ex_cmd.lastIndexOf(" ") ); AddSetGetImpl *addSetGetImpl = new AddSetGetImpl(m_mainImpl, this, declaration, implementation, classname, type, parsedItem.name); addSetGetImpl->exec(); delete addSetGetImpl; } // QStringList TreeClasses::methods(QString filename, QString /*classname*/) { QStringList listMethods; const QList *list; list = treeClassesItems(); //foreach( ParsedItem parsedItem, list ) for (int i = 0; i < list->size(); ++i) { ParsedItem parsedItem = list->at( i ); if ( ( parsedItem.kind == "p" || parsedItem.kind == "f" ) && parsedItem.declaration.section("|", 0, 0) == filename ) { QString returnName = parsedItem.ex_cmd; if ( returnName.left( returnName.indexOf("::") ).indexOf("\t") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section("\t", 0, 0); else if ( returnName.left( returnName.indexOf("::") ).indexOf(" ") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section(" ", 0, 0); else returnName = ""; QString add = returnName+" " +parsedItem.name+parsedItem.signature; listMethods << add.simplified(); } } return listMethods; } // /*const QList *TreeClasses::treeClassesItems(QString classname) { QTreeWidgetItem *parent = findItem(0, classname, "class:"+classname, false); if( parent ) { ParsedItem parsedItem = parent->data(0, Qt::UserRole).value(); list->append( parsedItem ); for(int i=0; ichildCount(); i++) { QTreeWidgetItem *childItem = parent->child( i ); ParsedItem parsedItem = childItem->data(0, Qt::UserRole).value(); list->append( parsedItem ); } } return list; }*/ // qdevelop-v0.28/src/.svn/text-base/addscopeimpl.h.svn-base0000444000175000017500000000233411362261065022327 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDSCOPE_H #define ADDSCOPE_H #include "ui_addscope.h" #include // class ProjectManager; // class AddScopeImpl : public QDialog, public Ui::AddScope { Q_OBJECT public: AddScopeImpl(ProjectManager * parent = 0); public slots: private: ProjectManager *m_projectManager; private slots: }; #endif qdevelop-v0.28/src/.svn/text-base/findfileimpl.h.svn-base0000444000175000017500000000323111362261065022322 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef FINDFILEIMPL_H #define FINDFILEIMPL_H // #include "ui_findfiles.h" // class QWidget; class QListWidget; // class FindFileImpl : public QDialog, public Ui::FindFile { Q_OBJECT public: FindFileImpl(QWidget * parent, QStringList directories, QListWidget *listResult, QListWidget *findLines); void setDefaultWord( QString s); private slots: void on_chooseDirectoryButton_clicked(); void on_findButton_clicked(); void find( QString directory ); protected: void showEvent(QShowEvent* _pEvent); private: QWidget *m_parent; QListWidget *m_listResult, *m_listLines; QString defaultWord; void findInFile( QString filename ); bool m_stop; //variables used to remember where the search begins QString m_searchDirectory; int m_recursiveDepth; }; #endif qdevelop-v0.28/src/.svn/text-base/logbuild.h.svn-base0000444000175000017500000000436511362261065021472 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef LOGBUILD_H #define LOGBUILD_H // #include #include // class MainImpl; // class BlockLogBuild : public QTextBlockUserData { public: BlockLogBuild(QString d) : QTextBlockUserData() { m_directory = d; } QString directory() { return m_directory; } private: QString m_directory; }; // /*! \brief The LogBuild class is used as build logger displayed in the dock Outputs. * */ class LogBuild : public QTextEdit { Q_OBJECT public: /** * The constructor */ LogBuild(QWidget * parent = 0); /** * Called by the mainimpl to set the pointer with the address of the main window. */ void setMainImpl( MainImpl *mainImpl ) { m_mainImpl = mainImpl; } static bool containsError(QString message, QString & file, uint & line); static bool containsWarning(QString message, QString & file, uint & line); protected: /** * When the user double-click on a error or warning line, the file is opened in a editor. */ void mouseDoubleClickEvent( QMouseEvent * event ); public slots: /** * In main window, the signal message(QString, QString) of the class Build is connected * to the slot slotMessagesBuild in this class. */ void slotMessagesBuild(QString list, QString directory); private: /** * A pointer to the MainImpl class */ MainImpl* m_mainImpl; signals: void incErrors(); void incWarnings(); }; #endif qdevelop-v0.28/src/.svn/text-base/cpphighlighter.h.svn-base0000444000175000017500000001126111362261065022663 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Trent Zhou * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef CPP_HIGHLIGHTER_H #define CPP_HIGHLIGHTER_H #include #include #include #include class QTextDocument; class CppHighlighter: public QSyntaxHighlighter { public: CppHighlighter(QTextDocument* document = NULL); ~CppHighlighter(); void addUserKeyword(QString const& regex); bool removeUserKeyword(QString const& regex); void setupRegexTable(); protected: void highlightBlock(QString const& text); private: enum SyntaxType { TEXT, // normal text // following items can be fetched by a simple pattern matching FUNCTION, SINGLE_LINE_COMMENT, KEYWORD, USER_KEYWORD, OPERATOR, NUMBER, ESCAPE_CHAR, // following items need states on lines MACRO, MULTI_LINE_COMMENT, STRING, }; QTextCharFormat const& formatFor(SyntaxType type); void doRegexMatch(QString const& str, int startPos = 0); bool handleState(QString const& text, int& startPos, int& endPos); int searchStringEnd(QString const& text, int startPos = 0, QChar strChar = '"'); int searchMultilineCommentEnd(QString const& text, int startPos = 0); bool handlePreprocessor(QString const& text); void handleEscapeChar(QString const& text, int start = 0, int len = 0); private: QRegExp m_reInclude; QRegExp m_reMacro; QRegExp m_reMultilineMacro; QRegExp m_reSpecial; QRegExp m_reWord; struct RegexItem { RegexItem() {} RegexItem(RegexItem const& other):regex(other.regex), type(other.type) {} QRegExp regex; SyntaxType type; }; QSet m_keywords; QSet m_userKeywords; QVector m_regexItems; // formats QTextCharFormat m_formatFunction; QTextCharFormat m_formatSingleLineComment; QTextCharFormat m_formatMultiLineComment; QTextCharFormat m_formatKeyword; QTextCharFormat m_formatUserKeyword; QTextCharFormat m_formatOperator; QTextCharFormat m_formatNumber; QTextCharFormat m_formatEscapeChar; QTextCharFormat m_formatMacro; QTextCharFormat m_formatString; public: QTextCharFormat keywordFormat() { return m_formatKeyword; } void setKeywordFormat(QTextCharFormat const& f) { m_formatKeyword = f; } // class format? I guess you mean user keyword... QTextCharFormat classFormat() { return m_formatUserKeyword; } void setClassFormat(QTextCharFormat const& f) { m_formatUserKeyword = f; } QTextCharFormat singleLineCommentFormat() { return m_formatSingleLineComment; }; void setSingleLineCommentFormat(QTextCharFormat const& f) { m_formatSingleLineComment = f; } QTextCharFormat multiLineCommentFormat() { return m_formatMultiLineComment; }; void setMultiLineCommentFormat(QTextCharFormat const& f) { m_formatMultiLineComment = f; } QTextCharFormat quotationFormat() { return m_formatString; } void setQuotationFormat(QTextCharFormat const& f) { m_formatString = f; } QTextCharFormat functionFormat() { return m_formatFunction; } void setFunctionFormat(QTextCharFormat const& f) { m_formatFunction = f; } QTextCharFormat preprocessorFormat() { return m_formatMacro; } void setPreprocessorFormat(QTextCharFormat const& f) { m_formatMacro = f; } QTextCharFormat userKeywordFormat() { return m_formatUserKeyword; } void setUserKeywordFormat(QTextCharFormat const& f) { m_formatUserKeyword = f; } QTextCharFormat operatorFormat() { return m_formatOperator; } void setOperatorFormat(QTextCharFormat const& f) { m_formatOperator = f; } QTextCharFormat escapeCharFormat() { return m_formatEscapeChar; } void setEscapeCharFormat(QTextCharFormat const& f) { m_formatEscapeChar = f; } }; #endif qdevelop-v0.28/src/.svn/text-base/InitCompletion.h.svn-base0000444000175000017500000000675411362261065022632 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Anacr0x ( fred.julian at gmail.com ) // * FILENAME : InitCompletion.h * LICENSE : GPL * COMMENTARY : Initialisation class for the icomplete's autocompletion ********************************************************************************************************/ #ifndef _INIT_COMPLETION_H #define _INIT_COMPLETION_H #include #include #include #include #include #include class Tree; class TreeClasses; struct Expression; struct Scope; class Tag { public: Tag(){}; QString name; QString parameters; QString longName; QString kind; QString access; QString signature; QString returned; bool isFunction; bool isStatic; }; typedef QList TagList; // #include // class InitCompletion : public QThread { Q_OBJECT public: QString classForFunction(QString classname, QString function); enum Request { Completion, CheckQtDatabase, ClassName }; InitCompletion (QObject *parent, TreeClasses *treeClasses); ~InitCompletion(); void setCtagsCmdPath (const QString &cmdPath); void addIncludes (QStringList includesPath, QString projectDirectory); void run(); QString className(const QString &text); //void setEmitResults(bool r) { m_emitResults = r; }; /* * @param: filename is a name like "string.h" * @return: the file descriptor (fd) and stores * "/usr/include/string.h" in fullname */ void setQtInclude(QStringList value) { m_qtInclude = value; } QFile* getFiledescriptor(const QString &filename, QString &fullname); void setStopRequired() { m_stopRequired = true;} QString tagsFilePath, tagsIncludesPath, ctagsCmdPath, smallTagsFilePath, parsedFilePath; private: Expression getExpression(const QString &text, Scope &sc, bool showAllResults = false); /* creates a simple hash for all #include lines of a line */ long calculateHash(const QString &ParsedText); /* forks and executes ctags to rebuild a tags file * storing cache_value in the tags file */ bool buildTagsFile(long cache_value, const QString &parsedText); QStringList includesList(const QString &parsedText); QString includesPathList(const QString &parsedText); void writeInheritanceToDB(QMap inheritsList, QSqlQuery query); TagList readFromDB(TagList list, Expression exp, QString functionName); void writeToDB(Expression exp, TagList list, QSqlQuery query); bool connectQDevelopDB(QString const& dbName); void createTables(); void populateQtDatabase(); QStringList inheritanceList( const QString classname, QStringList &list ); Expression parseLine( QString text ); QString returned(QString className, QString function, Expression &exp); QStringList cpp_includes; QString m_text; bool m_showAllResults; bool m_emitResults; bool m_showDuplicateEntries; //bool m_checkQt; Request m_request; QString m_name; QString m_projectDirectory; QList > parsingList; QStringList m_qtInclude; bool m_stopRequired; TreeClasses *m_treeClasses; QStringList filesList(QString directory, QStringList files); public slots: void slotInitParse(InitCompletion::Request request, QString filename, const QString &text, bool showAllResults, bool emitResults, bool showDuplicateEntries, QString name); signals: void completionList( TagList ); void completionHelpList( TagList ); void showMessage( QString ); }; #endif qdevelop-v0.28/src/.svn/text-base/stackimpl.h.svn-base0000444000175000017500000000300511362261065021646 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef STACKIMPL_H #define STACKIMPL_H // #include #include // class MainImpl; class QListWidget; class QListWidgetItem; // class StackImpl : public QObject { Q_OBJECT public: void clear(); StackImpl( MainImpl * parent, QListWidget *list); void addLine( const QString line ); void setDirectory( QString directory ) { m_directory = directory; }; void infoSources(const QString s ); private slots: void slotCurrentItemChanged ( QListWidgetItem * item, QListWidgetItem * ); private: QString m_directory; QStringList m_infoSources; MainImpl *m_mainImpl; QListWidget *m_list; }; #endif qdevelop-v0.28/src/.svn/text-base/addsetgetimpl.h.svn-base0000444000175000017500000000323511362261065022512 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDSETGETIMPL_H #define ADDSETGETIMPL_H // #include "ui_addsetget.h" // class MainImpl; class TreeClasses; class QTreeWidgetItem; // class AddSetGetImpl : public QDialog, public Ui::AddSetGet { Q_OBJECT public: AddSetGetImpl(MainImpl * parent, TreeClasses *treeClasses, QString declaration, QString implementation, QString classname, QString type, QString variableName); private slots: void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QString m_declaration; QString m_implementation; QString m_classname; QString m_type; QString m_variableName; void insertInDeclaration(QString scope, QString insertedText); void insertInImplementation(QString insertedText); }; #endif qdevelop-v0.28/src/.svn/text-base/registersimpl.cpp.svn-base0000444000175000017500000000341311362261065023106 0ustar jlbrdjlbrd#include "registersimpl.h" // #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // RegistersImpl::RegistersImpl( QWidget * parent, Qt::WFlags f) : QWidget(parent, f) { setupUi(this); QHeaderView *header = tableWidget->horizontalHeader(); header->resizeSection( 0, 50 ); tableWidget->verticalHeader()->hide(); } // void RegistersImpl::registers(QString regs) { regs = regs.section("Registers:", 1); while ( tableWidget->rowCount() ) tableWidget->removeRow(0); foreach(QString line, regs.split("\n") ) { QString name = line.section(" ", 0, 0); if( name == "(gdb)" || name.isEmpty() ) continue; line = line.section(" ", 1).simplified(); QString value1 = line.section(" ", 0, 0); line = line.section(" ", 1).simplified(); QString value2 = line.section(" ", 0); QTableWidgetItem *newItem1 = new QTableWidgetItem(name); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(value1); //newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(value2); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); int row = tableWidget->rowCount(); tableWidget->setRowCount(row+1); tableWidget->setItem(row, 0, newItem1); tableWidget->setItem(row, 1, newItem2); tableWidget->setItem(row, 2, newItem3); } } void RegistersImpl::on_applyButton_clicked() { QString command; for(int row=0; rowrowCount(); row++ ) { QString name = tableWidget->item(row, 0)->text(); QString value1 = tableWidget->item(row, 1)->text(); command += "set $" + name + "=" + value1 + "\n"; } emit debugCommand( command ); } qdevelop-v0.28/src/.svn/text-base/linenumbers.h.svn-base0000444000175000017500000000517611362261065022215 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ /******************************************************************************************************** * Une partie de cette classe fait partie du projet Monkey Studio * de Azevedo Filipe aka Nox PasNox ( pasnox at gmail dot com ) ********************************************************************************************************/ #ifndef LINENUMBERS_H #define LINENUMBERS_H // #include #include // class QTextEdit; class TextEdit; class Editor; // class LineNumbers : public QWidget { Q_OBJECT Q_PROPERTY( int digitNumbers READ digitNumbers WRITE setDigitNumbers ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) Q_PROPERTY( QColor backgroundColor READ backgroundColor WRITE setBackgroundColor ) // public: LineNumbers( TextEdit*, Editor* ); // void setDigitNumbers( int ); int digitNumbers() const; // void setTextColor( const QColor& ); const QColor& textColor() const; // void setBackgroundColor( const QColor& ); const QColor& backgroundColor() const; // void setExecutedLine(int ligne); protected: virtual void paintEvent( QPaintEvent* ); virtual void mousePressEvent( QMouseEvent * event ); virtual void mouseMoveEvent( QMouseEvent * event ); // private: TextEdit* m_textEdit; Editor * m_editor; int mDigitNumbers; QColor mTextColor; QColor mBackgroundColor; int m_executedLine; int m_currentLine; QTextCursor m_cursor; // signals: void digitNumbersChanged(); void textColorChanged( const QColor& ); void backgroundColorChanged( const QColor& ); // protected slots: void slotResetExecutedLine(); private slots: void slotToggleBreakpoint(); void slotToggleBookmark(); void slotBreakpointCondition(); public slots: void setDefaultProperties(); }; // #endif qdevelop-v0.28/src/.svn/text-base/selectionborder.h.svn-base0000444000175000017500000000304211362261065023043 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SELECTIONBORDER_H #define SELECTIONBORDER_H // #include // class QTextEdit; class TextEdit; // class SelectionBorder : public QWidget { public: SelectionBorder( TextEdit* ); void setBackgroundColor( const QColor& ); const QColor& backgroundColor() const; // protected: virtual void paintEvent( QPaintEvent* ); virtual void mousePressEvent( QMouseEvent * event ); virtual void mouseMoveEvent( QMouseEvent * event ); virtual void mouseReleaseEvent( QMouseEvent * event ); // private: TextEdit* m_textEdit; QColor mBackgroundColor; int m_begin; int m_end; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/.svn/text-base/treeproject.cpp.svn-base0000444000175000017500000002557711362261065022562 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "treeproject.h" #include "projectmanager.h" #include #include #include #include #include #include // Delegator /** * @author: David Cuadrado \ */ class Delegator: public QItemDelegate { public: Delegator(QTreeWidget *tree, QWidget *parent ); ~Delegator(); virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; virtual QSize sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const; private: QTreeWidget *m_tree; }; Delegator::Delegator(QTreeWidget *tree, QWidget *parent) : QItemDelegate(parent), m_tree(tree) { } Delegator::~Delegator() { } void Delegator::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); QString text = model->data(index, Qt::DisplayRole).toString(); QRect r = option.rect; r.setX( 0 ); if ( text.toLower().endsWith(".pro") ) { // Project QPalette palette = option.palette; if (!model->parent(index).isValid()) { QColor color = palette.highlight().color(); color.setAlpha(70); palette.setBrush(QPalette::Button, color); } painter->save(); QStyleOptionButton buttonOption; buttonOption.state = option.state; buttonOption.state &= ~QStyle::State_HasFocus; buttonOption.rect = r; buttonOption.palette = palette; buttonOption.features = QStyleOptionButton::None; if(m_tree->selectedItems().contains(static_cast(m_tree)->itemFromIndex(index))) { buttonOption.state |= QStyle::State_Sunken; } m_tree->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, m_tree); painter->restore(); // draw text QRect textRect = QRect(r.left() + 20, r.top(), r.width() - (option.fontMetrics.width(text) /2), r.height()); QString textToDraw = elidedText(option.fontMetrics, textRect.width(), Qt::ElideMiddle, text.left(text.length()-4) ); m_tree->style()->drawItemText(painter, textRect, Qt::AlignCenter, option.palette, m_tree->isEnabled(), textToDraw); } else { // Childs QStyleOptionViewItem newOption = option; QModelIndex i = model->parent(model->parent(index)); if ( i.isValid() ) { QString text = model->data(i, Qt::DisplayRole).toString(); if ( !text.toLower().endsWith(".pro") ) { r.setX(0); } else { r.setX(20); } } newOption.rect = r; QItemDelegate::paint(painter, newOption, index); } } QSize Delegator::sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const { QStyleOptionViewItem option = opt; QSize sz = QItemDelegate::sizeHint(opt, index) + QSize(2, 2); return sz; } // TreeProject::TreeProject(QWidget * parent) : QTreeWidget(parent) { //setDragEnabled(true); //setAcceptDrops(true); //setDropIndicatorShown(true); //setAcceptDrops ( true ); krawekItemDelegate = 0; setup(); } TreeProject::~TreeProject() { } // void TreeProject::drawBranches( QPainter * painter, const QRect & rect, const QModelIndex & index ) const { if( normalItemDelegate == itemDelegate() ) { QTreeView::drawBranches(painter, rect, index ); } } void TreeProject::setup() { setColumnCount(1); normalItemDelegate = itemDelegate(); slotShowAsNormal(); krawekItemDelegate = 0; } void TreeProject::mousePressEvent( QMouseEvent * event ) { if( !m_projectManager ) return; m_itemClicked = itemAt( event->pos() ); if( !m_itemClicked ) return; emit itemClicked(m_itemClicked, 0); if( event->button() == Qt::RightButton ) { setCurrentItem( m_itemClicked ); if( !m_itemClicked ) return; QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); setCurrentItem( m_itemClicked ); QMenu *menu = new QMenu(this); if( key == "PROJECT" || key == "SCOPE" ) { if (key == "PROJECT" ) { QAction *sousProjet = menu->addAction(QIcon(), tr("Add sub-project...")); connect(sousProjet, SIGNAL(triggered()), this, SLOT(slotAddSubProject()) ); for(int i=0; ichildCount(); i++) if( QString("SCOPE:FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains( m_projectManager->toKey( m_itemClicked->child( i )->data(0, Qt::UserRole) ) ) ) sousProjet->setEnabled( false ); } connect(menu->addAction(QIcon(), tr("Add New Item...")), SIGNAL(triggered()), this, SLOT(slotAddNewItem()) ); connect(menu->addAction(QIcon(), tr("Add Scope...")), SIGNAL(triggered()), this, SLOT(slotAddScope()) ); connect(menu->addAction(QIcon(), tr("Add New Class...")), SIGNAL(triggered()), this, SLOT(slotAddNewClass()) ); connect(menu->addAction(QIcon(), tr("Add Existing Files...")), SIGNAL(triggered()), this, SLOT(slotAddExistingFiles()) ); } else if( key == "DATA" ) { if( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "TRANSLATIONS" ) { connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open in Linguist")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(":/toolbar/images/refresh.png"), tr("Refresh translation files")+" (.ts)"), SIGNAL(triggered()), this, SLOT(slotlupdate()) ); connect(menu->addAction(QIcon(""), tr("Build release translation files")+" (.qm)"), SIGNAL(triggered()), this, SLOT(slotlrelease()) ); } if( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "FORMS" ) { connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open in Designer")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(), tr("Dialog Subclassing...")), SIGNAL(triggered()), this, SLOT(slotSubclassing()) ); connect(menu->addAction(QIcon(), tr("Dialog Preview")), SIGNAL(triggered()), this, SLOT(slotPreviewForm()) ); } else connect(menu->addAction(QIcon(":/toolbar/images/edit.png"), tr("Open")), SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(menu->addAction(QIcon(), tr("Rename...")), SIGNAL(triggered()), this, SLOT(slotRenameItem()) ); } else if( QString("FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains(key) ) { connect(menu->addAction(QIcon(), tr("Add New Item...")), SIGNAL(triggered()), this, SLOT(slotAddNewItem()) ); } // TODO: Divius: Temporary disabled for 0.27.1. may brake complex project files //connect(menu->addAction(QIcon(), tr("Sort")), SIGNAL(triggered()), this, SLOT(slotSort()) ); connect(menu->addAction(QIcon(":/toolbar/images/editdelete.png"), tr("Remove from project")), SIGNAL(triggered()), this, SLOT(slotDeleteItem()) ); menu->addSeparator(); QTreeWidgetItem *tmp = m_itemClicked; while( tmp && m_projectManager->toKey( tmp->data(0, Qt::UserRole) ) != "PROJECT" ) tmp = tmp->parent(); if( tmp ) connect(menu->addAction(QIcon(), tr("Properties of %1...").arg(tmp->text(0)) ), SIGNAL(triggered()), this, SLOT(slotProjectPropertie()) ); // menu->addSeparator(); QMenu *showAs = menu->addMenu(tr("Show As")); connect(showAs->addAction(QIcon(), tr("Normal")), SIGNAL(triggered()), this, SLOT(slotShowAsNormal()) ); connect(showAs->addAction(QIcon(), tr("Krawek")), SIGNAL(triggered()), this, SLOT(slotShowAsKrawek()) ); menu->exec(event->globalPos()); delete menu; } else if( event->button() == Qt::MidButton ) { QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); if ( (key == "DATA" ) && ( m_projectManager->toKey( m_itemClicked->parent()->data(0, Qt::UserRole) ) == "FORMS" ) ) { // show dialog previewForm(m_itemClicked); } } QTreeWidget::mousePressEvent(event); } // void TreeProject::resizeEvent ( QResizeEvent * event ) { QTreeWidget::resizeEvent( event ); } // void TreeProject::keyPressEvent( QKeyEvent * event ) { if ( event->key( ) == Qt::Key_Return ) { slotOpen( ); event->setAccepted( true ); } else { QTreeWidget::keyPressEvent( event ); m_itemClicked = currentItem( ); } } // void TreeProject::slotShowAsNormal() { setItemDelegate( normalItemDelegate ); header()->hide(); setRootIsDecorated(true); setAlternatingRowColors(false); if( krawekItemDelegate ) { delete krawekItemDelegate; krawekItemDelegate = 0; } } // void TreeProject::slotShowAsKrawek() { if( !krawekItemDelegate ) krawekItemDelegate = new Delegator(this, this); header()->hide(); setRootIsDecorated(false); setItemDelegate( krawekItemDelegate ); setAlternatingRowColors(true); } // void TreeProject::slotAddNewItem() { QString kind; QString key = m_projectManager->toKey( m_itemClicked->data(0, Qt::UserRole) ); if( QString("FORMS:HEADERS:RESOURCES:SOURCES:TRANSLATIONS").contains(key) ) kind = key; emit addNewItem(m_itemClicked, kind); } // void TreeProject::slotPreviewForm() { emit previewForm(m_itemClicked); } // void TreeProject::slotSubclassing() { emit subclassing(m_itemClicked); } // void TreeProject::slotlupdate() { emit lupdate(m_itemClicked); } // void TreeProject::slotlrelease() { emit lrelease(m_itemClicked); } // void TreeProject::slotAddExistingFiles() { emit addExistingsFiles(m_itemClicked); } // void TreeProject::slotAddScope() { emit addScope(m_itemClicked); } // void TreeProject::slotAddSubProject() { emit addSubProject(m_itemClicked); } // void TreeProject::slotProjectPropertie() { emit projectPropertie(m_itemClicked); } // void TreeProject::slotOpen() { emit open(m_itemClicked, 0); } // void TreeProject::slotDeleteItem() { emit deleteItem(m_itemClicked); } // void TreeProject::slotRenameItem() { emit renameItem(m_itemClicked); } // void TreeProject::slotAddNewClass() { emit addNewClass(m_itemClicked); } // void TreeProject::slotSort() { emit sort(); } // void TreeProject::dragEnterEvent(QDragEnterEvent *) { //if (event->mimeData()->hasFormat("text/plain")) //event->acceptProposedAction(); } // qdevelop-v0.28/src/.svn/text-base/editor.cpp.svn-base0000444000175000017500000010622411362261065021507 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #define QD qDebug() << __FILE__ << __LINE__ << ":" // #include "editor.h" #include "mainimpl.h" #include "lineedit.h" #include "tabwidget.h" #include "linenumbers.h" #include "logbuild.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cpphighlighter.h" #include #include #include #include Editor::Editor(TabWidget * parent, MainImpl *mainimpl, InitCompletion *completion, QString name) : QWidget(parent) { m_parent = parent; m_mainimpl = mainimpl; m_completion = completion; m_filename = name; int vposLayout = 0; m_comboClasses = m_comboMethods = 0; m_otherFileButton = m_refreshButton = 0; m_editorToolbar = 0; m_textEdit = new TextEdit(this, mainimpl, completion); m_backward = false; m_activeEditor = false; m_nameOtherFile = ""; m_hideFindReplace = 10; // QGridLayout *gridLayout = new QGridLayout(this); gridLayout->setSpacing(0); gridLayout->setMargin(0); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); if ( suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc" || suffixe( m_filename ).toLower() == "c" || suffixe( m_filename ).toLower() == "h" || suffixe( m_filename ).toLower() == "hpp" ) { QHBoxLayout *hboxLayout = new QHBoxLayout(); hboxLayout->setSpacing(6); hboxLayout->setMargin(6); hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); // m_otherFileButton = new QToolButton(this); connect(m_otherFileButton, SIGNAL(clicked()), this, SLOT(slotOtherFile())); hboxLayout->addWidget(m_otherFileButton); // if ( (suffixe( m_filename ).toLower() != "h") && (suffixe( m_filename ).toLower() != "hpp") ) { m_refreshButton = new QToolButton(this); m_refreshButton->setIcon(QIcon(":/toolbar/images/refresh.png")); m_refreshButton->setToolTip( tr("Refresh classes and methods lists") ); connect(m_refreshButton, SIGNAL(clicked()), this, SLOT(slotClassesMethodsList()) ); hboxLayout->addWidget(m_refreshButton); // m_comboClasses = new QComboBox(this); m_comboClasses->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); m_comboClasses->setSizeAdjustPolicy(QComboBox::AdjustToContents); m_comboClasses->setLineEdit( new LineEdit(m_comboClasses) ); m_comboClasses->setEditable( true ); m_comboClasses->setAutoCompletion( true ); m_comboClasses->setObjectName(QString::fromUtf8("m_comboClasses")); connect(m_comboClasses, SIGNAL(activated(QString)), this, SLOT(slotComboClasses(QString)) ); hboxLayout->addWidget(m_comboClasses); // m_comboMethods = new QComboBox(this); m_comboMethods->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); m_comboMethods->setSizeAdjustPolicy(QComboBox::AdjustToContents); m_comboMethods->setMaximumSize( 500, m_comboMethods->height()); m_comboMethods->setLineEdit( new LineEdit(m_comboClasses) ); m_comboMethods->setEditable( true ); m_comboMethods->setAutoCompletion( true ); m_comboMethods->setMaxVisibleItems( 25 ); m_comboMethods->setObjectName(QString::fromUtf8("comboMethodes")); m_comboMethods->lineEdit()->setAlignment(Qt::AlignLeft); connect(m_comboMethods, SIGNAL(activated(int)), this, SLOT(slotComboMethods(int)) ); hboxLayout->addWidget(m_comboMethods); } // QSpacerItem *spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); hboxLayout->addItem(spacerItem); // // updateOtherFile(m_filename); // Update "other file" button m_otherFileButton->setIcon(QIcon(m_otherFileIcon)); m_editorToolbar = new QWidget( this ); m_editorToolbar->setLayout( hboxLayout ); gridLayout->addWidget(m_editorToolbar, vposLayout++, 0, 1, 1); } connect(m_textEdit, SIGNAL(editorModified(bool)), this, SLOT(slotModifiedEditor(bool)) ); // m_findWidget = new QWidget; uiFind.setupUi(m_findWidget); connect(uiFind.toolClose, SIGNAL(clicked()), m_findWidget, SLOT(hide()) ); connect(uiFind.editFind, SIGNAL(textChanged(QString)), this, SLOT(slotFindWidget_textChanged(QString)) ); connect(uiFind.editFind, SIGNAL(returnPressed()), this, SLOT(slotFindNext()) ); connect(uiFind.toolPrevious, SIGNAL(clicked()), this, SLOT(slotFindPrevious()) ); connect(uiFind.toolNext, SIGNAL(clicked()), this, SLOT(slotFindNext()) ); // autoHideTimer = new QTimer(this); // m_replaceWidget = new QWidget; uiReplace.setupUi(m_replaceWidget); uiReplace.replace->hide(); connect(uiReplace.toolClose, SIGNAL(clicked()), m_replaceWidget, SLOT(hide()) ); connect(uiReplace.textFind, SIGNAL(editTextChanged(QString)), uiFind.editFind, SLOT(setText(QString)) ); connect(uiReplace.textFind, SIGNAL(editTextChanged(QString)), this, SLOT(slotFindWidget_textChanged(QString)) ); connect(uiReplace.textReplace, SIGNAL(editTextChanged(QString)), autoHideTimer, SLOT(start()) ); connect(uiReplace.toolPrevious, SIGNAL(clicked()), this, SLOT(slotFindPrevious()) ); connect(uiReplace.toolNext, SIGNAL(clicked()), this, SLOT(slotFindNext()) ); connect(uiReplace.replace, SIGNAL(clicked()), this, SLOT(slotReplace()) ); connect(uiReplace.checkCase, SIGNAL(toggled(bool)), uiFind.checkCase, SLOT(setChecked(bool)) ); connect(uiReplace.checkWholeWords, SIGNAL(toggled(bool)), uiFind.checkWholeWords, SLOT(setChecked(bool)) ); // autoHideTimer->setInterval(10000); autoHideTimer->setSingleShot(true); connect(autoHideTimer, SIGNAL(timeout()), m_findWidget, SLOT(hide())); connect(autoHideTimer, SIGNAL(timeout()), m_replaceWidget, SLOT(hide())); // gridLayout->addWidget(m_textEdit, vposLayout++, 0, 1, 1); gridLayout->addWidget(m_findWidget, vposLayout++, 0, 1, 1); gridLayout->addWidget(m_replaceWidget, vposLayout++, 0, 1, 1); uiFind.labelWrapped->setVisible(false); uiReplace.labelWrapped->setVisible(false); m_findWidget->hide(); m_replaceWidget->hide(); // connect(&m_timerUpdateClasses, SIGNAL(timeout()), this, SLOT(slotTimerUpdateClasses())); connect(&m_timerCheckLastModified, SIGNAL(timeout()), this, SLOT(slotTimerCheckIfModifiedOutside())); } // void Editor::updateOtherFile(QString currentFile) { if ( !m_otherFileButton ) return; QString suffix; QString base = currentFile.left(currentFile.lastIndexOf(".") ); m_nameOtherFile = ""; if ( suffixe( currentFile ).toLower() == "h" || suffixe( currentFile ).toLower() == "hpp" ) suffix = "cpp"; else if ( suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc" || suffixe( m_filename ).toLower() == "c") suffix = "h"; // if the current file has one of the above suffixes and the other file exists, use it if (!suffix.isEmpty() && QFileInfo(base+"."+suffix).exists()) { m_nameOtherFile = base+"."+suffix; m_otherFileButton->setVisible(true); m_otherFileButton->setToolTip( tr("Open %1").arg(shortFilename(m_nameOtherFile)) ); m_otherFileIcon = ":/treeview/images/"+suffix+".png"; m_otherFileButton->setIcon(QIcon(m_otherFileIcon)); } else // otherwise, don't display the button m_otherFileButton->setVisible(false); emit otherFileChanged(); } // void Editor::setActiveEditor(bool b) { m_activeEditor = b; if ( b && m_showTreeClasses ) { m_timerUpdateClasses.start(m_intervalUpdatingClasses); if ( m_completion ) { m_completion->disconnect( m_textEdit ); connect(m_completion, SIGNAL(completionList(TagList)), m_textEdit, SLOT(slotCompletionList(TagList)) ); connect(m_completion, SIGNAL(completionHelpList(TagList)), m_textEdit, SLOT(slotCompletionHelpList(TagList)) ); } } else { slotTimerUpdateClasses(); m_timerUpdateClasses.stop(); if ( m_completion ) m_completion->disconnect( m_textEdit ); } } // void Editor::setShowTreeClasses(bool s) { m_showTreeClasses=s; if ( !m_showTreeClasses ) m_timerUpdateClasses.stop(); } // void Editor::slotTimerUpdateClasses() { QByteArray array( m_textEdit->toPlainText().toLocal8Bit() ); if ( !array.count() ) return; char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); if ( check != m_checksum ) { m_checksum = check; emit updateClasses( filename(), m_textEdit->toPlainText()); m_mainimpl->slotCompile(true); } if( m_textEdit->hasFocus() ) m_textEdit->setMouseHidden( true ); else m_textEdit->setMouseHidden( false ); } // void Editor::slotTimerCheckIfModifiedOutside() { QFile file(m_filename); if ( !file.exists() ) { m_timerCheckLastModified.stop(); int rep = QMessageBox::question(this, "QDevelop", tr("The file \"%1\"\ndisappeared from fisk.\n\n").arg(m_filename)+ tr("What do you want to do?"), tr("Recreate"), tr("Close") ); if ( rep == 0 ) // Recreate { m_textEdit->document()->setModified( true ); save(); m_timerCheckLastModified.start( 5000 ); } else if ( rep == 1 ) // Closing { QList editors = m_mainimpl->allEditors(); for (int i = 0; i < editors.count(); i++) { qDebug() << editors[i]->filename() << filename(); if (editors[i]->filename() == filename()) { // TODO: Not very good idea to delete object during it's event handler! m_mainimpl->closeTab(i); return; } } } } else if ( m_lastModified != QFileInfo( file ).lastModified() ) { m_timerCheckLastModified.stop(); int rep = QMessageBox::question(this, "QDevelop", tr("The file \"%1\"\nwas modified outside editor.\n\n").arg(m_filename)+ tr("What do you want to do?"), tr("Overwrite"), tr("Reload File") ); if ( rep == 0 ) // Overwrite { m_textEdit->document()->setModified( true ); save(); } else if ( rep == 1 ) // Reload { open(false); } m_timerCheckLastModified.start( 5000 ); } checkBookmarks(); } // void Editor::checkBookmarks() { QMenu *menu = m_mainimpl->bookmarksMenu(); QList actions = menu->actions(); foreach(QAction *action, actions) { Bookmark bookmark = action->data().value(); QTextBlock block = bookmark.second; bool found = false; for ( QTextBlock b = m_textEdit->document()->begin(); b.isValid(); b = b.next() ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( block==b && blockUserData && blockUserData->bookmark ) { found = true; } } if ( !found ) { m_mainimpl->toggleBookmark(this, "", false, block); } } } // void Editor::clearAllBookmarks() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->bookmark ) toggleBookmark( line ); } } // Editor::~Editor() {} // bool Editor::open(bool silentMode) { bool ret = m_textEdit->open(silentMode, m_filename, m_lastModified); if ( ret && (suffixe( m_filename ).toLower() == "cpp" || suffixe( m_filename ).toLower() == "cc")) slotClassesMethodsList(); QByteArray array( m_textEdit->toPlainText().toLocal8Bit() ); if ( array.count() ) { char *ptr = array.data(); quint16 check = qChecksum(ptr, array.length()); m_checksum = check; } m_timerCheckLastModified.start( 5000 ); return ret; } // bool Editor::close() { bool ret = m_textEdit->close( m_filename ); if ( ret ) clearAllBookmarks(); return ret; } // void Editor::setSyntaxHighlight(bool activate) { if ( activate && !QString(":c:cpp:cc:h:hpp:").contains( ":"+m_filename.section(".", -1, -1).toLower()+":" ) ) return; m_textEdit->setSyntaxHighlight(activate); } // bool Editor::save() { return m_textEdit->save( m_filename, m_lastModified); } // void Editor::gotoLine( int line, bool moveTop ) { m_textEdit->gotoLine( line, moveTop ); } // void Editor::slotFindPrevious() { m_backward = true; if ( m_textEdit->textCursor().selectedText().length() ) { QTextCursor cursor = m_textEdit->textCursor(); cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, cursor.selectedText().length()); cursor.movePosition(QTextCursor::NoMove, QTextCursor::KeepAnchor); m_textEdit->setTextCursor(cursor); } slotFindWidget_textChanged(uiFind.editFind->text(), true); } // void Editor::slotFindNext() { m_backward = false; slotFindWidget_textChanged(uiFind.editFind->text(), true); } // void Editor::find() { autoHideTimer->stop(); m_replaceWidget->hide(); m_findWidget->show(); uiFind.editFind->setFocus(Qt::ShortcutFocusReason); if ( m_textEdit->textCursor().selectedText().length() ) uiFind.editFind->setText( m_textEdit->textCursor().selectedText() ); else uiFind.editFind->setText( m_textEdit->wordUnderCursor() ); uiFind.editFind->selectAll(); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } // void Editor::slotReplace() { bool replaced; int nbFound = 0; do { replaced = false; if( ( m_textEdit->textCursor().selectedText() == uiReplace.textFind->currentText() || ( m_textEdit->textCursor().selectedText().toLower() == uiReplace.textFind->currentText().toLower() && !uiReplace.checkCase->isChecked() ) ) && uiReplace.textFind->currentText() != uiReplace.textReplace->currentText()) { m_textEdit->textCursor().removeSelectedText(); m_textEdit->textCursor().insertText( uiReplace.textReplace->currentText() ); replaced = true; nbFound++; if( m_backward ) slotFindPrevious(); else slotFindNext(); } } while( replaced && !uiReplace.prompt->isChecked() ); uiReplace.reached->setText(tr("%1 replacement(s) made.").arg(nbFound)); uiReplace.labelWrapped->setVisible( true ); if( uiReplace.textFind->findText( uiReplace.textFind->currentText() ) == -1 ) uiReplace.textFind->addItem( uiReplace.textFind->currentText() ); if( uiReplace.textReplace->findText( uiReplace.textReplace->currentText() ) == -1 ) uiReplace.textReplace->addItem( uiReplace.textReplace->currentText() ); } // void Editor::replace() { /*ReplaceImpl *dialog = new ReplaceImpl(this, m_textEdit, m_replaceOptions); dialog->exec(); m_replaceOptions = dialog->replaceOptions(); delete dialog;*/ m_findWidget->hide(); uiReplace.labelWrapped->setVisible(false); autoHideTimer->stop(); m_replaceWidget->show(); uiReplace.textFind->setFocus(Qt::ShortcutFocusReason); if ( m_textEdit->textCursor().selectedText().length() ) uiReplace.textFind->setEditText( m_textEdit->textCursor().selectedText() ); else uiReplace.textFind->setEditText( m_textEdit->wordUnderCursor() ); uiReplace.textFind->lineEdit()->selectAll(); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } //return current selected text or word under cursor QString Editor::selection() { if ( m_textEdit->textCursor().selectedText().length() ) return ( m_textEdit->textCursor().selectedText() ); else return ( m_textEdit->wordUnderCursor() ); } // void Editor::setFocus() { m_findWidget->hide(); m_replaceWidget->hide(); m_textEdit->setFocus(Qt::OtherFocusReason); } // void Editor::findContinue() { //slotFindWidget_textChanged(uiFind.editFind->text(), true); slotFindNext(); } // void Editor::findPrevious() { slotFindPrevious(); } // void Editor::slotFindWidget_textChanged(QString text, bool fromButton) { int options = 0; autoHideTimer->stop(); if ( m_backward ) options |= QTextDocument::FindBackward; if ( uiFind.checkWholeWords->isChecked() ) options |= QTextDocument::FindWholeWords; if ( uiFind.checkCase->isChecked() ) options |= QTextDocument::FindCaseSensitively; m_textEdit->slotFind(uiFind, uiReplace, text, (QTextDocument::FindFlags)options,fromButton); if( m_textEdit->textCursor().selectedText().length() ) uiReplace.replace->setVisible( true ); else uiReplace.replace->setVisible( false ); if (m_hideFindReplace > 0) { autoHideTimer->setInterval(m_hideFindReplace*1000); autoHideTimer->start(); } } // QStringList Editor::classes() { QStringList liste = m_classesMethodsList.keys(); liste.sort(); return liste; } // QStringList Editor::methodes(QString classe) { QStringList liste; foreach(QString line, m_classesMethodsList.value( classe ) ) liste += QStringList(line.section("::", 1, 1)+"::"+ line.section("::", 0, 0)); liste.sort(); QStringList liste2; foreach(QString ligne2, liste) liste2 += QStringList(ligne2.section("::", 1, 1)+"::"+ ligne2.section("::", 0, 0)); return liste2; } // void Editor::slotClassesMethodsList() { if ( !m_comboClasses ) return; int width = 0; const QList *list; list = m_mainimpl->treeClassesItems(); if ( list->isEmpty() ) return; m_comboClasses->clear(); m_classesMethodsList.clear(); for (int i = 0; i < list->size(); ++i) { ParsedItem parsedItem = list->at( i ); if ( ( parsedItem.kind == "p" || parsedItem.kind == "f" ) && parsedItem.implementation.section("|", 0, 0) == filename() ) { QString numLine = parsedItem.implementation.section("|", -1, -1); QString returnName = parsedItem.ex_cmd; if ( returnName.left( returnName.indexOf("::") ).indexOf("\t") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section("\t", 0, 0); else if ( returnName.left( returnName.indexOf("::") ).indexOf(" ") != -1 ) returnName = returnName.left( returnName.indexOf("::") ).section(" ", 0, 0); else returnName = ""; QString add = returnName+" " +parsedItem.classname+"::"+parsedItem.name+parsedItem.signature+QChar(255)+numLine; QStringList methodes = m_classesMethodsList.value(parsedItem.classname); methodes << add; if ( !parsedItem.classname.simplified().isEmpty() ) { width = qMax(width, fontMetrics().width( parsedItem.classname ) ); } m_classesMethodsList[parsedItem.classname] = methodes; } } m_comboClasses->setGeometry(m_comboClasses->x(), m_comboClasses->y(), qMin(350, width+30), m_comboClasses->height()); slotComboClasses(); return; } // bool Editor::inQuotations(int position, QString text) { int debutQuote = 0, finQuote; bool realBegin = false; do { do { debutQuote = text.indexOf("\"", debutQuote); if ( debutQuote > 0 && (text.at(debutQuote-1) == '\\' || text.at(debutQuote-1) == '\'') ) { debutQuote++; realBegin = false; } else { realBegin = true; } } while (!realBegin); finQuote = -1; if ( debutQuote != -1 ) { finQuote = debutQuote+1; bool realEnd = false; do { finQuote = text.indexOf("\"", finQuote); if ( finQuote > 0 && text.at(finQuote-1) == '\\' ) { finQuote++; realEnd = false; } else { realEnd = true; } } while (!realEnd); } if ( debutQuote!=-1 && finQuote!=-1 ) { if ( position > debutQuote && position < finQuote ) { return true; } } debutQuote = finQuote+1; } while ( debutQuote!=-1 && finQuote!=-1 ); // Idem with "'" debutQuote = 0, finQuote=0; realBegin = false; do { do { debutQuote = text.indexOf('\'', debutQuote); if ( debutQuote > 0 && (text.at(debutQuote-1) == '\\' || text.at(debutQuote-1) == '\"') ) { debutQuote++; realBegin = false; } else { realBegin = true; } } while (!realBegin); finQuote = -1; if ( debutQuote != -1 ) { finQuote = debutQuote+1; bool realEnd = false; do { finQuote = text.indexOf('\'', finQuote); if ( finQuote > 0 && (text.at(finQuote-1) == '\\' || text.at(finQuote-1) == '\"') ) { finQuote++; realEnd = false; } else { realEnd = true; } } while (!realEnd); } if ( debutQuote!=-1 && finQuote!=-1 ) { if ( position > debutQuote && position < finQuote ) { return true; } } debutQuote = finQuote+1; } while ( debutQuote!=-1 && finQuote!=-1 ); return false; } // void Editor::toggleBookmark(int line) { QTextCursor save = m_textEdit->textCursor(); int scroll = verticalScrollBar(); gotoLine( line, false ); m_textEdit->textCursor().movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); m_textEdit->textCursor().movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); QString s = m_textEdit->textCursor().block().text().simplified(); // QTextCursor cursor = m_textEdit->textCursor(); bool activate; BlockUserData *blockUserData = (BlockUserData*)cursor.block().userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = cursor.block(); } blockUserData->bookmark = !blockUserData->bookmark; cursor.block().setUserData( blockUserData ); activate = blockUserData->bookmark; m_textEdit->setTextCursor( cursor ); // //emit bookmark(this, s, QPair(activate, cursor.block())); m_mainimpl->toggleBookmark(this, s, activate, cursor.block()); m_textEdit->setTextCursor( save ); setVerticalScrollBar( scroll ); if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } // QList Editor::bookmarksList() { QList list; int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->bookmark ) list << line; } return list; } // QList Editor::breakpointsList() { QList list; int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->breakpoint ) list << block; } return list; } void Editor::displayEditorToolbar( bool b ) { if (m_editorToolbar) m_editorToolbar->setVisible( b ); } // void Editor::toggleBreakpoint(int line, QString breakpointCondition, bool isTrue) { QTextCursor save = m_textEdit->textCursor(); int scroll = verticalScrollBar(); gotoLine( line, false ); QTextCursor cursor = m_textEdit->textCursor(); BlockUserData *blockUserData = (BlockUserData*)cursor.block().userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->isTrue = false; } blockUserData->breakpoint = !blockUserData->breakpoint; blockUserData->breakpointCondition = breakpointCondition; blockUserData->isTrue = isTrue; cursor.block().setUserData( blockUserData ); m_textEdit->setTextCursor( cursor ); m_textEdit->setTextCursor( save ); setVerticalScrollBar( scroll ); emit breakpoint(shortFilename(), line, blockUserData); if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } // void Editor::emitListBreakpoints() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData && blockUserData->breakpoint ) emit breakpoint(shortFilename(), line, blockUserData); } } // QString Editor::shortFilename() { QString name = m_filename; int pos = m_filename.lastIndexOf( "/" ); if ( pos != -1 ) name = name.mid(pos+1); return name; } // QString Editor::directory() { return m_filename.left( m_filename.length()-shortFilename().length()-1 ); } QString Editor::shortFilename(QString nomLong) { QString name = nomLong; int pos = nomLong.lastIndexOf( "/" ); if ( pos != -1 ) name = name.mid(pos+1); return name; } // QString Editor::suffixe(QString filename) { return filename.section(".", -1, -1); } // void Editor::setExecutedLine(int line) { m_textEdit->setExecutedLine(line); } // void Editor::slotModifiedEditor(bool modified) { emit editorModified(this, modified); } // // void Editor::slotComboClasses(QString text) { if ( !m_comboClasses ) return; if ( text.isEmpty() ) { m_comboClasses->clear(); m_comboClasses->addItems( classes() ); m_comboClasses->setCurrentIndex(0); text = m_comboClasses->currentText(); } if ( !classes().count() || (m_comboClasses->count() == 1 && m_comboClasses->itemText(0).simplified().isEmpty() ) ) m_comboClasses->setHidden( true ); else m_comboClasses->setHidden( false ); m_comboMethods->setHidden( !classes().count() ); m_comboMethods->clear(); int width = 0; foreach(QString line, methodes(text) ) { int numLine = QString(line.section(QChar(255), -1)).toInt(); QString methode = line.left( line.indexOf(QChar(255)) ); methode.remove('\r').remove('\n'); QString typeRetour = " : " + methode.section(" ", 0, 0); if ( typeRetour.contains("::") ) typeRetour = ""; methode = methode.section("::", 1, 1); int last = methode.lastIndexOf(":"); if ( last != 1 && !inQuotations(last, methode) ) methode = methode.left( last ); methode += typeRetour; QTextBlock block; int n=1; for (block = m_textEdit->document()->begin(); block.isValid() && n != numLine; block = block.next(), n++ ) ; m_comboMethods->addItem(methode, QVariant(block.text())); width = qMax(width, fontMetrics().width( methode ) ); } m_comboMethods->setGeometry(m_comboClasses->x()+m_comboClasses->width()+6, m_comboMethods->y(), qMin(500, width+30), m_comboMethods->height()); m_comboMethods->setCurrentIndex(0); } // void Editor::slotComboMethods(int index) { m_textEdit->gotoLine(1, false); QString s = m_comboMethods->itemData(index).toString(); m_textEdit->find( s ); gotoLine( m_textEdit->currentLineNumber(), true); } // void Editor::setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g) { m_textEdit->setSyntaxColors(a, b, c, d, e, f, g); } // void Editor::slotOtherFile() { m_mainimpl->openFile( QStringList(m_nameOtherFile) ); } // void Editor::setNameOtherFile(QString oldName, QString newName) { /* When a file is renamed in files browser (by a right-click the "Rename..."), this function is called on all editors to rename the other file. */ if ( oldName != m_nameOtherFile ) return; updateOtherFile(newName); } // void Editor::methodsList() { if ( NULL == m_comboMethods ) { QApplication::beep(); } else { QLineEdit* pLineEdit = m_comboMethods->lineEdit(); pLineEdit->setSelection(0, pLineEdit->text().count()); m_comboMethods->showPopup(); m_comboMethods->setFocus(); } } // void Editor::setTextColor(QColor textColor) { m_textEdit->setTextColor(textColor); } // void Editor::slotMessagesBuild(QString list, QString directory) { /* If your language is not translated in QDevelop and if g++ display the errors and warnings in your language, modify the two strings below "error" and "warning" to adapt in your language. Also have a look at logbuild.cpp */ bool messageContainsWarnings = false; bool messageContainsErrors = false; foreach(QString message, list.split("\n")) { if ( !message.isEmpty() ) { bool error = false; message.remove( "\r" ); QString filename; uint numLine; if ( LogBuild::containsError(message, filename, numLine) ) { // Error error = true; messageContainsErrors = true; if( message.toLower().contains("error") ) message = message.section("error", 1).simplified(); else if( message.toLower().contains( LogBuild::tr("error").toLower() ) ) message = message.section(LogBuild::tr("error"), 1).simplified(); } else if ( LogBuild::containsWarning(message, filename, numLine) ) { // Warning error = false; messageContainsWarnings = true; if( message.toLower().contains("warning") ) message = message.section("warning", 1).simplified(); else if( message.toLower().contains( LogBuild::tr("warning").toLower() ) ) message = message.section(LogBuild::tr("warning"), 1).simplified(); } QString absoluteName = QDir(directory).absoluteFilePath(filename); if( absoluteName.endsWith("-qdeveloptmp.cpp") ) absoluteName = absoluteName.section("-qdeveloptmp.cpp", 0, 0) + ".cpp"; if( absoluteName != m_filename ) continue; if( message.startsWith(":") ) message = message.section(":", 1).simplified(); uint line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { if( line != numLine ) continue; BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = block; } if( error && !blockUserData->errorString.contains(message) ) blockUserData->errorString += message + "\n"; else if( !error && !blockUserData->warningString.contains(message) ) blockUserData->warningString += message + "\n"; block.setUserData( blockUserData ); break; } } } if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); int state = 0; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next() ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( !blockUserData ) { blockUserData = new BlockUserData(); blockUserData->breakpoint = false; blockUserData->bookmark = false; blockUserData->block = block; } if( blockUserData && !blockUserData->errorString.isEmpty() ) { state = 2; break; } else if( blockUserData && !blockUserData->warningString.isEmpty() ) state = 1; } m_mainimpl->automaticCompilationState(this, state); } void Editor::clearErrorsAndWarnings() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( blockUserData ) { blockUserData->errorString = ""; blockUserData->warningString = ""; block.setUserData( blockUserData ); } } if( m_textEdit->lineNumbers() ) m_textEdit->lineNumbers()->update(); } void Editor::slotEndBuild() { QFile::remove( tempFilename() ); } void Editor::nextWarningError() { int line = 1; for ( QTextBlock block = m_textEdit->document()->begin(); block.isValid(); block = block.next(), line++ ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( line>currentLineNumber() && blockUserData && (!blockUserData->errorString.isEmpty() || !blockUserData->warningString.isEmpty()) ) { gotoLine(line, true); break; } } } void Editor::previousWarningError() { int line = currentLineNumber(); for ( QTextBlock block = m_textEdit->textCursor().block(); block.isValid(); block = block.previous(), line-- ) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); if ( lineerrorString.isEmpty() || !blockUserData->warningString.isEmpty()) ) { gotoLine(line, true); break; } } } // qdevelop-v0.28/src/.svn/text-base/main.cpp.svn-base0000444000175000017500000001156211362261065021145 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "mainimpl.h" // QSplashScreen *splash = 0; // int main(int argc, char *argv[]) { QApplication app(argc, argv); splash = new QSplashScreen(QPixmap(":/divers/images/SplashQDevelop.png")); splash->setFont( QFont("Helvetica", 10) ); splash->show(); // // change the plugins path (add the installation directory) QStringList list_path ; QDir dir = QDir(qApp->applicationDirPath()+"/QtPlugins/"); list_path << dir.absolutePath () << app.libraryPaths (); app.setLibraryPaths( list_path ); // QTranslator translatorQDevelop, translatorQt; QString language = QLocale::languageToString( QLocale::system().language() ); // QStringList toOpen, args = QCoreApplication::arguments(); if (!args.isEmpty()) args.removeFirst(); bool nextArgIsLanguage = false; foreach (QString arg, args) { if (arg.simplified() == "-l") { nextArgIsLanguage = true; } else if (nextArgIsLanguage) { language = arg.simplified(); nextArgIsLanguage = false; } else { toOpen << arg; } } qApp->processEvents(); // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Interface translation"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/translations"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); // load & install QDevelop translation translatorQDevelop.load(translationsDir.absoluteFilePath("QDevelop_"+language+".qm")); if (translatorQDevelop.isEmpty()) { // Cmake workaround // (checking file existance is necessary as it will try loading other files, including "qdevelop" which might actually exist since // it is the name of the Linux binary) if (QFile::exists(QCoreApplication::applicationDirPath() + "/QDevelop_"+language+".qm")) translatorQDevelop.load(QCoreApplication::applicationDirPath() + "/QDevelop_"+language+".qm"); if (translatorQDevelop.isEmpty()) { // Qmake workaround translatorQDevelop.load(QCoreApplication::applicationDirPath() + "/../resources/translations/QDevelop_"+language+".qm"); } } if (!translatorQDevelop.isEmpty()) app.installTranslator( &translatorQDevelop ); // search, load & install Qt translation translatorQt.load(translationsDir.absoluteFilePath("qt_"+language+".qm")); if (translatorQt.isEmpty()) translatorQt.load( QLibraryInfo::location( QLibraryInfo::TranslationsPath) + "/qt_"+QLocale::system().name()+".qm" ); if (!translatorQt.isEmpty()) app.installTranslator( &translatorQt ); // MainImpl main; main.setGeometry(50,50, 800, 550); // QString projectName = main.loadINI(); // splash->showMessage(QObject::tr("Environment control"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.slotToolsControl(false); // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Files on editor"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); // if( !projectName.isEmpty() ) { main.openProject( projectName ); } foreach(QString s, toOpen) { if( s.right(4).toLower() == ".pro" ) { if( s.toLower() != projectName.toLower() ) main.openProject(s); break; } else main.openFile( QStringList( s ) ); } // splash->showMessage(QObject::tr("Loading:")+" "+QObject::tr("Plugins"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.loadPlugins(); // splash->showMessage(QObject::tr("Main Window creation"), Qt::AlignRight | Qt::AlignTop, Qt::white); qApp->processEvents(); main.show(); splash->finish(&main); delete splash; splash = 0; // app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); main.checkQtDatabase(); return app.exec(); } qdevelop-v0.28/src/.svn/text-base/openfileimpl.cpp.svn-base0000444000175000017500000001071311362261065022701 0ustar jlbrdjlbrd/* * Open File in Project dialog implementation * Copyright (C) 2007 Branimir Karadzic * * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include "openfileimpl.h" OpenFileImpl::OpenFileImpl(QWidget* _pParent, ProjectManager* _pProjectManager, MainImpl* _pMainImpl) : QDialog(_pParent) , m_pProjectManager(_pProjectManager) , m_pMainImpl(_pMainImpl) { setupUi(this); connect(FilterEdit, SIGNAL(textChanged(QString)), this, SLOT(slotTextChanged(QString)) ); connect(FilterEdit, SIGNAL(returnPressed()), this, SLOT(slotSelect()) ); connect(FileList, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(slotSelect()) ); FilterEdit->installEventFilter(this); QList projectsList; m_pProjectManager->childsList(0, "PROJECT", projectsList); // TODO - FileList should be regenerated based on FilterEdit string. for (int nbProjects = 0; nbProjects < projectsList.count(); nbProjects++) { QList dirSourcesList; m_pProjectManager->childsList(projectsList.at(nbProjects), "SOURCES", dirSourcesList); m_pProjectManager->childsList(projectsList.at(nbProjects), "HEADERS", dirSourcesList); m_pProjectManager->childsList(projectsList.at(nbProjects), "RESOURCES", dirSourcesList); for (int nbSrc=0; nbSrc < dirSourcesList.count(); nbSrc++) { QList filesList; m_pProjectManager->childsList(dirSourcesList.at(nbSrc), "DATA", filesList); for (int nbFic=0; nbFic < filesList.count(); nbFic++) { QString name = filesList.at(nbFic)->text(0); FileList->insertItem(0, name); } } FileList->sortItems(Qt::AscendingOrder); } FilterEdit->setFocus(); } bool OpenFileImpl::eventFilter(QObject* _pObject, QEvent* _pEvent) { if ( _pObject == FilterEdit && _pEvent->type() == QEvent::KeyPress ) { switch (static_cast(_pEvent)->key()) { case Qt::Key_Up: case Qt::Key_Down: case Qt::Key_PageDown: case Qt::Key_PageUp: QApplication::sendEvent(FileList, _pEvent); break; default: break; } } return QWidget::eventFilter(_pObject, _pEvent); } void OpenFileImpl::slotTextChanged(QString text) { QList matches = FileList->findItems(text, Qt::MatchContains); if ( 0 < matches.count() ) { FileList->setCurrentItem(matches.at(0)); } else { FileList->setItemSelected( FileList->currentItem(), false ); } } void OpenFileImpl::slotSelect() { QList selected = FileList->selectedItems(); if ( 0 < selected.count() ) { QListWidgetItem* pItem = selected.at(0); QList projectsList; m_pProjectManager->childsList(0, "PROJECT", projectsList); QString filename = pItem->text(); QString projectName = m_pProjectManager->projectFilename(projectsList.at(0)); QString projectDirectory = m_pProjectManager->projectDirectory(projectsList.at(0)); QString absoluteName = QDir(projectDirectory+"/"+filename).absolutePath(); QStringList locationsList; locationsList << absoluteName; foreach(QString dir, m_pProjectManager->dependpath(projectsList.at(0)) ) { locationsList << QDir(projectDirectory + "/" +dir + "/" + filename).absolutePath(); } m_pMainImpl->openFile( locationsList ); } accept(); } qdevelop-v0.28/src/.svn/text-base/optionsimpl.h.svn-base0000444000175000017500000000505311362261065022241 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef OPTIONSIMPL_H #define OPTIONSIMPL_H #include "ui_options.h" // class CppHighlighter; class QTextCodec; // class OptionsImpl : public QDialog, public Ui::Options { Q_OBJECT public: OptionsImpl(QWidget * parent, QFont f, bool num, bool marge, bool ind, bool coloration, int tab, bool enr, bool res, QTextCharFormat pre, QTextCharFormat qt, QTextCharFormat commSimples, QTextCharFormat commMulti, QTextCharFormat guillemets, QTextCharFormat meth, QTextCharFormat cles, bool autoMask, int end, bool spaces, bool complete, QColor back, bool prompt, bool hcl, QColor lc, bool bk, // Divius: comments autoclose bool comm, // bool tc, int in, QString directory, bool m, QColor mc, bool close, QString pd, QString mo, int mi, QString ic, bool editorToolbars, bool whiteSpaces, int rightMargin, QString docDirectory, QColor textCol, bool ac, // Divius: word wrap bool ww, // Divius: autohide find/replace int findReplace, // Divius: smart click bool sc ); QFont font(); CppHighlighter *syntaxe() { return cppHighLighter; }; QColor backgroundColor(); QColor currentLineColor(); QColor matchingColor(); QColor textColor(); int mib(); private: CppHighlighter *cppHighLighter; QColor m_backgroundColor; QColor m_textColor; QColor m_colorCurrentLine; QColor m_matchingColor; void findCodecs(); void setCodecList(const QList &list, int m); QList codecs; private slots: void slotChangeColor(); void slotDefault(); void slotChooseProjectsDirectory(); void slotChoosePluginsDirectory(); void slotChooseIncludeDirectory(); void slotChooseDocumentationDirectory(); signals: }; #endif qdevelop-v0.28/src/.svn/text-base/treeclasses.h.svn-base0000444000175000017500000000764611362261065022213 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TREECLASSES_H #define TREECLASSES_H #include #include #include #include #include // class QProcess; // typedef struct { QString key; QStringList parents; QString name; QString implementation; QString declaration; QString ex_cmd; QString language; QString classname; QString structname; QString enumname; QString access; QString signature; QString kind; bool markedForDelete; QString icon; } ParsedItem; Q_DECLARE_METATYPE(ParsedItem) // typedef struct { QStringList parents; QString filename; int numTempFile; QString ext; } TempProcess; // class ProjectManager; class MainImpl; // class TreeClasses : public QTreeWidget { Q_OBJECT public: TreeClasses(QWidget * parent); ~TreeClasses(); void setProjectManager( QPointer g ) { m_projectManager = g; }; void setCtagsIsPresent( bool b ) { m_ctagsPresent = b; }; void setMainImpl(MainImpl *m) { m_mainImpl=m; }; void clear(); void toDB(QString projectDirectory); void fromDB(QString projectDirectory); void setCtagsName(QString s) { m_ctagsName=s;}; const QList *treeClassesItems() { return m_treeClassesItems; }; //const QList *treeClassesItems(QString classname); QString signature(QString line); QStringList methods(QString filename, QString classname); protected: void mousePressEvent( QMouseEvent * event ); void mouseDoubleClickEvent ( QMouseEvent * event ); private: QList *m_treeClassesItems; QTreeWidgetItem *m_itemClicked; QList m_listDeletion; QTreeWidgetItem *findItem(const QTreeWidgetItem *begin, const QString text, const QString key, const bool recursive); QTreeWidgetItem *findAndCreate(QTreeWidgetItem *begin, QString pixname, QString text, QString key, bool recursive, bool update, ParsedItem parsedItem); bool m_ctagsPresent; QMap tempProcessMap; MainImpl *m_mainImpl; QPointer m_projectManager; void markForDeletion(QTreeWidgetItem *current, QString filename, QString ext, QStringList parents); void deleteMarked(QTreeWidgetItem *current); QString markForSorting(QString kind, QString text); void setSortingSymbols( QTreeWidgetItem *it, bool active, QString filename, QString ext, QStringList parents); void setTooltip(QTreeWidgetItem *item, ParsedItem parsedItem); void writeItemsInDB(const QTreeWidgetItem *it, QString parents, QSqlQuery query, QString projectDirectory); void createItemFromDB(QTreeWidgetItem *parent, QString text, QString tooltip, QString parents, ParsedItem parsedItem); QString getPathHash(QString const& pathName); QString m_ctagsName; private slots: void slotParseCtags(); void slotOpenImplementation(); void slotOpenDeclaration(); void slotRefresh(); void parse(ParsedItem parsedItem); void slotAddNewClassMethod(); void slotAddNewClassVariable(); void slotAddGetSetMethod(); public slots: void updateClasses( QString filename, QString buffer, QStringList parents, QString ext); signals: //void modifiedClasse(QString); }; #endif qdevelop-v0.28/src/.svn/text-base/mainimpl.h.svn-base0000444000175000017500000002203211362261065021466 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef MAINIMPL_H #define MAINIMPL_H #include "ui_main.h" #include "debug.h" #include #include #include #include #include "treeproject.h" class QProcess; class Editor; class Build; class QComboBox; class ProjectManager; class Assistant; class Designer; class QActionGroup; class TabWidget; class FindFileImpl; class StackImpl; class InitCompletion; // typedef QPair Bookmark; Q_DECLARE_METATYPE(Bookmark) // class MainImpl : public QMainWindow, public Ui::Main { Q_OBJECT public: void automaticCompilationState(Editor *editor, int state); QList allEditors(); MainImpl(QWidget * parent = 0); ~MainImpl(); enum ExecuteVersion { ExecuteNone, ExecuteRelease, ExecuteDebug}; Editor * openFile(QStringList locationsList, int numLine=-1, bool silentMode=false, bool moveTop=false); QString loadINI(); bool saveBeforeBuild() { return m_saveBeforeBuild; }; bool openProject(QString s); QString qmakeName() { return m_qmakeName; }; QString ctagsName() { return m_ctagsName; }; QString lupdateName() { return m_lupdateName; }; QString lreleaseName() { return m_lreleaseName; }; enum EndLine { Default, Unix, Windows }; TabWidget *tabEditors() const { return m_tabEditors; }; bool ctagsIsPresent() { return m_ctagsIsPresent; }; void closeTab(int numTab); void closeOtherTab(int numTab); bool showTreeClasses() { return m_showTreeClasses; }; void toggleBookmark(Editor *editor, QString text, bool activate, QTextBlock block); QMenu *bookmarksMenu() { return menuBookmarks; }; const QList *treeClassesItems() { return treeClasses->treeClassesItems(); }; void loadPlugins(); void renameEditor(QString oldName, QString newName); void configureCompletion(QString projectDirectory); void gotoFileInProject(QString& filename); Editor * currentEditor(); Editor * givenEditor(int i); void resetProjectsDirectoriesList(); void resetDebugAfterBuild(); int mibCodec() { return m_mibCodec; } void checkQtDatabase(); InitCompletion* buildQtDatabase() { return m_buildQtDatabase; } inline void setQmakeForcedMode(const QString & mode) { actionDebug_mode->setChecked(false); actionRelease_mode->setChecked(false); if (mode == "debug") { actionDebug_mode->setChecked(true); } else if (mode == "release") { actionRelease_mode->setChecked(true); } m_lastForcedMode = mode; } inline QString qmakeForcedMode() const { return m_lastForcedMode; } private: // Functions void createConnections(); void updateActionsRecentsFiles(); void updateActionsRecentsProjects(); QString strippedName(const QString &fullFileName); void setCurrentProject(const QString &file); void setCurrentFile(const QString &file); void saveINI(); void setCrossButton(bool activate); bool modifiedEditors(); // Objects and Variables bool m_automaticCompilation; QColor m_textColor; bool m_buildQtDatabaseAsked; Build *m_builder; Debug *m_debug; ProjectManager *m_projectManager; enum { maxRecentsFiles = 10 }; QAction *actionsRecentsFiles[maxRecentsFiles]; enum { maxRecentsProjects = 10 }; QAction *actionsProjetsRecents[maxRecentsProjects]; QStringList m_projectsDirectoriesList; bool m_clean; bool m_build; Assistant *m_assistant; Designer *m_designer; QFont m_font; int m_tabStopWidth; QString m_qmakeName; QString m_makeName; QString m_makeOptions; QString m_gdbName; QString m_ctagsName; QString m_linguistName; QString m_lupdateName; QString m_lreleaseName; QString m_designerName; QString m_qtInstallHeaders; QString m_projectsDirectory; QString m_pluginsDirectory; QString m_includeDirectory; QString m_documentationDirectory; bool m_lineNumbers, m_selectionBorder, m_autoIndent, m_cppHighlighter; bool m_saveBeforeBuild; bool m_restoreOnStart; bool m_promptBeforeQuit; ExecuteVersion m_debugAfterBuild; bool m_buildAfterDebug; bool m_checkEnvironmentOnStartup; bool m_autoMaskDocks; bool m_autoCompletion; bool m_autobrackets; // Divius: comments autoclose bool m_autocomments; // bool m_match; bool m_highlightCurrentLine; bool m_ctagsIsPresent; bool m_configureCompletionNeeded; QColor m_backgroundColor; QColor m_currentLineColor; QColor m_matchingColor; EndLine m_endLine; bool m_tabSpaces; bool m_closeButtonInTabs; bool m_displayEditorToolbars; bool m_displayWhiteSpaces; int m_rightMarginLine; bool m_wordWrap; int m_hideFindReplace; QToolButton *crossButton; QPointer m_projectGroup; QPointer m_buildingGroup; QTextCharFormat m_formatPreprocessorText, m_formatQtText, m_formatSingleComments; QTextCharFormat m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords; TabWidget *m_tabEditors; FindFileImpl *m_findInFiles; StackImpl *m_stack; int m_intervalUpdatingClasses; bool m_showTreeClasses; InitCompletion *m_completion; InitCompletion *m_buildQtDatabase; QAction *actionActiveBookmark; int m_mibCodec; bool m_smartClick; //QList m_maximizedEditors; QAction *separatorOtherFile, *actionOtherFile; QHash toolbarStatus; QString m_lastForcedMode; protected: void closeEvent( QCloseEvent * event ); private slots: void slotClearAllWarningsErrors(); void slotPreviousWarningError(); void slotNextWarningError(); void slotQmake(); void slotOpen(); void slotOpenProject(); void slotSaveFile(); void slotCompleteCode(); void slotSaveFileAs(); bool slotSaveAll(); void slotBuild(bool clean=false, bool build=true, bool forceQmake=false, QString forceMode = QString()); void slotBuildRelease(); void slotBuildDebug(); void slotForgetBuildMode(); void slotNewProject(); void slotRebuild(); void slotStopBuild(); void slotClean(); void slotCut(); void slotCopy(); void slotPaste(); void slotUndo(); void slotRedo(); void slotGotoLine(); void slotSelectAll(); void slotUnindent(); void slotIndent(); void slotFind(); void slotReplace(); void slotFindContinue(); void slotFindPrevious(); void slotEndBuild(); bool slotDebug(bool executeOnly=false); void slotExecuteWithoutDebug(); void slotContinueDebug(); void slotEndDebug(); void slotMessagesDebug(QString message); void slotFindFilesActivated(QListWidgetItem *item, QListWidgetItem *); void slotDoubleClickFindLines( QListWidgetItem *item); void slotModifiedEditor(Editor *editor, bool modified); void slotStepInto(); void slotStepOver(); void slotStepOut(); void slotEditToGdb(QString); void slotOnPause(); void slotOpenRecentFile(); void slotOpenRecentProject(); void slotAbout(); void slotHelpQtWord(); void slotOptions(); void slotClickTreeFiles(QTreeWidgetItem *item, int); void slotCloseCurrentTab(); void slotPreviousTab(); void slotNextTab(); void slotOtherFile(); void slotSetFocusToEditor(); void slotToggleBreakpoint(); void slotShortcuts(); void slotFindInFiles(); void slotNewFile(); void slotToggleComment(); void slotComment(); void slotUncomment(); void slotParameters(); void slotCurrentTabChanged(int index); void slotDebugVariables( QList list); void slotAddDebugVariable(); void slotRemoveDebugVariable(); void slotToggleBookmark(); void slotActivateBookmark(QAction *action=0); void slotPreviousBookmark(); void slotNextBookmark(); void slotClearAllBookmarks(); void slotGotoMatchingBracket(); void slotSimplePlugin(); void slotTextEditPlugin(); void slotConfigPlugin(); void slotPrint(); void slotOpenFile(); void slotGotoDeclaration(); void slotGotoImplementation(); void slotMethodsList(); void slotNewQtVersion(); void slotUpdateOtherFileActions(); void on_actionEditor_mode_triggered(); void on_actionFullDocksView_triggered(); void on_actionMinimalDocksView_triggered(); public slots: void slotCompile(bool automaticCompilation=false); void slotBuildQtDatabaseEnded(); void slotShowMessage(QString message); void slotDoubleClickTreeFiles(QTreeWidgetItem *item, int); bool slotCloseAllFiles(); void slotToolsControl(bool show=true); void slotUpdateClasses(QString filename, QString buffer); bool slotCloseProject(bool hide=false); //void slotShowMaximized(Editor *editor=0); signals: void debugCommand(QString); void stopBuild(); void stopDebug(); void pauseDebug(); void resetExecutedLine(); void otherVariables(QStringList); }; #endif qdevelop-v0.28/src/.svn/text-base/addnewclassmethodimpl.cpp.svn-base0000444000175000017500000001755211362261065024601 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassmethodimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include // AddNewClassMethodImpl::AddNewClassMethodImpl( MainImpl * parent, TreeClasses *treeClasses, QString implementation, QString declaration, QString classname) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_implementation(implementation), m_declaration(declaration), m_classname(classname) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private" << "public slots" << "protected slots" << "private slots" << "signals"); returnType->addItems(QStringList() << "void" << "bool" << "char" << "short" << "long" << "int" << "signed" << "unsigned " << "float" << "double" << "QString" ); setWindowTitle ( tr("Add New Method in class %1").arg(m_classname) ); } // void AddNewClassMethodImpl::on_okButton_clicked() { QString l_methodName = methodName->text().simplified(); if( l_methodName.isEmpty() ) return; QString l_parameters = parameters->text().simplified(); if ( !l_parameters.startsWith( "(" ) ) l_parameters = "("+l_parameters; if ( !l_parameters.endsWith( ")" ) ) l_parameters = l_parameters+")"; QString l_scope = scope->currentText(); QString l_returnType = returnType->currentText(); bool l_Inline = Inline->isChecked(); bool l_Virtual = Virtual->isChecked(); bool l_Static = Static->isChecked(); bool l_Pure = Pure->isChecked(); if ( m_implementation.section("|", 0, 0).isEmpty() && !l_Inline && !l_Pure && l_scope.simplified() != "signals" ) { QMessageBox::warning(this, "QDevelop", tr("An implementation file is required."), tr("Cancel") ); return; } // Find if method already exists in class (same name and same signature). QStringList listMethods = m_treeClasses->methods(m_declaration.section("|", 0, 0), m_classname); foreach(QString s, listMethods) { QString sign = l_returnType+" "+l_methodName+l_parameters; if ( s.contains(l_methodName) && m_treeClasses->signature(s) == m_treeClasses->signature(sign) ) { QMessageBox::warning(this, "QDevelop", tr("%1 already exists in class %2.").arg(l_methodName+m_treeClasses->signature(sign), m_classname), tr("Cancel") ); return; } } // First, add in declaration file or editor // The file is perhaps already opened. Find filename in tabs. QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, insertAfterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(insertAfterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } if ( l_Pure || l_Inline || l_scope.simplified() == "signals" ) accept(); // Now, add in implementation file or editor if ( l_parameters.contains( "=" ) ) { QString formattedParams; foreach(QString param, l_parameters.remove("(").remove(")").split(",") ) { param = param.simplified(); param = param.section("=", 0, 0); formattedParams += " " + param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.simplified().lastIndexOf(",") ); l_parameters ="(" + formattedParams + ")"; } editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } insertedText = l_returnType + " " + m_classname + "::" + l_methodName + l_parameters; insertedText += "\n{\n\t// TODO\n}\n"; if ( editor ) { // Write content in opened editor lines = editor->toPlainText().split("\n"); insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, write content in file on disk QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } accept(); } qdevelop-v0.28/src/.svn/text-base/tabwidget.cpp.svn-base0000444000175000017500000001626411362261065022177 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include "tabwidget.h" #include "mainimpl.h" #include "editor.h" // TabWidget::TabWidget(MainImpl *parent) : QTabWidget(parent), m_mainImpl( parent ) { setMouseTracking( true ); cross = new QToolButton(this); cross->hide(); cross->setIcon( QIcon(":/toolbar/images/cross.png") ); connect(cross, SIGNAL(clicked()), this, SLOT(slotCloseTab()) ); cross->setGeometry(0,0,15,15); tabBar()->installEventFilter(this); m_clickedItem = -1; m_closeButtonInTabs = true; } // TabWidget::~TabWidget() {} // bool TabWidget::eventFilter(QObject *obj, QEvent *event) { if (obj==tabBar()) { // this code handles the tab movement if (event->type() == QEvent::Leave) { QPoint point = cross->mapToGlobal( QPoint(0, 0) ); QRect rect(point.x(), point.y(), cross->width(), cross->height() ); if ( !rect.contains( QCursor::pos() ) ) cross->hide(); } else if (event->type() == QEvent::HoverMove && m_closeButtonInTabs ) { QHoverEvent *mouseEvent = static_cast(event); mousePos = mouseEvent->pos(); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { m_clickedItem= i; break; } } cross->setGeometry(tabBar()->tabRect(m_clickedItem).x()+tabBar()->tabRect(m_clickedItem).width()-cross->width()-5, //tabBar()->height()-(tabBar()->tabRect(m_clickedItem).height()/2), 5, cross->width(), cross->height()); cross->show(); } else if (event->type() == QEvent::MouseButtonRelease ) { qApp->restoreOverrideCursor(); } else if (event->type() == QEvent::MouseButtonPress ) { QMouseEvent *mouseEvent = static_cast(event); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { m_clickedItem = i; break; } } if ( mouseEvent->button() == Qt::LeftButton ) qApp->setOverrideCursor( Qt::OpenHandCursor ); if ( mouseEvent->button() == Qt::RightButton ) { QMenu *menu = new QMenu(this); connect(menu->addAction(QIcon(":/toolbar/images/cross.png"), tr("Close Tab")), SIGNAL(triggered()), this, SLOT(slotCloseTab()) ); connect(menu->addAction(QIcon(":/toolbar/images/fileclose.png"), tr("Close Other Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseOtherTab()) ); connect(menu->addAction(QIcon(":/toolbar/images/fileclose.png"), tr("Close All Tabs")), SIGNAL(triggered()), this, SLOT(slotCloseAllTab()) ); menu->exec(mouseEvent->globalPos()); delete menu; } } else if (event->type() == QEvent::MouseMove ) { QMouseEvent *mouseEvent = static_cast(event); for (int i=0; icount(); i++) { if ( tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { if ( swapTabs(i, m_clickedItem) ) { setCurrentWidget(widget(i)); update(); int x; if ( !tabBar()->tabRect(i).contains( mouseEvent->pos() ) ) { if ( tabBar()->tabRect(m_clickedItem).x() < tabBar()->tabRect(i).x() ) x = tabBar()->tabRect(i).x(); else x = tabBar()->tabRect(i).x()+(tabBar()->tabRect(i).width()-(qAbs(tabBar()->tabRect(i).width()-tabBar()->tabRect(m_clickedItem).width()))); QPoint point = QPoint( x, mouseEvent->pos().y() ); point = widget(i)->mapToGlobal( point ); m_clickedItem = i; QCursor::setPos ( point.x(), QCursor::pos().y() ); } m_clickedItem = i; break; } } } } } return QTabWidget::eventFilter( obj, event); } /** * \brief set the tooltip of a recently inserted tab * * When a new tab is inserted, a tooltip is set to that tab. * In the past this code was in the event filter, which worked * until Qt 4.4, but since it triggers an infinite loop. * * This is also the correct way of handling this. * \since 0.26 */ void TabWidget::tabInserted ( int index ) { Editor *editor = m_mainImpl->givenEditor(index); QString filename; if( editor ) filename = editor->filename(); tabBar()->setTabToolTip(index,filename); } // void TabWidget::setCloseButtonInTabs(bool b) { m_closeButtonInTabs = b; if( !m_closeButtonInTabs ) cross->hide(); } // bool TabWidget::swapTabs(int index1, int index2) { if (index1==index2) return false; int t1 = qMin(index1,index2); int t2 = qMax(index1,index2); index1=t1; index2=t2; QString name1 = tabBar()->tabText(index1); QString name2 = tabBar()->tabText(index2); QWidget *editor1 = widget(index1); QWidget *editor2 = widget(index2); removeTab(index2); removeTab(index1); insertTab(index1,editor2,name2); insertTab(index2,editor1,name1); return true; } // void TabWidget::slotCloseTab() { cross->hide(); m_mainImpl->closeTab( m_clickedItem ); } // void TabWidget::slotCloseAllTab() { m_mainImpl->slotCloseAllFiles( ); } // void TabWidget::slotCloseOtherTab() { m_mainImpl->closeOtherTab( m_clickedItem ); } // // kate: space-indent on; tab-indent off; tab-width 4; indent-width 4; mixedindent off; indent-mode cstyle; // kate: end-of-line: unix qdevelop-v0.28/src/.svn/text-base/assistant.cpp.svn-base0000444000175000017500000000564011362261065022232 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "assistant.h" #include "mainimpl.h" #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // Assistant::Assistant() { process = new QProcess( this ); socket = new QTcpSocket( this ); } // Assistant::~Assistant() { if ( process->state() == QProcess::Running ) { process->terminate(); } } // void Assistant::showQtWord(QString className, QString word) { QString lu; QString doc = QDir::cleanPath( m_documentationDirectory ) + "/html/"; if ( process->state() == QProcess::NotRunning ) { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) process->start(m_assistantName, QStringList() << "-enableRemoteControl" ); else { process->start(m_assistantName, QStringList() << "-server" ); process->waitForFinished(3000); lu = process->readAll(); if ( lu.isEmpty() ) { QMessageBox::information(0, "QDevelop", QObject::tr("Unable to start Assistant !") ); return; } else { m_port = lu.toUShort(); socket->connectToHost( "localhost", m_port ); } } } QTextStream os( socket ); if( !word.isEmpty() ) { if( className == word ) { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) { QTextStream str(process); str << QString("activateIdentifier "+className) << endl; } else os << doc+className.toLower()+".html" << "\n"; } else { if( m_qVersion.left(5).remove(".").toInt() >= 440 ) { if (!className.isEmpty()) { QTextStream str(process); str << QString("activateIdentifier "+className+"::"+word) << endl; } else { QTextStream str(process); str << QString("activateKeyword "+word) << endl; } } else os << doc+className.toLower()+".html#"+word << "\n"; } } if( m_qVersion.left(5).remove(".").toInt() < 440 ) os.flush(); } qdevelop-v0.28/src/.svn/text-base/designer.h.svn-base0000444000175000017500000000255411362261065021467 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DESIGNER_H #define DESIGNER_H // #include // class MainImpl; class QProcess; class QTcpSocket; // class Designer : public QObject { public: Designer(); ~Designer(); void openUI(QString file); void setName( QString s ) { m_designerName = s; }; // protected: // private: QProcess *process; QTcpSocket *socket; QString m_location; quint16 m_port; QString m_designerName; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/.svn/text-base/addscopeimpl.cpp.svn-base0000444000175000017500000000222111362261065022655 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addscopeimpl.h" #include "projectmanager.h" #include #include #include // AddScopeImpl::AddScopeImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); } // qdevelop-v0.28/src/.svn/text-base/findfileimpl.cpp.svn-base0000444000175000017500000001525211362261065022663 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "findfileimpl.h" #include #include #include #include #include #include #include // FindFileImpl::FindFileImpl( QWidget * parent, QStringList directories, QListWidget *listResult, QListWidget *findLines) : QDialog(parent), m_parent(parent), m_listResult(listResult), m_listLines(findLines) { setupUi(this); // BK - store last entered search on the top. textFind->setInsertPolicy(QComboBox::InsertAtTop); textReplace->setInsertPolicy(QComboBox::InsertAtTop); for (int i=0; iaddItem(directories.at(i)+"/"); //initialize the variable used to remember where we are in the recursive search algorithm m_recursiveDepth=0; } // void FindFileImpl::setDefaultWord( QString s) { defaultWord=s; } // void FindFileImpl::showEvent(QShowEvent* _pEvent) { // BK - put focus on textFind and select previous search word textFind->setFocus(); QLineEdit* pLineEdit = textFind->lineEdit(); //set the default word if existing if(!defaultWord.isEmpty()) { pLineEdit->setText(defaultWord); defaultWord.clear(); } //select the displayed word pLineEdit->setSelection(0, pLineEdit->text().count()); QWidget::showEvent(_pEvent); } // void FindFileImpl::on_chooseDirectoryButton_clicked() { QString s = QFileDialog::getExistingDirectory( m_parent, tr("Choose a directory"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel clicked return; } comboFindIn->addItem(s); comboFindIn->setCurrentIndex( comboFindIn->count()-1 ); } // void FindFileImpl::on_findButton_clicked() { // BUG when button Find/Close is pressed, textFind doesn't remember last entered string. if ( !comboFindIn->count() || textFind->currentText().isEmpty() ) return; if ( findButton->text() == tr("&Find") ) { if ( textFind->findText( textFind->currentText() ) == -1 ) { textFind->addItem( textFind->currentText() ); } findButton->setText(tr("&Stop")); closeButton->setEnabled( false ); m_stop = false; m_listResult->clear(); m_listLines->clear(); } else { findButton->setText(tr("&Find")); closeButton->setEnabled( true ); m_stop = true; } find( comboFindIn->currentText() ); if ( m_listResult->count() ) { m_listResult->setItemSelected( m_listResult->item(0), true); m_listLines->addItems( m_listResult->item(0)->data(Qt::UserRole).toStringList() ); } findButton->setText(tr("&Find")); closeButton->setEnabled( true ); } // void FindFileImpl::find( QString directory ) { //save the folder only if the search is just beginning if(m_recursiveDepth==0) { m_searchDirectory=directory; } m_recursiveDepth++; //search is one-level deeper QDir dir(directory); QString filterNames = comboFileTypes->currentText(); filterNames.remove(" "); QFileInfoList list = dir.entryInfoList(filterNames.split(";"), QDir::AllDirs | QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); foreach(QFileInfo fileInfo, list) { qApp->processEvents(); if ( m_stop ) return; if ( fileInfo.isFile() ) { findInFile( fileInfo.absoluteFilePath() ); } else if ( checkRecursive->isChecked() )// Directory { find( fileInfo.absoluteFilePath() ); } } //search is one-level less deep m_recursiveDepth--; } // void FindFileImpl::findInFile( QString filename ) { QFile file(filename); bool replace = checkReplace->isChecked(); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QString tempFileName = QDir::tempPath() + QDir::separator() + "qdtemp-" + QDateTime::currentDateTime().toString("yyMMddmmss") + QFileInfo(filename).fileName(); QFile tempFile(tempFileName); QTextStream tempStream; if (replace) { if (!tempFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { qDebug() << tr("Cannot open temporary file %1").arg(tempFileName); replace = false; } else { tempStream.setDevice(&tempFile); } } // QRegExp exp; if ( checkWholeWords->isChecked() ) exp.setPattern( "\\b"+textFind->currentText()+"\\b"); else exp.setPattern( textFind->currentText()); exp.setCaseSensitivity((Qt::CaseSensitivity) checkCase->isChecked()); // QTextStream in(&file); int numLine = 0; QStringList lines; while (!in.atEnd()) { numLine++; QString line = in.readLine(); if (replace) { line = line.replace(exp, textReplace->currentText()); tempStream << line << endl; } if ( line.contains(exp) ) { lines << tr("Line")+" "+QString::number(numLine)+" : "+line; } } if (tempFile.isOpen()) tempFile.close(); file.close(); if (replace) { QFile::remove(filename); QFile::copy(tempFileName, filename); QFile::remove(tempFileName); } if ( lines.count() ) { //display only the relative path m_listResult->addItem( tr("File")+" : "+filename.mid(m_searchDirectory.size()) ); QListWidgetItem *item = m_listResult->item(m_listResult->count()-1); item->setData(Qt::UserRole, QVariant(lines) ); //complete filename (used in slotDoubleClickFindLines) item->setData(Qt::UserRole+1, QVariant(filename) ); } } // qdevelop-v0.28/src/.svn/text-base/addexistantimpl.h.svn-base0000444000175000017500000000256011362261065023056 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDEXISTANT_H #define ADDEXISTANT_H #include "ui_addexistant.h" // class ProjectManager; // class AddExistantImpl : public QDialog, public Ui::AddExistant { Q_OBJECT public: AddExistantImpl(ProjectManager * parent = 0); public slots: void slotComboProjects(QString projectName); private: ProjectManager *m_projectManager; QString m_projectDirectory; private slots: void slotAccept(); void slotFilesChoice(); void slotLocationChoice(); }; #endif qdevelop-v0.28/src/.svn/text-base/registersimpl.h.svn-base0000444000175000017500000000055611362261065022560 0ustar jlbrdjlbrd#ifndef REGISTERSIMPL_H #define REGISTERSIMPL_H // #include #include "ui_registers.h" // class RegistersImpl : public QWidget, public Ui::Registers { Q_OBJECT public: void registers(QString regs); RegistersImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: void on_applyButton_clicked(); signals: void debugCommand(QString); }; #endif qdevelop-v0.28/src/.svn/text-base/lineedit.cpp.svn-base0000444000175000017500000000210411362261065022006 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "lineedit.h" // LineEdit::LineEdit( QWidget* parent ) : QLineEdit( parent ) { } // void LineEdit::mousePressEvent ( QMouseEvent * ) { selectAll(); } // qdevelop-v0.28/src/.svn/text-base/openfileimpl.h.svn-base0000444000175000017500000000302711362261065022346 0ustar jlbrdjlbrd/* * Open File in Project dialog implementation * Copyright (C) 2007 Branimir Karadzic * * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef __OPENFILEIMPL_H__ #define __OPENFILEIMPL_H__ #include "ui_openfile.h" #include "mainimpl.h" #include "projectmanager.h" class OpenFileImpl : public QDialog, public Ui::OpenFile { Q_OBJECT public: OpenFileImpl(QWidget* _pParent, ProjectManager* _pProjectManager, MainImpl* _pMainImpl); bool eventFilter(QObject* _pObject, QEvent* _pEvent); private: ProjectManager* m_pProjectManager; MainImpl* m_pMainImpl; private slots: void slotTextChanged(QString text); void slotSelect(); }; #endif // __OPENFILEIMPL_H__ qdevelop-v0.28/src/.svn/text-base/addsetgetimpl.cpp.svn-base0000444000175000017500000001612411362261065023046 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addsetgetimpl.h" #include "mainimpl.h" #include "treeclasses.h" #include "tabwidget.h" #include "editor.h" #include #include #include #include // AddSetGetImpl::AddSetGetImpl(MainImpl * parent, TreeClasses *treeClasses, QString declaration, QString implementation, QString classname, QString type, QString variableName) : QDialog(parent), m_mainImpl(parent), m_treeClasses(treeClasses), m_declaration(declaration), m_implementation(implementation), m_classname(classname), m_type(type), m_variableName(variableName) { setupUi(this); groupBox->setTitle( groupBox->title() + " " + m_variableName ); setName->setText( "set"+m_variableName.toUpper().left(1)+m_variableName.mid(1) ); getName->setText( "get"+m_variableName.toUpper().left(1)+m_variableName.mid(1) ); } // void AddSetGetImpl::on_okButton_clicked() { if ( get->isChecked() && getName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The get method name is empty", tr("Cancel") ); return; } if ( set->isChecked() && setName->text().isEmpty() ) { QMessageBox::warning(this, "QDevelop", "The set method name is empty", tr("Cancel") ); return; } // Add get/set methods QString insertedText; if ( get->isChecked() ) { if ( getInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\t" + m_type + " " + getName->text() + "() { return " + m_variableName + "; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\t" + m_type + " " + getName->text() + "();"; insertInDeclaration("public", insertedText); insertedText = m_type + " " + m_classname+"::" + getName->text() + "()\n{\n\treturn " + m_variableName + ";\n}\n"; insertInImplementation(insertedText); } } if ( set->isChecked() ) { if ( setInline->isChecked() || m_implementation.isEmpty() ) { insertedText = "\tvoid " + setName->text() + "( "+m_type+" value) { " + m_variableName + " = value; }"; insertInDeclaration("public", insertedText); } else { insertedText = "\tvoid " + setName->text() + "( "+m_type+" value);"; insertInDeclaration("public", insertedText); insertedText = "void " + m_classname+"::"+setName->text() + "("+m_type+" value)\n{\n\t" + m_variableName + " = value;\n}\n"; insertInImplementation(insertedText); } } accept(); } // void AddSetGetImpl::insertInDeclaration(QString scope, QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_declaration.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor lines = editor->toPlainText().split("\n"); } else { // The file is not opened, get content from file QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); } int indexScope = -1; int indexBracket = -1; int indexQ_OBJECT = -1; for (int ind = m_declaration.section("|", 1, 1).toInt(); lines.count()>0 && indinsertText(insertedText, afterLine+1); } else { foreach(QString s, insertedText.split("\n") ) { lines.insert(afterLine++, s); } QFile file(m_declaration.section("|", 0, 0)); file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_declaration.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } // void AddSetGetImpl::insertInImplementation(QString insertedText) { QStringList lines; Editor *editor = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == m_implementation.section("|", 0, 0)) { editor = ed; } } // if ( editor ) { // Get content of opened editor insertedText += "\n"; editor->insertText(insertedText, -1); } else { // The file is not opened, get content from file QFile file(m_implementation.section("|", 0, 0)); file.open(QIODevice::ReadOnly | QIODevice::Text); lines = QString(file.readAll()).split("\n"); file.close(); foreach(QString s, insertedText.split("\n") ) { lines.append(s); } file.open(QIODevice::WriteOnly | QIODevice::Text); file.write( lines.join("\n").toLocal8Bit() ); file.close(); m_mainImpl->slotUpdateClasses(m_implementation.section("|", 0, 0), lines.join("\n").toLocal8Bit()); } } qdevelop-v0.28/src/.svn/text-base/shortcutsimpl.h.svn-base0000444000175000017500000000237711362261065022612 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SHORTCUTSIMPL_H #define SHORTCUTSIMPL_H #include "ui_shortcuts.h" // class MainImpl; // class ShortcutsImpl : public QDialog, public Ui::Shortcuts { Q_OBJECT public: ShortcutsImpl(QWidget * parent); private: MainImpl *m_mainImpl; void initTable(MainImpl *main); private slots: void slotAccept(); void slotDefault(); signals: }; #endif qdevelop-v0.28/src/.svn/text-base/toolscontrolimpl.cpp.svn-base0000444000175000017500000002250011362261065023636 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "toolscontrolimpl.h" #include "ui_warning.h" #include "misc.h" // #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // ToolsControlImpl::ToolsControlImpl( QWidget * parent, Qt::WFlags f) : QDialog(parent, f) { QString suffix; #ifdef Q_OS_WIN32 suffix = ".exe"; QChar dirDelimiter = '\\'; #else if ( QFileInfo("/etc/debian_version").exists() ) suffix = "-qt4"; QChar dirDelimiter = '/'; #endif setupUi(this); QSettings settings( getQDevelopPath() + "qdevelop.ini" , QSettings::IniFormat); settings.beginGroup("Options"); QString bindir = QLibraryInfo::location( QLibraryInfo::BinariesPath ); bindir.append( dirDelimiter ); qmake->setText( settings.value("m_qmakeName", bindir+"qmake"+suffix).toString() ); lupdate->setText ( settings.value("m_lupdateName" , bindir+"lupdate" +suffix).toString() ); lrelease->setText( settings.value("m_lreleaseName", bindir+"lrelease"+suffix).toString() ); #ifdef Q_OS_MACX linguist->setText( settings.value("m_linguistName", bindir+"Linguist.app").toString() ); designer->setText( settings.value("m_designerName", bindir+"Designer.app").toString() ); assistant->setText( settings.value("m_assistantName", bindir+"Assistant.app").toString() ); #else linguist->setText( settings.value("m_linguistName", bindir+"linguist"+suffix).toString() ); designer->setText( settings.value("m_designerName", bindir+"designer"+suffix).toString() ); assistant->setText( settings.value("m_assistantName", bindir+"assistant"+suffix).toString() ); #endif #ifdef Q_OS_WIN32 make->setText( settings.value("m_makeName").toString() ); gdb->setText( settings.value("m_gdbName").toString() ); ctags->setText( settings.value("m_ctagsName").toString() ); #else make->setText( settings.value("m_makeName", "/usr/bin/make").toString() ); gdb->setText( settings.value("m_gdbName", "/usr/bin/gdb").toString() ); ctags->setText( settings.value("m_ctagsName", "/usr/bin/ctags").toString() ); #endif checkEnvironmentOnStartup->setChecked( settings.value("m_checkEnvironmentOnStartup", true).toBool() ); settings.endGroup(); } // void ToolsControlImpl::on_qmakeLocation_clicked() { chooseLocation( qmake ); } // void ToolsControlImpl::on_makeLocation_clicked() { chooseLocation( make ); } // void ToolsControlImpl::on_gdbLocation_clicked() { chooseLocation( gdb ); } // void ToolsControlImpl::on_ctagsLocation_clicked() { chooseLocation( ctags ); } // void ToolsControlImpl::chooseLocation(QLineEdit *dest) { QString s = QFileDialog::getOpenFileName( this, tr("Please select the program"), QDir::cleanPath(dest->text()), "*" ); if ( !s.isEmpty() ) // Ok clicked { dest->setText( QDir::toNativeSeparators ( s ) ); } } // void ToolsControlImpl::on_test_clicked() { toolsControl(); } // bool ToolsControlImpl::toolsControl() { bool result = true; qmakeIcon->setPixmap( QPixmap(":/divers/images/good.png") ); makeIcon->setPixmap( QPixmap(":/divers/images/good.png") ); gdbIcon->setPixmap( QPixmap(":/divers/images/good.png") ); ctagsIcon->setPixmap( QPixmap(":/divers/images/good.png") ); linguistIcon->setPixmap( QPixmap(":/divers/images/good.png") ); lupdateIcon->setPixmap( QPixmap(":/divers/images/good.png") ); lreleaseIcon->setPixmap( QPixmap(":/divers/images/good.png") ); designerIcon->setPixmap( QPixmap(":/divers/images/good.png") ); assistantIcon->setPixmap( QPixmap(":/divers/images/good.png") ); // Control external tools QString lu; QProcess *testqmake = new QProcess(this); testqmake->start(qmake->text(), QStringList("-v")); testqmake->waitForFinished(5000); lu = testqmake->readAll(); m_qVersion = lu.section("Using Qt version", 1, 1).section("in ", 0, 0).simplified(); if ( lu.remove(":").left(15) != "QMake version 2" ) { qmakeIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } delete testqmake; // //m_qtInstallHeaders = QLibraryInfo::location( QLibraryInfo::HeadersPath ); // make control QProcess *testMake = new QProcess(this); testMake->start(make->text(), QStringList("-v")); testMake->waitForFinished(5000); lu = testMake->readAll(); if ( !lu.toLower().contains( "make" ) ) { makeIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testMake->waitForFinished(5000); testMake->terminate(); delete testMake; // gdb control QProcess *testGdb = new QProcess(this); testGdb->start(gdb->text(), QStringList("-v")); testGdb->waitForFinished(5000); lu = testGdb->readAll(); if ( lu.left(7) != "GNU gdb" ) { gdbIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testGdb->waitForFinished(5000); testGdb->terminate(); delete testGdb; // ctags control // ctags control QProcess *testCtags = new QProcess(this); testCtags->start(ctags->text(), QStringList("--version")); testCtags->waitForFinished(5000); lu = testCtags->readAll(); m_ctagsIsPresent = true; if ( lu.isEmpty() ) { if (testCtags->error() == QProcess::UnknownError) { QMessageBox::warning(this, "QDevelop", tr("Ctags was detected in path %1, but this version is too old.").arg(ctags->text()) , tr("Ok") ); } m_ctagsIsPresent = false; ctagsIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } testCtags->waitForFinished(5000); testCtags->terminate(); delete testCtags; // // linguist control QString s = linguist->text(); if ( !QFile::exists( s ) ) { linguistIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // lupdate control s = lupdate->text(); if ( !QFile::exists( s ) ) { lupdateIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // lrelease control s = lrelease->text(); if ( !QFile::exists( s ) ) { lreleaseIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // designer control s = designer->text(); if ( !QFile::exists( s ) ) { designerIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } // assistant control s = assistant->text(); if ( !QFile::exists( s ) ) { assistantIcon->setPixmap( QPixmap(":/divers/images/nogood.png") ); result = false; } return result; } // void ToolsControlImpl::on_buttonBox_clicked(QAbstractButton * button ) { // we only deal with "ok" and "cancel" clicks, all others are ignored if (buttonBox->button(QDialogButtonBox::Cancel) == button) { reject(); return; } else if (buttonBox->button(QDialogButtonBox::Ok) != button) return; QSettings settings( getQDevelopPath() + "qdevelop.ini" , QSettings::IniFormat); settings.beginGroup("Options"); settings.setValue("m_qmakeName", qmake->text()); settings.setValue("m_makeName", make->text()); settings.setValue("m_ctagsName", ctags->text()); settings.setValue("m_gdbName", gdb->text()); settings.setValue("m_linguistName", linguist->text()); settings.setValue("m_lreleaseName", lrelease->text()); settings.setValue("m_lupdateName", lupdate->text()); settings.setValue("m_designerName", designer->text()); settings.setValue("m_assistantName", assistant->text()); settings.setValue("m_checkEnvironmentOnStartup", checkEnvironmentOnStartup->isChecked()); settings.endGroup(); accept(); } // void ToolsControlImpl::on_linguistLocation_clicked() { chooseLocation( linguist ); } // void ToolsControlImpl::on_lupdateLocation_clicked() { chooseLocation( lupdate ); } // void ToolsControlImpl::on_lreleaseLocation_clicked() { chooseLocation( lrelease ); } // void ToolsControlImpl::on_designerLocation_clicked() { chooseLocation( designer ); } // void ToolsControlImpl::on_assistantLocation_clicked() { chooseLocation( assistant ); } QString ToolsControlImpl::qVersion() { if( m_qVersion.isEmpty() ) //return QString(qVersion()).left(5); return QString(QT_VERSION_STR).left(5); else return m_qVersion; } qdevelop-v0.28/src/.svn/text-base/addnewclassmethodimpl.h.svn-base0000444000175000017500000000272611362261065024243 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSMETHODIMPL_H #define ADDNEWCLASSMETHODIMPL_H // #include "ui_addnewclassmethod.h" // class MainImpl; class TreeClasses; // class AddNewClassMethodImpl : public QDialog, public Ui::AddNewClassMethod { Q_OBJECT public: AddNewClassMethodImpl( MainImpl * parent, TreeClasses *treeClasses, QString implementation, QString declaration, QString classname); private slots: void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QString m_implementation; QString m_declaration; QString m_classname; }; #endif qdevelop-v0.28/src/.svn/text-base/addnewclassimpl.h.svn-base0000444000175000017500000000272611362261065023042 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSIMPL_H #define ADDNEWCLASSIMPL_H #include "ui_addnewclass.h" class ProjectManager; class AddNewClassImpl : public QDialog, public Ui::AddNewClass { Q_OBJECT public: AddNewClassImpl(ProjectManager * parent); private slots: void on_okButton_clicked(); void on_className_textChanged(QString ); void on_directoryButton_clicked(); public slots: void on_comboProjects_currentIndexChanged(int index); private: ProjectManager *m_projectManager; void control(); QString templateSourceImpl(); QString templateHeaderImpl(); }; #endif qdevelop-v0.28/src/.svn/text-base/assistant.h.svn-base0000444000175000017500000000312611362261065021674 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ASSISTANT_H #define ASSISTANT_H // #include // class MainImpl; class QProcess; class QTcpSocket; // class Assistant : public QObject { Q_OBJECT public: Assistant(); ~Assistant(); void showQtWord(QString className, QString word); void setName( QString s ) { m_assistantName = s; }; void setdocumentationDirectory( QString s ) { m_documentationDirectory = s; }; void setqVersion(QString s) { m_qVersion = s; }; // protected: // private: QProcess *process; QTcpSocket *socket; QString m_location; quint16 m_port; QString m_assistantName; QString m_documentationDirectory; QString m_qVersion; signals: protected slots: public slots: }; // #endif qdevelop-v0.28/src/.svn/text-base/newprojectimpl.h.svn-base0000444000175000017500000000314011362261065022721 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef NEWPROJECTIMPL_H #define NEWPROJECTIMPL_H #include "ui_newproject.h" #include // class ProjectManager; class MainImpl; // class NewProjectImpl : public QDialog, public Ui::NewProject { Q_OBJECT public: NewProjectImpl(QWidget * parent, QString s); QString absoluteProjectName() { return m_absoluteProjectName; } QString filename() { return m_filename; } public slots: private: QString m_projectLocation; QString m_absoluteProjectName; QString m_filename; MainImpl *m_mainImpl; private slots: void on_okButton_clicked(); void on_dialog_clicked(bool checked); void on_mainwindow_clicked(bool checked); void slotChooseDirectory(); void slotLabel(); }; #endif qdevelop-v0.28/src/.svn/text-base/mainimpl.cpp.svn-base0000444000175000017500000027561011362261065022035 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #define QD qDebug() << __FILE__ << __LINE__ << ":" // #include "mainimpl.h" #include "editor.h" #include "build.h" #include "debug.h" #include "ui_about.h" #include "ui_warning.h" #include "parametersimpl.h" #include "findfileimpl.h" #include "openfileimpl.h" #include "shortcutsimpl.h" #include "projectmanager.h" #include "assistant.h" #include "designer.h" #include "optionsimpl.h" #include "newprojectimpl.h" #include "cpphighlighter.h" #include "tabwidget.h" #include "stackimpl.h" #include "toolscontrolimpl.h" #include "InitCompletion.h" #include "pluginsinterfaces.h" #include "misc.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // #define PROJECT_NAME "QDevelop" #define VERSION "0.28-2" MainImpl::MainImpl(QWidget * parent) : QMainWindow(parent) { setupUi(this); setStatusBar( false ); m_saveBeforeBuild = true; m_restoreOnStart = true; m_projectManager = 0; m_debug = 0; m_debugAfterBuild = ExecuteNone; m_buildAfterDebug = false; m_checkEnvironmentOnStartup = true; m_endLine = Default; m_tabSpaces = false; m_autoCompletion = true; m_autobrackets = true; m_autocomments = true; m_match = true; m_highlightCurrentLine = true; m_backgroundColor = Qt::white; m_textColor = Qt::black; m_promptBeforeQuit = false; m_currentLineColor = QColor(215,252,255); m_matchingColor = Qt::red; m_findInFiles = 0; m_stack = 0; m_intervalUpdatingClasses = 5; m_showTreeClasses = true; m_completion = 0; m_projectsDirectory = QDir::homePath(); m_closeButtonInTabs = false; m_wordWrap = false; m_assistant = 0; m_designer = 0; crossButton = 0; m_pluginsDirectory = ""; m_includeDirectory = QLibraryInfo::location( QLibraryInfo::HeadersPath ); m_documentationDirectory = QLibraryInfo::location( QLibraryInfo::DocumentationPath ); m_configureCompletionNeeded = false; m_mibCodec = 106; // UTF-8 by default m_buildQtDatabase = 0; m_buildQtDatabaseAsked = false; m_displayEditorToolbars = true; m_displayWhiteSpaces = true; m_rightMarginLine = 80; m_automaticCompilation = true; m_hideFindReplace = 10; m_smartClick = true; // m_formatPreprocessorText.setForeground(QColor(0,128,0)); m_formatQtText.setForeground(Qt::blue); m_formatSingleComments.setForeground(Qt::red); m_formatMultilineComments.setForeground(Qt::red); m_formatQuotationText.setForeground(Qt::darkGreen); m_formatMethods.setForeground(Qt::black); m_formatKeywords.setForeground(Qt::blue); tableLocalVariables->verticalHeader()->hide(); tableOtherVariables->verticalHeader()->hide(); separatorOtherFile = toolBarEdit->addSeparator(); separatorOtherFile->setVisible(false); actionOtherFile = new QAction(this); actionOtherFile->setVisible(false); toolBarEdit->addAction(actionOtherFile); #ifdef Q_WS_WIN m_font = QFont("Courier New", 10); #elif defined Q_WS_MACX m_font = QFont("Monaco", 12); setUnifiedTitleAndToolBarOnMac(false); #else m_font = QFont("Monospace", 10); #endif m_tabStopWidth = 4; m_lineNumbers = m_selectionBorder = m_autoIndent = m_cppHighlighter = true; // m_tabEditors = new TabWidget( this ); connect(m_tabEditors, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentTabChanged(int)) ); connect(m_tabEditors, SIGNAL(currentChanged(int)), this, SLOT(slotUpdateOtherFileActions()) ); // // setCentralWidget( m_tabEditors ); // m_assistant = new Assistant(); m_designer = new Designer(); // treeFiles->setColumnCount(1); treeFiles->setHeaderLabels(QStringList("")); // treeClasses->setColumnCount(1); treeClasses->setHeaderLabels(QStringList("")); treeClasses->setMainImpl( this ); menuDockWindows->addAction(dockFiles->toggleViewAction() ); menuDockWindows->addAction(dockClasses->toggleViewAction() ); menuDockWindows->addAction(dockBuild->toggleViewAction() ); menuDockWindows->addAction(dockOutputs->toggleViewAction() ); menuDockWindows->addAction(dockVariables->toggleViewAction() ); menuDockWindows->addAction(dockOtherVariables->toggleViewAction() ); menuDockWindows->addAction(dockFindInFiles->toggleViewAction() ); menuDockWindows->addAction(dockRegisters->toggleViewAction() ); menuDockWindows->addAction(dockCallsStack->toggleViewAction() ); menuToolbar->addAction(toolBarFiles->toggleViewAction()); menuToolbar->addAction(toolBarEdit->toggleViewAction()); menuToolbar->addAction(toolBarBuild->toggleViewAction()); for (int i = 0; i < maxRecentsFiles; ++i) { actionsRecentsFiles[i] = new QAction(this); menuLastsFiles->addAction(actionsRecentsFiles[i]); actionsRecentsFiles[i]->setVisible(false); connect(actionsRecentsFiles[i], SIGNAL(triggered()),this, SLOT(slotOpenRecentFile())); } updateActionsRecentsFiles(); // for (int i = 0; i < maxRecentsProjects; ++i) { actionsProjetsRecents[i] = new QAction(this); menuLastsProjects->addAction(actionsProjetsRecents[i]); actionsProjetsRecents[i]->setVisible(false); connect(actionsProjetsRecents[i], SIGNAL(triggered()),this, SLOT(slotOpenRecentProject())); } updateActionsRecentsProjects(); createConnections(); setMouseTracking( true ); logBuild->zoomOut( 1 ); logDebug->zoomOut( 1 ); m_stack = new StackImpl(this, callStacks); treeClasses->setCtagsName( m_ctagsName ); logBuild->setMainImpl( this ); on_actionFullDocksView_triggered(); } // MainImpl::~MainImpl() { if ( m_completion ) { m_completion->terminate(); m_completion->wait(); delete m_completion; m_completion = 0; } if( m_buildQtDatabase ) { m_buildQtDatabase->setStopRequired(); m_buildQtDatabase->wait(); delete m_buildQtDatabase; m_buildQtDatabase = 0; } } //convenient functions to access editor tabs Editor * MainImpl::currentEditor() { Editor *editor = 0; int currentIndex = m_tabEditors->currentIndex(); if( currentIndex != -1 ) editor = (Editor*) (m_tabEditors->widget( currentIndex )); return editor; } Editor * MainImpl::givenEditor(int i) { return qobject_cast (m_tabEditors->widget(i)); } // void MainImpl::renameEditor(QString oldName, QString newName) { foreach(Editor *editor, allEditors() ) { if ( editor->filename() == oldName) { editor->setFilename( newName ); slotModifiedEditor(editor, editor->isModified() ); editor->save(); break; } } } // void MainImpl::configureCompletion(QString projectDirectory) { QString QTDIR; QStringList includes; includes << projectDirectory; m_completion->setCtagsCmdPath( ctagsName() ); m_completion->addIncludes( includes, projectDirectory); m_configureCompletionNeeded = false; } // void MainImpl::gotoFileInProject(QString& filename) { if ( !m_projectManager ) return; dockFiles->show(); dockFiles->raise(); m_projectManager->setCurrentItem(filename); } // void MainImpl::setCrossButton(bool activate) { if (crossButton && !activate) { crossButton->hide(); } else if ( activate ) { if ( !crossButton ) { crossButton = new QToolButton(m_tabEditors); crossButton->setIcon( QIcon(":/toolbar/images/cross.png") ); connect(crossButton, SIGNAL(clicked()), this, SLOT(slotCloseCurrentTab()) ); crossButton->setGeometry(0,0,32,32); m_tabEditors->setCornerWidget(crossButton); } crossButton->show(); } m_tabEditors->setCloseButtonInTabs( !activate ); } // void MainImpl::slotOtherFile() { Editor *editor = currentEditor(); if ( editor ) editor->slotOtherFile(); } // void MainImpl::createConnections() { connect(actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotAbout()) ); connect(actionNewProject, SIGNAL(triggered()), this, SLOT(slotNewProject()) ); connect(actionOpen, SIGNAL(triggered()), this, SLOT(slotOpen()) ); connect(actionOpenProject, SIGNAL(triggered()), this, SLOT(slotOpenProject()) ); connect(actionSaveFile, SIGNAL(triggered()), this, SLOT(slotSaveFile()) ); connect(actionSaveAll, SIGNAL(triggered()), this, SLOT(slotSaveAll()) ); connect(actionSaveFileAs, SIGNAL(triggered()), this, SLOT(slotSaveFileAs()) ); connect(actionCompile, SIGNAL(triggered()), this, SLOT(slotCompile()) ); connect(actionBuild, SIGNAL(triggered()), this, SLOT(slotBuild()) ); connect(actionRelease_mode, SIGNAL(triggered()), this, SLOT(slotBuildRelease()) ); connect(actionDebug_mode, SIGNAL(triggered()), this, SLOT(slotBuildDebug()) ); connect(action_Forget_last_used_mode, SIGNAL(triggered()), this, SLOT(slotForgetBuildMode()) ); connect(actionRebuild, SIGNAL(triggered()), this, SLOT(slotRebuild()) ); connect(actionQmake, SIGNAL(triggered()), this, SLOT(slotQmake()) ); connect(actionStopBuild, SIGNAL(triggered()), this, SLOT(slotStopBuild()) ); connect(actionClean, SIGNAL(triggered()), this, SLOT(slotClean()) ); connect(actionCut, SIGNAL(triggered()), this, SLOT(slotCut()) ); connect(actionCopy, SIGNAL(triggered()), this, SLOT(slotCopy()) ); connect(actionPaste, SIGNAL(triggered()), this, SLOT(slotPaste()) ); connect(actionUndo, SIGNAL(triggered()), this, SLOT(slotUndo()) ); connect(actionIndent, SIGNAL(triggered()), this, SLOT(slotIndent()) ); connect(actionUnindent, SIGNAL(triggered()), this, SLOT(slotUnindent()) ); connect(actionSelectAll, SIGNAL(triggered()), this, SLOT(slotSelectAll()) ); connect(actionRedo, SIGNAL(triggered()), this, SLOT(slotRedo()) ); connect(actionFind, SIGNAL(triggered()), this, SLOT(slotFind()) ); connect(actionReplace, SIGNAL(triggered()), this, SLOT(slotReplace()) ); connect(actionGotoLine, SIGNAL(triggered()), this, SLOT(slotGotoLine()) ); connect(actionFindContinue, SIGNAL(triggered()), this, SLOT(slotFindContinue()) ); connect(actionFindPrevious, SIGNAL(triggered()), this, SLOT(slotFindPrevious()) ); connect(actionCloseAllFiles, SIGNAL(triggered()), this, SLOT(slotCloseAllFiles()) ); connect(actionCloseProject, SIGNAL(triggered()), this, SLOT(slotCloseProject()) ); connect(actionOptions, SIGNAL(triggered()), this, SLOT(slotOptions()) ); connect(actionConfigureShortcuts, SIGNAL(triggered()), this, SLOT(slotShortcuts()) ); connect(actionCompleteCode, SIGNAL(triggered()), this, SLOT(slotCompleteCode()) ); connect(actionFindInFiles, SIGNAL(triggered()), this, SLOT(slotFindInFiles()) ); connect(actionNewFile, SIGNAL(triggered()), this, SLOT(slotNewFile()) ); connect(actionToggleComment, SIGNAL(triggered()), this, SLOT(slotToggleComment()) ); connect(actionComment, SIGNAL(triggered()), this, SLOT(slotComment()) ); connect(actionUncomment, SIGNAL(triggered()), this, SLOT(slotUncomment()) ); connect(actionParameters, SIGNAL(triggered()), this, SLOT(slotParameters()) ); connect(actionGotoMatchingBracket, SIGNAL(triggered()), this, SLOT(slotGotoMatchingBracket()) ); connect(addDebugVariable, SIGNAL(clicked()), this, SLOT(slotAddDebugVariable()) ); connect(removeDebugVariable, SIGNAL(clicked()), this, SLOT(slotRemoveDebugVariable()) ); connect(actionPrint, SIGNAL(triggered()), this, SLOT(slotPrint()) ); connect(actionGotoDeclaration, SIGNAL(triggered()), this, SLOT(slotGotoDeclaration()) ); connect(actionGotoImplementation, SIGNAL(triggered()), this, SLOT(slotGotoImplementation()) ); connect(actionMethodsList, SIGNAL(triggered()), this, SLOT(slotMethodsList()) ); connect(actionNextWarningError, SIGNAL(triggered()), this, SLOT(slotNextWarningError()) ); connect(actionPreviousWarningError, SIGNAL(triggered()), this, SLOT(slotPreviousWarningError()) ); connect(actionClearAllWarningsErrors, SIGNAL(triggered()), this, SLOT(slotClearAllWarningsErrors()) ); // connect(actionExternalTools, SIGNAL(triggered()), this, SLOT(slotToolsControl()) ); connect(actionCloseCurrentEditor, SIGNAL(triggered()), this, SLOT(slotCloseCurrentTab()) ); actionCloseCurrentEditor->setShortcutContext( Qt::ApplicationShortcut ); connect(actionPreviousTab, SIGNAL(triggered()), this, SLOT(slotPreviousTab()) ); actionPreviousTab->setShortcutContext( Qt::ApplicationShortcut ); connect(actionNextTab, SIGNAL(triggered()), this, SLOT(slotNextTab()) ); actionNextTab->setShortcutContext( Qt::ApplicationShortcut ); connect(actionsetFocusToEditor, SIGNAL(triggered()), this, SLOT(slotSetFocusToEditor()) ); actionsetFocusToEditor->setShortcutContext( Qt::WindowShortcut ); connect(actionToggleBreakpoint, SIGNAL(triggered()), this, SLOT(slotToggleBreakpoint()) ); connect(actionDebug, SIGNAL(triggered()), this, SLOT(slotDebug()) ); connect(actionExecuteWithoutDebug, SIGNAL(triggered()), this, SLOT(slotExecuteWithoutDebug()) ); connect(actionStopDebug, SIGNAL(triggered()), this, SLOT(slotContinueDebug()) ); connect(actionStepInto, SIGNAL(triggered()), this, SLOT(slotStepInto()) ); connect(actionStepOver, SIGNAL(triggered()), this, SLOT(slotStepOver()) ); connect(actionStepOut, SIGNAL(triggered()), this, SLOT(slotStepOut()) ); connect(actionQuit, SIGNAL(triggered()), this, SLOT(close()) ); connect(treeFiles, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotDoubleClickTreeFiles(QTreeWidgetItem *, int)) ); connect(treeFiles, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(slotClickTreeFiles(QTreeWidgetItem *, int)) ); connect(findFiles, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotFindFilesActivated( QListWidgetItem *, QListWidgetItem *)) ); connect(findLines, SIGNAL(itemDoubleClicked ( QListWidgetItem *)), this, SLOT(slotDoubleClickFindLines( QListWidgetItem *)) ); connect(actionHelpQtWord, SIGNAL(triggered()), this, SLOT(slotHelpQtWord()) ); connect(actionSwitchHeaderSources, SIGNAL(triggered()), this, SLOT(slotOtherFile()) ); connect(actionToggleBookmark, SIGNAL(triggered()), this, SLOT(slotToggleBookmark()) ); connect(actionNextBookmark, SIGNAL(triggered()), this, SLOT(slotNextBookmark()) ); connect(actionPreviousBookmark, SIGNAL(triggered()), this, SLOT(slotPreviousBookmark()) ); connect(actionClearAllBookmarks, SIGNAL(triggered()), this, SLOT(slotClearAllBookmarks()) ); connect(actionOpenFile, SIGNAL(triggered()), this, SLOT(slotOpenFile()) ); connect(actionNewQtVersion, SIGNAL(triggered()), this, SLOT(slotNewQtVersion()) ); connect(actionOtherFile, SIGNAL(triggered()), this, SLOT(slotOtherFile()) ); // m_projectGroup = new QActionGroup( this ); m_projectGroup->addAction( actionCloseProject ); m_projectGroup->addAction( actionSaveProject ); m_projectGroup->addAction( actionAddNewItem ); m_projectGroup->addAction( actionAddNewClass ); m_projectGroup->addAction( actionAddScope ); m_projectGroup->addAction( actionAddExistingFiles ); m_projectGroup->addAction( actionProjectPropertie ); m_projectGroup->addAction( actionBuild ); m_projectGroup->addAction( actionRebuild ); m_projectGroup->addAction( actionClean ); m_projectGroup->addAction( actionStopBuild ); m_projectGroup->addAction( actionCompile ); m_projectGroup->addAction( actionQmake ); m_projectGroup->addAction( actionDebug ); m_projectGroup->addAction( actionStopDebug ); m_projectGroup->addAction( actionExecuteWithoutDebug ); m_projectGroup->addAction( actionStepOut ); m_projectGroup->addAction( actionStepOver ); m_projectGroup->addAction( actionStepInto ); m_projectGroup->addAction( actionResetExecutablesList ); m_projectGroup->setEnabled( false ); // m_buildingGroup = new QActionGroup( this ); m_buildingGroup->addAction( actionCompile ); m_buildingGroup->addAction( actionQmake ); m_buildingGroup->addAction( actionClean ); m_buildingGroup->addAction( actionBuild ); m_buildingGroup->addAction( actionRebuild ); m_buildingGroup->addAction( actionExecuteWithoutDebug ); m_buildingGroup->addAction( actionDebug ); m_buildingGroup->addAction( actionStopDebug ); m_buildingGroup->addAction( actionStepInto ); m_buildingGroup->addAction( actionStepOver ); m_buildingGroup->addAction( actionStepOut ); m_buildingGroup->addAction( actionDebug_mode ); m_buildingGroup->addAction( actionRelease_mode ); m_buildingGroup->addAction( action_Forget_last_used_mode ); m_buildingGroup->setEnabled( false ); } // void MainImpl::slotShortcuts() { ShortcutsImpl *dialog = new ShortcutsImpl(this); dialog->exec(); delete dialog; } // void MainImpl::slotNewFile() { QString s = QFileDialog::getSaveFileName( this, tr("Choose the file to create"), "", tr("Files")+" (*.cpp *.h *.txt *.* *)" ); if ( s.isEmpty() ) { // Cancel is clicked return; } QFile file(s); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists in directory.").arg(s), tr("Cancel") ); return; } if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::about(0, "QDevelop",tr("Unable to create %1").arg(s)); return; } file.close(); openFile( QStringList( s ) ); } // void MainImpl::slotSetFocusToEditor() { Editor *editor = currentEditor(); if ( editor ) editor->setFocus(); } // void MainImpl::slotToggleBreakpoint() { Editor *editor = currentEditor(); if ( editor ) editor->toggleBreakpoint(); } // void MainImpl::slotPreviousBookmark() { QList actionsList = menuBookmarks->actions(); int pos = actionsList.indexOf( actionActiveBookmark ); int posFirstBookmark = actionsList.indexOf( actionClearAllBookmarks ) + 2; if ( posFirstBookmark > actionsList.count() ) posFirstBookmark = -1; int posLastBookmark = actionsList.count()-1; if ( pos != -1 && posFirstBookmark < pos ) { QAction *newAction = actionsList.at( pos - 1 ); slotActivateBookmark( newAction ); } else if ( posFirstBookmark != -1 ) { QAction *newAction = actionsList.at( posLastBookmark ); slotActivateBookmark( newAction ); } } // void MainImpl::slotNextBookmark() { QList actionsList = menuBookmarks->actions(); int count = actionsList.count(); int pos = actionsList.indexOf( actionActiveBookmark ); if ( pos != 1 && pos+1 < count ) { QAction *newAction = actionsList.at( pos + 1 ); slotActivateBookmark( newAction ); } else { int posFirstBookmark = actionsList.indexOf( actionClearAllBookmarks ) + 2; if ( posFirstBookmark < count ) { QAction *newAction = actionsList.at( posFirstBookmark ); slotActivateBookmark( newAction ); } } } // void MainImpl::slotToggleBookmark() { Editor *editor = currentEditor(); if ( editor ) editor->toggleBookmark(); } // void MainImpl::slotToggleComment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Toggle ); } // void MainImpl::slotComment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Comment ); } // void MainImpl::slotMethodsList() { Editor *editor = currentEditor(); if ( editor ) editor->methodsList(); } // void MainImpl::slotGotoImplementation() { Editor *editor = currentEditor(); if ( editor ) editor->gotoImplementation(); } // void MainImpl::slotGotoDeclaration() { Editor *editor = currentEditor(); if ( editor ) editor->gotoDeclaration(); } // void MainImpl::slotGotoMatchingBracket() { Editor *editor = currentEditor(); if ( editor ) editor->gotoMatchingBracket(); } // void MainImpl::slotUncomment() { Editor *editor = currentEditor(); if ( editor ) editor->comment( TextEdit::Uncomment ); } // void MainImpl::slotPreviousTab() { if ( 0 < m_tabEditors->count() ) { int i = m_tabEditors->currentIndex()-1; Editor *editor = givenEditor( 0>i?m_tabEditors->count()-1:i ); if ( editor ) m_tabEditors->setCurrentWidget( editor ); } } // void MainImpl::slotNextTab() { if ( 0 < m_tabEditors->count() ) { int i = (m_tabEditors->currentIndex()+1)%m_tabEditors->count(); Editor *editor = givenEditor(i); if ( editor ) m_tabEditors->setCurrentWidget( editor ); } } // void MainImpl::slotParameters() { if (!m_projectManager) return; ParametersImpl *parametersimpl = new ParametersImpl(this); parametersimpl->setParameters( m_projectManager->parameters() ); if ( parametersimpl->exec() == QDialog::Accepted ) m_projectManager->setParameters( parametersimpl->parameters() ); delete parametersimpl; } // void MainImpl::slotOptions() { OptionsImpl *options = new OptionsImpl(this, m_font, m_lineNumbers, m_selectionBorder, m_autoIndent, m_cppHighlighter, m_tabStopWidth, m_saveBeforeBuild, m_restoreOnStart, m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords, m_autoMaskDocks, m_endLine, m_tabSpaces, m_autoCompletion, m_backgroundColor, m_promptBeforeQuit, m_highlightCurrentLine, m_currentLineColor, m_autobrackets, m_autocomments, m_showTreeClasses, m_intervalUpdatingClasses, m_projectsDirectory, m_match, m_matchingColor, m_closeButtonInTabs, m_pluginsDirectory, m_makeOptions, m_mibCodec, m_includeDirectory, m_displayEditorToolbars, m_displayWhiteSpaces, m_rightMarginLine, m_documentationDirectory, m_textColor, m_automaticCompilation, m_wordWrap, m_hideFindReplace, m_smartClick ); if ( options->exec() == QDialog::Accepted ) { QApplication::setOverrideCursor(Qt::WaitCursor); m_showTreeClasses = options->showTreeClasses->isChecked(); m_automaticCompilation = options->compileAuto->isChecked(); m_intervalUpdatingClasses = options->interval->value(); m_font = QFont( options->font().family(), options->font().pointSize() ); m_tabStopWidth = options->tabStopWidth->value(); m_cppHighlighter = options->highlight->isChecked(); m_lineNumbers = options->numbers->isChecked(); m_autoIndent = options->indent->isChecked(); m_selectionBorder = options->selectionBorder->isChecked(); m_saveBeforeBuild = options->saveAll->isChecked(); m_restoreOnStart = options->restore->isChecked(); m_endLine = (EndLine)options->endLine->currentIndex(); m_tabSpaces = options->tabSpaces->isChecked(); m_autoCompletion = options->completion->isChecked(); m_autobrackets = options->brackets->isChecked(); // Divius: comments autoclose m_autocomments = options->comments->isChecked(); // m_match = options->match->isChecked(); m_highlightCurrentLine = options->groupHighlightCurrentLine->isChecked(); m_promptBeforeQuit = options->promptBeforeQuit->isChecked(); m_projectsDirectory = options->projectsDirectory->text(); m_pluginsDirectory = options->pluginsDirectory->text(); m_includeDirectory = options->includeDirectory->text(); m_documentationDirectory = options->documentationDirectory->text(); m_makeOptions = options->makeOptions->text(); m_closeButtonInTabs = options->closeButton->isChecked(); setCrossButton( !m_closeButtonInTabs ); // m_formatPreprocessorText = options->syntaxe()->preprocessorFormat(); m_formatQtText = options->syntaxe()->classFormat(); m_formatSingleComments = options->syntaxe()->singleLineCommentFormat(); m_formatMultilineComments = options->syntaxe()->multiLineCommentFormat(); m_formatQuotationText = options->syntaxe()->quotationFormat(); m_formatMethods = options->syntaxe()->functionFormat(); m_formatKeywords = options->syntaxe()->keywordFormat(); m_backgroundColor = options->backgroundColor(); m_textColor = options->textColor(); m_currentLineColor = options->currentLineColor(); m_matchingColor = options->matchingColor(); m_mibCodec = options->mib(); m_displayEditorToolbars = options->showEditorToolbars->isChecked(); m_displayWhiteSpaces = options->displayWhiteSpaces->isChecked(); if (options->rightMarginLine->isChecked()) m_rightMarginLine = options->rightMarginPos->value(); else m_rightMarginLine = 0; m_wordWrap = options->wordwrap->isChecked(); if (options->hideFindReplace->isChecked()) m_hideFindReplace = options->findReplaceDelay->value(); else m_hideFindReplace = 0; m_smartClick = options->smartClick->isChecked(); slotUpdateOtherFileActions(); foreach(Editor *editor, allEditors() ) { editor->setShowTreeClasses( m_showTreeClasses ); editor->setIntervalUpdatingTreeClasses( m_intervalUpdatingClasses ); editor->setFont( m_font ); editor->setTabStopWidth( m_tabStopWidth ); editor->setSyntaxHighlight( m_cppHighlighter ); editor->setLineNumbers( m_lineNumbers ); editor->setAutoIndent( m_autoIndent ); editor->setMatch( m_match ); editor->setHighlightCurrentLine( m_highlightCurrentLine ); editor->setSelectionBorder( m_selectionBorder ); editor->setAutoCompletion( m_autoCompletion ); editor->setEndLine( m_endLine ); editor->setTabSpaces( m_tabSpaces ); editor->setBackgroundColor( m_backgroundColor ); editor->setTextColor( m_textColor ); editor->setCurrentLineColor( m_currentLineColor ); editor->setMatchingColor( m_matchingColor ); editor->setAutobrackets( m_autobrackets ); editor->setAutocomments( m_autocomments ); editor->setShowWhiteSpaces( m_displayWhiteSpaces ); editor->setRightMargin( m_rightMarginLine ); editor->displayEditorToolbar( m_displayEditorToolbars ); editor->setSyntaxColors ( m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords ); editor->setWordWrap(m_wordWrap); editor->setHideFindReplace(m_hideFindReplace); editor->smartClick = m_smartClick; } /* TODO if (!m_showTreeClasses) //ToolsOptions/General tabExplorer->setTabToolTip( 1, tr("Classes explorer is disabled, please enable it in the Options dialog") ); else tabExplorer->setTabToolTip( 1, "" ); */ m_assistant->setdocumentationDirectory( m_documentationDirectory ); QApplication::restoreOverrideCursor(); } delete options; } // void MainImpl::saveINI() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("Options"); settings.setValue("m_showTreeClasses", m_showTreeClasses); settings.setValue("m_intervalUpdatingClasses", m_intervalUpdatingClasses); settings.setValue("m_automaticCompilation", m_automaticCompilation); settings.setValue("m_font", m_font.toString()); settings.setValue("m_tabStopWidth", m_tabStopWidth); settings.setValue("m_cppHighlighter", m_cppHighlighter); settings.setValue("m_lineNumbers", m_lineNumbers); settings.setValue("m_autoIndent", m_autoIndent); settings.setValue("m_selectionBorder", m_selectionBorder); settings.setValue("m_saveBeforeBuild", m_saveBeforeBuild); settings.setValue("m_restoreOnStart", m_restoreOnStart); settings.setValue("m_promptBeforeQuit", m_promptBeforeQuit); settings.setValue("m_autoCompletion", m_autoCompletion); settings.setValue("m_autobrackets", m_autobrackets); // Divius: comments autoclose settings.setValue("m_autocomments", m_autocomments); // settings.setValue("m_closeButtonInTabs", m_closeButtonInTabs); settings.setValue("m_match", m_match); settings.setValue("m_highlightCurrentLine", m_highlightCurrentLine); settings.setValue("m_checkEnvironmentOnStartup", m_checkEnvironmentOnStartup); settings.setValue("m_endLine", m_endLine); settings.setValue("m_tabSpaces", m_tabSpaces); settings.setValue("m_backgroundColor", m_backgroundColor.name()); settings.setValue("m_textColor", m_textColor.name()); settings.setValue("m_currentLineColor", m_currentLineColor.name()); settings.setValue("m_matchingColor", m_matchingColor.name()); settings.setValue("m_projectsDirectory", m_projectsDirectory); settings.setValue("m_pluginsDirectory", m_pluginsDirectory); settings.setValue("m_includeDirectory", m_includeDirectory); settings.setValue("m_documentationDirectory", m_documentationDirectory); settings.setValue("m_makeOptions", m_makeOptions); settings.setValue("m_mibCodec", m_mibCodec); // settings.setValue("m_formatPreprocessorText", m_formatPreprocessorText.foreground().color().name()); settings.setValue("m_formatQtText", m_formatQtText.foreground().color().name()); settings.setValue("m_formatSingleComments", m_formatSingleComments.foreground().color().name()); settings.setValue("m_formatMultilineComments", m_formatMultilineComments.foreground().color().name()); settings.setValue("m_formatQuotationText", m_formatQuotationText.foreground().color().name()); settings.setValue("m_formatMethods", m_formatMethods.foreground().color().name()); settings.setValue("m_formatKeywords", m_formatKeywords.foreground().color().name()); settings.setValue("m_displayEditorToolbars", m_displayEditorToolbars); settings.setValue("m_displayWhiteSpaces", m_displayWhiteSpaces); settings.setValue("m_rightMarginLine", m_rightMarginLine); settings.setValue("editorMode", actionEditor_mode->isChecked() ); settings.setValue("m_wordWrap", m_wordWrap); settings.setValue("m_hideFindReplace", m_hideFindReplace); settings.setValue("m_smartClick", m_smartClick); settings.endGroup(); // Save shortcuts settings.beginGroup("Shortcuts"); QList childrens; childrens = children(); QListIterator iterator(childrens); while ( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if ( (action) && (!(action->data().toString().contains( "Recent|" )))) { QString text = action->objectName(); if (!text.isEmpty()) { QString shortcut = action->shortcut(); settings.setValue( text, shortcut ); } } } settings.endGroup(); //if ( !m_projectManager ) //return; if ( m_restoreOnStart ) { settings.beginGroup("Project"); QString projectDirectory; if ( m_projectManager ) projectDirectory = m_projectManager->absoluteNameProjectFile(treeFiles->topLevelItem(0)); settings.setValue("absoluteNameProjectFile", projectDirectory); settings.endGroup(); } // // HACK to prevent the compiler toolbar from being moved to the right more and more: Hide otherFilesAction button before saving state if (actionOtherFile->isVisible()) { separatorOtherFile->setVisible(false); actionOtherFile->setVisible(false); // yes, we have to call it twice to really update the other toolbars' positions QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } // settings.beginGroup("mainwindowstate"); if (!isMinimized() && !isMaximized() && !isFullScreen()) { settings.setValue("pos", pos()); settings.setValue("size", size()); } settings.setValue("maximized", isMaximized()); settings.setValue("fullscreen", isFullScreen()); settings.setValue("geometry", saveGeometry()); // Window geometry and state (only needed for Windows!). settings.setValue("state", saveState()); // Toolbar and DockWidget state. settings.endGroup(); settings.beginGroup("editormode"); QList dockWidgets = findChildren(); foreach( QWidget *w, dockWidgets ) settings.setValue( w->objectName(), toolbarStatus[w] );; settings.endGroup(); // // HACK to prevent the compiler toolbar from being moved to the right more and more: Hide otherFilesAction button before saving state // and restore it when we are done slotUpdateOtherFileActions(); } // void MainImpl::slotNewProject() { NewProjectImpl *window = new NewProjectImpl(this, m_projectsDirectory); window->labelProjetParent->setHidden( true ); window->parentProjectName->setHidden( true ); if ( window->exec() == QDialog::Accepted ) { openProject( window->absoluteProjectName() ); QTreeWidgetItem *itProject = m_projectManager->itemProject( window->filename() ); m_projectManager->setSrcDirectory(itProject, window->srcDirectory->text()); m_projectManager->setUiDirectory(itProject, window->uiDirectory->text()); } delete window; } // QString MainImpl::loadINI() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); QString projectName; settings.beginGroup("Options"); QString s = settings.value("m_font", m_font.toString()).toString(); m_font.fromString(s); m_tabStopWidth = settings.value("m_tabStopWidth", m_tabStopWidth).toInt(); m_cppHighlighter = settings.value("m_cppHighlighter", m_cppHighlighter).toBool(); m_automaticCompilation = settings.value("m_automaticCompilation", m_automaticCompilation).toBool(); m_lineNumbers = settings.value("m_lineNumbers", m_lineNumbers).toBool(); m_autoIndent = settings.value("m_autoIndent", m_autoIndent).toBool(); m_autoCompletion = settings.value("m_autoCompletion", m_autoCompletion).toBool(); m_autobrackets = settings.value("m_autobrackets", m_autobrackets).toBool(); // Divius: comments autoclose m_autocomments = settings.value("m_autocomments", m_autocomments).toBool(); // m_selectionBorder = settings.value("m_selectionBorder", m_selectionBorder).toBool(); m_saveBeforeBuild = settings.value("m_saveBeforeBuild", m_saveBeforeBuild).toBool(); m_restoreOnStart = settings.value("m_restoreOnStart", m_restoreOnStart).toBool(); m_promptBeforeQuit = settings.value("m_promptBeforeQuit", m_promptBeforeQuit).toBool(); m_checkEnvironmentOnStartup = settings.value("m_checkEnvironmentOnStartup", m_checkEnvironmentOnStartup).toBool(); m_autoMaskDocks = settings.value("m_autoMaskDocks", m_autoMaskDocks).toBool(); m_endLine = (EndLine)settings.value("m_endLine", m_endLine).toInt(); m_tabSpaces = settings.value("m_tabSpaces", m_tabSpaces).toBool(); m_match = settings.value("m_match", m_match).toBool(); m_highlightCurrentLine = settings.value("m_highlightCurrentLine", m_highlightCurrentLine).toBool(); m_backgroundColor = QColor(settings.value("m_backgroundColor", m_backgroundColor).toString()); m_textColor = QColor(settings.value("m_textColor", m_textColor).toString()); m_currentLineColor = QColor(settings.value("m_currentLineColor", m_currentLineColor).toString()); m_matchingColor = QColor(settings.value("m_matchingColor", m_matchingColor).toString()); m_projectsDirectory = settings.value("m_projectsDirectory", m_projectsDirectory).toString(); m_pluginsDirectory = settings.value("m_pluginsDirectory", m_pluginsDirectory).toString(); m_includeDirectory = settings.value("m_includeDirectory", m_includeDirectory).toString(); m_documentationDirectory = settings.value("m_documentationDirectory", m_documentationDirectory).toString(); m_makeOptions = settings.value("m_makeOptions", m_makeOptions).toString(); m_showTreeClasses = settings.value("m_showTreeClasses", m_showTreeClasses).toBool(); m_closeButtonInTabs = settings.value("m_closeButtonInTabs", m_closeButtonInTabs).toBool(); m_displayEditorToolbars = settings.value("m_displayEditorToolbars", m_displayEditorToolbars).toBool(); slotUpdateOtherFileActions(); m_displayWhiteSpaces = settings.value("m_displayWhiteSpaces", m_displayWhiteSpaces).toBool(); m_rightMarginLine = settings.value("m_rightMarginLine", m_rightMarginLine).toInt(); m_wordWrap = settings.value("m_wordWrap", m_wordWrap).toBool(); m_hideFindReplace = settings.value("m_hideFindReplace", m_hideFindReplace).toInt(); m_smartClick = settings.value("m_smartClick", m_smartClick).toBool(); if( !QDir().exists(m_includeDirectory) ) { QMessageBox::warning(0, "QDevelop", tr("The Qt include directory doesn't exist,\nYou can change in Options dialog."), tr("Ok") ); } setCrossButton( !m_closeButtonInTabs ); m_intervalUpdatingClasses = settings.value("m_intervalUpdatingClasses", m_intervalUpdatingClasses).toInt(); if ( m_currentLineColor == Qt::black ) m_currentLineColor = QColor(); m_mibCodec = settings.value("m_mibCodec", m_mibCodec).toInt(); // m_formatPreprocessorText.setForeground( QColor(settings.value("m_formatPreprocessorText", m_formatPreprocessorText.foreground().color().name()).toString() ) ); m_formatQtText.setForeground( QColor(settings.value("m_formatQtText", m_formatQtText.foreground().color().name()).toString() ) ); m_formatSingleComments.setForeground( QColor(settings.value("m_formatSingleComments", m_formatSingleComments.foreground().color().name()).toString() ) ); m_formatMultilineComments.setForeground( QColor(settings.value("m_formatMultilineComments", m_formatMultilineComments.foreground().color().name()).toString() ) ); m_formatQuotationText.setForeground( QColor(settings.value("m_formatQuotationText", m_formatQuotationText.foreground().color().name()).toString() ) ); m_formatMethods.setForeground( QColor(settings.value("m_formatMethods", m_formatMethods.foreground().color().name()).toString() ) ); m_formatKeywords.setForeground( QColor(settings.value("m_formatKeywords", m_formatKeywords.foreground().color().name()).toString() ) ); actionEditor_mode->setChecked( settings.value("editorMode", actionEditor_mode->isChecked()).toBool() ); settings.endGroup(); /* TODO if (!m_showTreeClasses) //ToolsOptions/General tabExplorer->setTabToolTip( 1, tr("Classes explorer is disabled, please enable it in the Options dialog") ); else tabExplorer->setTabToolTip( 1, "" ); */ m_assistant->setdocumentationDirectory( m_documentationDirectory ); // Load shortcuts settings.beginGroup("Shortcuts"); QList childrens; childrens = children(); QListIterator iterator(childrens); while ( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if ( (action) && (!(action->data().toString().contains( "Recent|" ))) && (!action->objectName().isEmpty()) ) { QString text = object->objectName(); if ( !text.isEmpty() ) { QString shortcut = action->shortcut(); shortcut = settings.value(text, shortcut).toString(); action->setShortcut( shortcut ); } } } settings.endGroup(); if ( m_restoreOnStart ) { settings.beginGroup("Project"); projectName = settings.value("absoluteNameProjectFile").toString(); settings.endGroup(); } // settings.beginGroup("mainwindowstate"); #ifdef Q_OS_WIN32 // Restores position, size and state for both normal and maximized/fullscreen state. Problems reported unter X11. // See Qt doc: Geometry: Restoring a Window's Geometry for details. restoreGeometry(settings.value("geometry", saveGeometry()).toByteArray()); // Window geometry and state. #else // Restores position, size and state including maximized/fullscreen. move(settings.value("pos", pos()).toPoint()); // Window position. resize(settings.value("size", size()).toSize()); // Window size. // Note: Yes, the window can be maximized and fullscreen! if (settings.value("maximized", isMaximized()).toBool()) // Window maximized. setWindowState(windowState() | Qt::WindowMaximized); if (settings.value("fullscreen", isFullScreen()).toBool()) // Window fullscreen. setWindowState(windowState() | Qt::WindowFullScreen); #endif restoreState(settings.value("state", saveState()).toByteArray()); // Toolbar and DockWidget state. settings.endGroup(); settings.beginGroup("editormode"); QList dockWidgets = findChildren(); foreach( QWidget *w, dockWidgets ) toolbarStatus[w] = settings.value(w->objectName(),w->isVisible()).toBool(); settings.endGroup(); return projectName; } void MainImpl::closeEvent( QCloseEvent * event ) { int response = 0; if ( m_promptBeforeQuit ) { response = QMessageBox::question(this, "QDevelop", tr("Do you want to quit QDevelop ?"), tr("Yes"), tr("No"), QString(), 0, 1); } if ( response == 1 ) { event->ignore(); return; } saveINI(); if ( slotCloseProject(true) ) { delete m_assistant; delete m_designer; this->hide(); //give an impression of quick close event->accept(); } else event->ignore(); } // bool MainImpl::slotCloseAllFiles() { bool ok = true; foreach(Editor *editor, allEditors() ) { if ( !editor->close() ) ok = false; else delete editor; } slotUpdateOtherFileActions(); return ok; } // static QString dir; void MainImpl::slotOpen() { static QString selectedFilter; if ( dir.isEmpty() && m_projectManager ) dir = m_projectManager->projectDirectory( treeFiles->topLevelItem ( 0 ) ); QString s = QFileDialog::getOpenFileName( this, tr("Choose a file to open"), dir, tr("Sources")+" (*.cpp *.h);;"+ tr("Projects")+" (*.pro);;"+ tr("Texts")+" (*.txt *.TXT);;"+ tr("All Files")+" (* *.*)", &selectedFilter ); if ( s.isEmpty() ) { // Cancel is clicked return; } if ( s.right(4).toLower() == ".pro" ) { openProject(s); } else openFile( QStringList( s ) ); dir = QDir().absoluteFilePath( s ); } void MainImpl::slotOpenProject() { if ( dir.isEmpty() && m_projectManager ) dir = m_projectManager->projectDirectory( treeFiles->topLevelItem ( 0 ) ); QString s = QFileDialog::getOpenFileName( this, tr("Choose a project to open"), dir, tr("Projects")+" (*.pro)" ); if ( s.isEmpty() ) { // Cancel is clicked return; } openProject(s); dir = QDir().absoluteFilePath( s ); } // bool MainImpl::openProject(QString s) { s = QDir::cleanPath( s ); QFile file ( s ); if ( !file.exists() ) { QMessageBox::warning(this, "QDevelop", tr("The project %1 doesn't exist.").arg(s), tr("Cancel") ); return false; } if ( !slotCloseProject() ) return false; if ( m_completion ) delete m_completion; m_completion = new InitCompletion (this, treeClasses); QStringList includes; includes << m_includeDirectory; #ifdef WIN32 includes << QDir::cleanPath( QFileInfo(m_qmakeName).absoluteDir().path()+"/../src" ) ; #endif m_completion->setCtagsCmdPath( ctagsName() ); m_completion->setQtInclude( includes ); configureCompletion( QFileInfo(s).absoluteDir().path() ); m_projectManager = new ProjectManager(this, treeFiles, treeClasses); m_projectManager->init(s); treeFiles->setProjectManager( m_projectManager ); treeClasses->setProjectManager( m_projectManager ); connect(actionResetExecutablesList, SIGNAL(triggered()), m_projectManager, SLOT(slotResetExecutablesList()) ); connect(actionSaveProject, SIGNAL(triggered()), m_projectManager, SLOT(slotSaveProject()) ); connect(actionAddExistingFiles, SIGNAL(triggered()), m_projectManager, SLOT(slotAddExistingFiles()) ); connect(actionAddNewItem, SIGNAL(triggered()), m_projectManager, SLOT(slotAddNewItem()) ); connect(actionAddNewClass, SIGNAL(triggered()), m_projectManager, SLOT(slotAddNewClass()) ); connect(actionAddScope, SIGNAL(triggered()), m_projectManager, SLOT(slotAddScope()) ); connect(actionProjectPropertie, SIGNAL(triggered()), m_projectManager, SLOT(slotProjectPropertie()) ); setWindowTitle( s ); setCurrentProject( s ); m_projectGroup->setEnabled( true ); m_buildingGroup->setEnabled( true ); slotClickTreeFiles( treeFiles->topLevelItem ( 0 ), 0); return true; } // bool MainImpl::slotCloseProject(bool /*hide*/) { /*QList maximized = m_maximizedEditors; foreach(Editor *editor, maximized) { slotShowMaximized( editor ); }*/ if ( m_projectManager ) m_projectManager->saveProjectSettings(); slotClearAllBookmarks(); if ( !slotCloseAllFiles() ) return false; logBuild->clear(); logDebug->clear(); // if ( m_completion ) { m_completion->wait(); delete m_completion; m_completion = 0; } // if ( m_projectManager && !m_projectManager->close() ) return false; delete m_projectManager; m_projectManager = 0; setWindowTitle( "QDevelop" ); m_projectGroup->setEnabled( false ); m_buildingGroup->setEnabled( false ); delete m_findInFiles; m_findInFiles = 0; return true; } // void MainImpl::slotDoubleClickTreeFiles(QTreeWidgetItem *item, int) { if ( item->childCount() > 0 ) return; QString filename = item->text(0); QString projectName = m_projectManager->projectFilename( item ); QString projectDirectory = m_projectManager->projectDirectory(item); QString absoluteName = QDir(projectDirectory+"/"+filename).absolutePath(); QStringList locationsList; locationsList << absoluteName; foreach(QString dir, m_projectManager->dependpath(item) ) locationsList << QDir(projectDirectory + "/" +dir + "/" + filename).absolutePath(); openFile( locationsList ); } // void MainImpl::slotClickTreeFiles(QTreeWidgetItem *item, int) { QString projectName = m_projectManager->projectFilename( item ); actionProjectPropertie->setText( tr("Properties of %1...").arg(projectName) ); } // void MainImpl::slotSaveFile() { Editor *editor = currentEditor(); if ( editor ) { editor->save(); } } // void MainImpl::slotSaveFileAs() { Editor *editor = currentEditor(); if ( !editor ) return; QString s = QFileDialog::getSaveFileName( this, tr("Choose the file to create"), editor->filename(), tr("Files (*.cpp *.h *.txt *.* *)") ); if ( s.isEmpty() ) { return; } editor->setFilename( s ); editor->save(); m_tabEditors->setTabText(m_tabEditors->currentIndex(), editor->shortFilename() ); } // void MainImpl::slotHelpQtWord() { Editor *editor = currentEditor(); QString className = "index"; QString word = "index"; if ( editor ) { word = editor->wordUnderCursor(); className = editor->classNameUnderCursor(); if (className.isEmpty() ) className = word; if( !word.isEmpty() ) className = m_completion->classForFunction(className, word); } m_assistant->showQtWord(className, word ); } // void MainImpl::slotCloseCurrentTab() { Editor *editor = currentEditor(); if ( editor && !editor->close() ) return; delete editor; slotUpdateOtherFileActions(); } // void MainImpl::closeTab(int numTab) { Editor *editor = givenEditor(numTab); if ( editor && !editor->close() ) return; delete editor; slotUpdateOtherFileActions(); } // void MainImpl::closeOtherTab(int numTab) { Editor *noClose = givenEditor(numTab); QList editorlist; for (int i=0; icount(); i++) editorlist.append( givenEditor(i) ); foreach(Editor *editor, editorlist) { if ( editor != noClose ) { if ( editor && !editor->close() ) return; delete editor; } } slotUpdateOtherFileActions(); } // void MainImpl::slotClearAllBookmarks() { foreach(Editor *editor, allEditors() ) { if ( editor ) { editor->clearAllBookmarks(); } } } // bool MainImpl::slotSaveAll() { bool ok = m_projectManager->slotSaveProject(); ok = true; foreach(Editor *editor, allEditors() ) { if ( editor ) { if ( !editor->save() ) ok = false; } } return ok; } // Editor * MainImpl::openFile(QStringList locationsList, int numLine, bool silentMode, bool moveTop) { //QApplication::setOverrideCursor(Qt::WaitCursor); QString s; foreach(s, locationsList) { if ( QFile::exists( s ) ) { break; } } s = QDir::cleanPath( s ); // The file is really opened only if it exists and if it is a file. if ( !QFileInfo(s).isFile() ) { QApplication::restoreOverrideCursor(); return 0; } if ( Editor::shortFilename(s).section(".", -1, -1).toLower() == "ui" ) { //QProcess::startDetached (m_designerName, QStringList(s)); m_designer->openUI( s ); QApplication::restoreOverrideCursor(); return 0; } else if ( Editor::shortFilename(s).section(".", -1, -1).toLower() == "ts" ) { if (!QProcess::startDetached (m_linguistName, QStringList(s))) { #ifdef Q_OS_MACX if (!QProcess::startDetached (m_linguistName + "/Contents/MacOS/Linguist", QStringList(s))) { QMessageBox::critical(this, "QDevelop", tr("Cannot launch Linguist")); } #else QMessageBox::critical(this, "QDevelop", tr("Cannot launch Linguist")); #endif } QApplication::restoreOverrideCursor(); return 0; } // The file is perhaps already opened. Find filename in tabs. foreach(Editor *editor, allEditors() ) { if ( editor->filename() == s) { for (int i=0; icount(); i++) { if( givenEditor(i)->filename() == s) { m_tabEditors->setCurrentIndex( i ); } } if ( numLine != -1 ) { editor->setFocus(); editor->gotoLine( numLine, moveTop ); slotCurrentTabChanged( 0 ); } QApplication::restoreOverrideCursor(); return editor; } } // Not found in tabs, opens really. Editor *editor = new Editor(m_tabEditors, this, m_completion ,s); editor->setShowTreeClasses( m_showTreeClasses ); editor->setIntervalUpdatingTreeClasses( m_intervalUpdatingClasses ); editor->setFont( m_font ); editor->setSyntaxHighlight( m_cppHighlighter ); editor->setLineNumbers( m_lineNumbers ); editor->setAutoIndent( m_autoIndent ); editor->setSelectionBorder( m_selectionBorder ); editor->setEndLine( m_endLine ); editor->setTabSpaces( m_tabSpaces ); editor->setAutoCompletion( m_autoCompletion ); editor->setAutobrackets( m_autobrackets ); editor->setAutocomments( m_autocomments ); editor->setBackgroundColor( m_backgroundColor ); editor->setTextColor( m_textColor ); editor->setMatch( m_match ); editor->setHighlightCurrentLine( m_highlightCurrentLine ); editor->setMatchingColor( m_matchingColor ); editor->setCurrentLineColor( m_currentLineColor ); editor->setShowWhiteSpaces( m_displayWhiteSpaces ); editor->setRightMargin( m_rightMarginLine ); editor->displayEditorToolbar( m_displayEditorToolbars ); editor->setSyntaxColors ( m_formatPreprocessorText, m_formatQtText, m_formatSingleComments, m_formatMultilineComments, m_formatQuotationText, m_formatMethods, m_formatKeywords ); editor->setWordWrap(m_wordWrap); editor->setHideFindReplace(m_hideFindReplace); editor->smartClick = m_smartClick; if ( !editor->open(silentMode) ) { delete editor; QApplication::restoreOverrideCursor(); return 0; } editor->setTabStopWidth( m_tabStopWidth ); m_tabEditors->setCurrentIndex( m_tabEditors->addTab(editor, editor->shortFilename()+" ") ); editor->setFocus(); if ( numLine != -1 ) editor->gotoLine(numLine, moveTop); connect(editor, SIGNAL(editorModified(Editor *, bool)), this, SLOT(slotModifiedEditor( Editor *, bool)) ); connect(editor, SIGNAL(updateClasses(QString, QString)), this, SLOT(slotUpdateClasses(QString, QString)) ); connect(editor, SIGNAL(otherFileChanged()), this, SLOT(slotUpdateOtherFileActions())); if ( m_debug ) connect(editor, SIGNAL(breakpoint(QString, unsigned int, BlockUserData *)), m_debug, SLOT(slotBreakpoint(QString, unsigned int, BlockUserData *)) ); setCurrentFile(s); slotCurrentTabChanged( m_tabEditors->currentIndex() ); slotUpdateOtherFileActions(); QApplication::restoreOverrideCursor(); return editor; } // void MainImpl::toggleBookmark(Editor *editor, QString text, bool activate, QTextBlock block) { Bookmark bookmark; bookmark.first = editor; bookmark.second = block; int line = editor->currentLineNumber( block ); if ( activate ) { QString s = text; if ( s.length() > 50 ) s = s.left(50)+" ..."; QAction *action = new QAction(s, menuBookmarks); connect(action, SIGNAL(triggered()), this, SLOT(slotActivateBookmark())); // QAction *before = 0; QList actionsList = menuBookmarks->actions(); foreach(QAction *actionBefore, actionsList) { Bookmark bookmarkAction = actionBefore->data().value(); if ( bookmarkAction.first == editor && editor->currentLineNumber( bookmarkAction.second ) > line ) { before = actionBefore; break; } } // menuBookmarks->insertAction(before, action); QVariant v; v.setValue( bookmark ); action->setData( v ); actionActiveBookmark = action; } else { QList actionsList = menuBookmarks->actions(); foreach(QAction *action, actionsList) { Bookmark bookmarkAction = action->data().value(); if ( bookmarkAction.first == editor && bookmarkAction.second == block ) { delete action; break; } } } } // void MainImpl::slotActivateBookmark(QAction *action) { if ( action ) actionActiveBookmark = action; else actionActiveBookmark = (QAction *)sender(); Bookmark bookmark = actionActiveBookmark->data().value(); Editor *editor = 0; Editor *bookmarkEditor = bookmark.first; QTextBlock block = bookmark.second; foreach(Editor *edit, allEditors() ) { if ( edit == bookmarkEditor ) { editor = edit; break; } } if ( editor ) { QString filename = editor->filename(); int line = editor->currentLineNumber( block ); openFile(QStringList(filename), line); } } // void MainImpl::slotUpdateClasses(QString filename, QString buffer) { if ( !m_projectManager ) return; QString ext = "." + filename.section(".", -1, -1); QList projectsList; m_projectManager->childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = m_projectManager->findData(projectName, "projectDirectory"); QStringList files; if ( ext == ".cpp" ) m_projectManager->sources( m_projectManager->itemProject(projectName), files ); else m_projectManager->headers( m_projectManager->itemProject(projectName), files ); foreach(QString s, files) { if ( QDir::cleanPath(s) == QDir::cleanPath(filename) ) { QStringList parents = m_projectManager->parents(projectsList.at(nbProjects)); treeClasses->updateClasses(QDir::cleanPath(filename), buffer, parents, ext); } } } } // void MainImpl::slotModifiedEditor( Editor *editor, bool modified) { for (int i=0; icount(); i++) { if ( givenEditor(i) == editor ) { if ( modified && m_tabEditors->tabText(i).left(1) != "*" ) m_tabEditors->setTabText(i, "* "+m_tabEditors->tabText(i) ); if ( !modified && m_tabEditors->tabText(i).left(1) == "*" ) m_tabEditors->setTabText(i, m_tabEditors->tabText(i).mid(2) ); return; } } foreach(Editor *e, allEditors() ) { if( e == editor ) { if ( modified && e->windowTitle().left(1) != "*" ) e->setWindowTitle("* "+e->windowTitle() ); if ( !modified && e->windowTitle().left(1) == "*" ) e->setWindowTitle( e->windowTitle().mid(2) ); } } } // void MainImpl::slotRebuild() { slotBuild(true); } // void MainImpl::slotClean() { slotBuild(true, false); } // void MainImpl::slotCompile(bool automaticCompilation) { if( automaticCompilation && !m_automaticCompilation ) return; if( !m_projectManager ) return; Editor *editor = currentEditor(); if ( editor && Editor::suffixe( editor->filename() ).toLower() == "cpp" ) { if( automaticCompilation ) { editor->saveAsTemp(); editor->clearErrorsAndWarnings(); } if( !automaticCompilation ) { m_buildingGroup->setEnabled( false ); logBuild->clear(); dockBuild->show(); dockBuild->raise(); } if ( m_saveBeforeBuild && !automaticCompilation) slotSaveAll(); if ( !automaticCompilation ) { // // TODO should we raise the dockBuild ? // tabOutputs->setCurrentIndex( 0 ); m_projectsDirectoriesList << editor->directory(); } QString projectDirectory = m_projectManager->fileDirectory(editor->filename() ); QString filename = editor->filename(); if( automaticCompilation ) filename = editor->tempFilename(); Build* builder = new Build(this, m_qmakeName, m_makeName, m_makeOptions, projectDirectory+"/", false, false, true, filename); connect(builder, SIGNAL(finished()), builder, SLOT(deleteLater()) ); if( automaticCompilation ) { connect(builder, SIGNAL(finished()), editor, SLOT(slotEndBuild()) ); connect(builder, SIGNAL(message(QString, QString)), editor, SLOT(slotMessagesBuild(QString, QString)) ); } else { connect(builder, SIGNAL(finished()), this, SLOT(slotEndBuild()) ); connect(builder, SIGNAL(message(QString, QString)), logBuild, SLOT(slotMessagesBuild(QString, QString)) ); } connect(logBuild, SIGNAL(incErrors()), builder, SLOT(slotIncErrors()) ); connect(logBuild, SIGNAL(incWarnings()), builder, SLOT(slotIncWarnings()) ); builder->start(); } } // void MainImpl::slotBuild(bool clean, bool build, bool forceQmake, QString forceMode) { bool qmakeNeeded = false; if (!m_projectManager) { return; } if ( m_qmakeName.isEmpty() || m_makeName.isEmpty() ) { slotToolsControl(); return; } if ( actionDebug->text() == tr("Stop") && !slotDebug()) return; m_buildAfterDebug = false; if (forceMode.isEmpty()) forceMode = m_lastForcedMode; qmakeNeeded = m_projectManager->isModifiedProject(); if ( m_projectsDirectoriesList.count() == 0 ) { foreach(Editor *editor, allEditors() ) { editor->clearErrorsAndWarnings(); } m_buildingGroup->setEnabled( false ); logBuild->clear(); if ( m_saveBeforeBuild ) slotSaveAll(); dockBuild->show(); dockBuild->raise(); // m_projectsDirectoriesList = m_projectManager->buildableProjectsDirectories(); m_clean = clean; m_build = build; } QString projectDirectory = m_projectsDirectoriesList.first(); QString projectName = m_projectManager->projectName( projectDirectory ); QString makefilePath = projectDirectory + "/Makefile"; qmakeNeeded = qmakeNeeded || !QFile::exists(makefilePath) || forceQmake; if ( qmakeNeeded ) { m_configureCompletionNeeded = true; } m_builder = new Build(this, m_qmakeName, m_makeName, m_makeOptions, projectDirectory+"/"+projectName, qmakeNeeded|m_clean, m_clean, m_build, QString(), forceMode); connect(logBuild, SIGNAL(incErrors()), m_builder, SLOT(slotIncErrors()) ); connect(logBuild, SIGNAL(incWarnings()), m_builder, SLOT(slotIncWarnings()) ); connect(m_builder, SIGNAL(finished()), this, SLOT(slotEndBuild()) ); connect(m_builder, SIGNAL(finished()), m_builder, SLOT(deleteLater()) ); connect(m_builder, SIGNAL(message(QString, QString)), logBuild, SLOT(slotMessagesBuild(QString, QString)) ); foreach(Editor *editor, allEditors() ) { connect(m_builder, SIGNAL(message(QString, QString)), editor, SLOT(slotMessagesBuild(QString, QString)) ); } m_builder->start(); } void MainImpl::slotBuildRelease() { if (actionRelease_mode->isChecked()) { setQmakeForcedMode("release"); slotBuild(true, false, true, "release"); } else { slotForgetBuildMode(); } } void MainImpl::slotBuildDebug() { if (actionDebug_mode->isChecked()) { setQmakeForcedMode("debug"); slotBuild(true, false, true, "debug"); } else { slotForgetBuildMode(); } } void MainImpl::slotForgetBuildMode() { if (!m_lastForcedMode.isEmpty()) { setQmakeForcedMode(""); slotBuild(true, false, true); } } // void MainImpl::slotStopBuild() { m_projectsDirectoriesList = QStringList(QString()); m_debugAfterBuild = ExecuteNone; emit stopBuild(); } // void MainImpl::slotEndBuild() { if ( m_configureCompletionNeeded ) configureCompletion(m_projectsDirectoriesList.first()); if ( m_projectsDirectoriesList.count() ) m_projectsDirectoriesList.removeFirst(); if ( m_projectsDirectoriesList.count() ) slotBuild(); else { QString msg; Build* builder = (Build *)sender(); if ( builder->nbErrors()==0 && builder->nbWarnings()==0 ) msg = tr("Build finished without error"); else msg = tr("Build finished with")+" "; if ( builder->nbErrors() ) msg += QString::number(builder->nbErrors())+" "+tr("error(s)")+ (builder->nbWarnings() ? " "+tr("and")+ " " : QString(" ")); if ( builder->nbWarnings() ) msg += QString::number(builder->nbWarnings())+" "+tr("warning(s)")+" "; logBuild->slotMessagesBuild( QString("\n---------------------- "+msg+"----------------------\n"), ""); m_buildingGroup->setEnabled( true ); if ( m_debugAfterBuild ) slotDebug( (int)m_debugAfterBuild-1 ); } } // void MainImpl::slotFindFilesActivated(QListWidgetItem *item, QListWidgetItem *) { findLines->clear(); if ( !item ) return; QStringList list = item->data(Qt::UserRole).toStringList(); findLines->addItems( list ); } // void MainImpl::slotDoubleClickFindLines( QListWidgetItem *item) { QString texte = item->text(); int numLine = texte.section(":", 0, 0).section(" ", 1,1).toInt(); if ( numLine == 0 ) return; QListWidgetItem *it = findFiles->currentItem(); if ( !it ) it = findFiles->item(0); QString filename = it->data(Qt::UserRole+1).toString(); QApplication::setOverrideCursor(Qt::WaitCursor); openFile( QStringList( filename ), numLine, false, true); QApplication::restoreOverrideCursor(); } // void MainImpl::slotCut() { Editor *editor = currentEditor(); if ( editor ) editor->cut(); } // void MainImpl::slotPrint() { Editor *editor = currentEditor(); if ( editor ) editor->print(); } // void MainImpl::slotCurrentTabChanged(int) { foreach(Editor *editor, allEditors() ) { editor->setActiveEditor( editor == currentEditor() ); } } // void MainImpl::slotCopy() { Editor *editor = currentEditor(); if ( editor ) editor->copy(); } // void MainImpl::slotCompleteCode() { Editor *editor = currentEditor(); if ( editor ) editor->completeCode(); } // void MainImpl::slotPaste() { Editor *editor = currentEditor(); if ( editor ) editor->paste(); } // void MainImpl::slotUndo() { Editor *editor = currentEditor(); if ( editor ) editor->undo(); } // void MainImpl::slotIndent() { Editor *editor = currentEditor(); if ( editor ) editor->slotIndent(); } // void MainImpl::slotUnindent() { Editor *editor = currentEditor(); if ( editor ) editor->slotUnindent(); } // void MainImpl::slotRedo() { Editor *editor = currentEditor(); if ( editor ) editor->redo(); } // void MainImpl::slotSelectAll() { Editor *editor = currentEditor(); if ( editor ) editor->selectAll(); } // void MainImpl::slotFind() { Editor *editor = currentEditor(); if ( editor ) editor->find(); } // void MainImpl::slotReplace() { Editor *editor = currentEditor(); if ( editor ) editor->replace(); } // void MainImpl::slotGotoLine() { Editor *editor = currentEditor(); if ( editor ) editor->dialogGotoLine(); } // void MainImpl::slotFindContinue() { Editor *editor = currentEditor(); if ( editor ) editor->findContinue(); } // void MainImpl::slotFindPrevious() { Editor *editor = currentEditor(); if ( editor ) editor->findPrevious(); } // void MainImpl::slotExecuteWithoutDebug() { slotDebug(true); } // bool MainImpl::modifiedEditors() { bool modified = false; foreach(Editor *editor, allEditors() ) { if ( editor ) { if ( editor->isModified() ) modified = true; } } return modified; } // bool MainImpl::slotDebug(bool executeOnly) { if (!m_projectManager) { return false; } if ( actionDebug->text() == tr("Start") && ( m_projectManager->qmake() || modifiedEditors() ) ) { // Proposer sauvegarde int choice = QMessageBox::question(this, "QDevelop", tr("The project has been modified, do you want to save your changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( choice == 2 ) return false; if ( choice == 0 ) { m_debugAfterBuild = (ExecuteVersion)(executeOnly+1); slotBuild(); return true; } } QString exeName; if ( actionDebug->text() == tr("Stop") ) { int choice = QMessageBox::question(this, "QDevelop", tr("Stop debugging ?"), tr("Yes"), tr("No") ); if ( choice == 1 ) return false; } else exeName = m_projectManager->executableName( executeOnly ? "release" : "debug"); executeOnly = m_projectManager->isReleaseVersion(); m_debugAfterBuild = ExecuteNone; if ( exeName.isEmpty() && actionDebug->text() != tr("Stop")) { QMessageBox::critical(0, "QDevelop", tr("The program doesn't exist,")+"\n"+ tr("run Build."),tr("Ok") ); return false; } emit resetExecutedLine(); if ( actionDebug->text() == tr("Stop") ) { emit stopDebug(); m_debug->wait(); delete m_debug; m_debug = 0; slotEndDebug(); return true; } actionDebug->setText(tr("Stop")); actionDebug->setIcon( QIcon(":/toolbar/images/stop.png") ); actionDebug->setShortcut( tr("Shift+F5") ); actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setEnabled( !executeOnly ); logDebug->clear(); registersImpl->registers(QString()); dockOutputs->show(); dockOutputs->raise(); Parameters parameters = m_projectManager->parameters(); if ( parameters.workingDirectory.isEmpty() ) parameters.workingDirectory = m_projectManager->projectDirectoryOfExecutable(); m_stack->setDirectory( m_projectManager->projectDirectoryOfExecutable() ); m_debug = new Debug(this, registersImpl, m_gdbName, parameters, exeName, executeOnly); if ( !executeOnly ) { foreach(Editor *editor, allEditors() ) { connect(editor, SIGNAL(breakpoint(QString, unsigned int, BlockUserData *)), m_debug, SLOT(slotBreakpoint(QString, unsigned int, BlockUserData *)) ); editor->emitListBreakpoints(); } QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } if ( !executeOnly ) connect(m_debug, SIGNAL(onPause()), this, SLOT(slotOnPause()) ); connect(m_debug, SIGNAL(endDebug()), this, SLOT(slotEndDebug()) ); connect(m_debug, SIGNAL(message(QString)), this, SLOT(slotMessagesDebug(QString)) ); connect(m_debug, SIGNAL(debugVariables( QList )), this, SLOT(slotDebugVariables( QList )) ); m_debug->start(); return true; } // void MainImpl::slotDebugVariables( QList list) { m_stack->clear(); while ( tableLocalVariables->rowCount() ) tableLocalVariables->removeRow(0); foreach(Variable var, list ) { QTableWidgetItem *newItem1 = new QTableWidgetItem(var.name); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(var.type); newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(var.address); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem4 = new QTableWidgetItem(var.content); newItem4->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); // if ( var.kind == Debug::Local ) { int row = tableLocalVariables->rowCount(); tableLocalVariables->setRowCount(row+1); tableLocalVariables->setItem(row, 0, newItem1); tableLocalVariables->setItem(row, 1, newItem2); tableLocalVariables->setItem(row, 2, newItem3); tableLocalVariables->setItem(row, 3, newItem4); } else if ( var.kind == Debug::OtherArgs ) { for (int i=0; i < tableOtherVariables->rowCount(); i++) { if ( tableOtherVariables->item(i, 0)->text() == var.name ) { tableOtherVariables->setItem(i, 1, newItem2); tableOtherVariables->setItem(i, 2, newItem3); tableOtherVariables->setItem(i, 3, newItem4); } } } } } // void MainImpl::slotEndDebug() { m_buildingGroup->setEnabled( true ); actionDebug->setText(tr("Start")); actionDebug->setShortcut( tr("F5") ); actionDebug->setIcon( QIcon(":/toolbar/images/dbgrun.png") ); actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setText( tr("Abort") ); actionStopDebug->setToolTip( tr("Abort") ); while ( tableLocalVariables->rowCount() ) tableLocalVariables->removeRow(0); emit resetExecutedLine(); if ( m_buildAfterDebug ) slotBuild(); } // void MainImpl::slotMessagesDebug(QString message) { char identifiantPointArret[] = { 26, 26, 0x0 }; if ( message.indexOf( identifiantPointArret )==0 ) { actionStopDebug->setEnabled( true ); QString filename = message.section(":", 0, -5).mid(2); int numLine = message.section(":", -4, -4).toInt(); if ( !filename.isEmpty() && numLine ) { Editor *editor = openFile( QStringList(filename), numLine, true); if ( editor ) editor->setExecutedLine( numLine ); slotOnPause(); setWindowState(windowState() & ~Qt::WindowMinimized); raise(); activateWindow(); } } else if ( message.simplified().indexOf( '#' ) == 0 ) { m_stack->addLine( message ); } else if ( message.indexOf( "InfoSources" ) == 0 ) { m_stack->infoSources( message ); } else if ( message.indexOf( "Registers" ) == 0 ) { registersImpl->registers( message ); } else if ( message.indexOf( "Breakpoint" ) == 0 ) { // Nothing } else { logDebug->append( message ); } } // void MainImpl::slotContinueDebug() { if ( actionStopDebug->text() == tr("Abort") ) { // Ne marche pas avec gdb sous Windows #ifdef Q_OS_LINUX emit pauseDebug(); #else logDebug->append(tr("Stopping is not possible under Windows. Put breakpoints.")); #endif } else { actionStopDebug->setIcon( QIcon(":/toolbar/images/pause.png") ); actionStopDebug->setText( tr("Abort") ); actionStopDebug->setToolTip( tr("Abort") ); emit resetExecutedLine(); emit debugCommand("cont\n"); } } // void MainImpl::slotStepInto() { emit resetExecutedLine(); emit debugCommand("step\n"); } // void MainImpl::slotStepOver() { emit resetExecutedLine(); emit debugCommand("next\n"); } // void MainImpl::slotStepOut() { emit resetExecutedLine(); emit debugCommand("finish\n"); } // // void MainImpl::slotEditToGdb(QString texte) { logDebug->append( texte ); emit debugCommand(texte+"\n"); } // void MainImpl::slotOnPause() { actionStopDebug->setIcon( QIcon(":/toolbar/images/resume.png") ); actionStopDebug->setToolTip( tr("Continue") ); actionStopDebug->setText( tr("Continue") ); } // void MainImpl::updateActionsRecentsFiles() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentFiles"); QStringList files = settings.value("RecentFilesList").toStringList(); QStringList existingFiles; foreach (QString fileName, files) { if (QFile(fileName).exists()) existingFiles.push_back(fileName); } if (existingFiles.size() < files.size()) { settings.setValue("RecentFilesList", files); files = existingFiles; } int numRecentFiles = qMin(files.size(), (int)maxRecentsFiles); for (int i = 0; i < numRecentFiles; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i])); actionsRecentsFiles[i]->setText(text); actionsRecentsFiles[i]->setData("Recent|"+files[i]); actionsRecentsFiles[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentsFiles; ++j) actionsRecentsFiles[j]->setVisible(false); } // void MainImpl::updateActionsRecentsProjects() { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentProjects"); QStringList files = settings.value("RecentProjectsList").toStringList(); QStringList existingFiles; foreach (QString fileName, files) { if (QFile(fileName).exists()) existingFiles.push_back(fileName); } if (existingFiles.size() < files.size()) { settings.setValue("RecentProjectsList", files); files = existingFiles; } int numRecentFiles = qMin(existingFiles.size(), (int)maxRecentsProjects); for (int i = 0; i < numRecentFiles; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(strippedName(files[i])); actionsProjetsRecents[i]->setText(text); actionsProjetsRecents[i]->setData("Recent|"+files[i]); actionsProjetsRecents[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentsProjects; ++j) actionsProjetsRecents[j]->setVisible(false); } // void MainImpl::slotOpenRecentFile() { QAction *action = qobject_cast(sender()); if (action) openFile(QStringList(action->data().toString().remove("Recent|"))); } // void MainImpl::slotOpenRecentProject() { QAction *action = qobject_cast(sender()); if (action) openProject(action->data().toString().remove("Recent|")); } // QString MainImpl::strippedName(const QString &fullFileName) { return QFileInfo(fullFileName).fileName(); } // void MainImpl::setCurrentFile(const QString &file) { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentFiles"); QStringList files = settings.value("RecentFilesList").toStringList(); files.removeAll(file); files.prepend(file); while (files.size() > maxRecentsFiles) files.removeLast(); settings.setValue("RecentFilesList", files); updateActionsRecentsFiles(); } // void MainImpl::setCurrentProject(const QString &file) { QSettings settings(getQDevelopPath() + "qdevelop.ini", QSettings::IniFormat); settings.beginGroup("RecentProjects"); QStringList files = settings.value("RecentProjectsList").toStringList(); files.removeAll(file); files.prepend(file); while (files.size() > maxRecentsProjects) files.removeLast(); settings.setValue("RecentProjectsList", files); updateActionsRecentsProjects(); } // void MainImpl::slotFindInFiles() { if ( !m_findInFiles ) { QStringList directories; if ( m_projectManager ) { QList listeProjets; m_projectManager->childsList(0, "PROJECT", listeProjets); for (int nbProjets=0; nbProjets < listeProjets.count(); nbProjets++) { directories << m_projectManager->projectDirectory(listeProjets.at(nbProjets)->text(0)); } } m_findInFiles = new FindFileImpl(this, directories, findFiles, findLines); } else { // BK - allow find in files dialog to be moved around // and on signal set the focus. QRect rect = m_findInFiles->geometry(); m_findInFiles->hide(); m_findInFiles->setGeometry(rect); } //read selected text or current word Editor *editor = currentEditor(); if ( editor ) { m_findInFiles->setDefaultWord(editor->selection()); } dockFindInFiles->show(); dockFindInFiles->raise(); m_findInFiles->show(); // Not delete dialog to save options, location and pattern on next showing. } // void MainImpl::slotToolsControl(bool show) { ToolsControlImpl *toolsControlImpl = new ToolsControlImpl( this ); if ( (!toolsControlImpl->toolsControl() && m_checkEnvironmentOnStartup ) || show ) // toolsControlImpl->toolsControl() is always called so that there was a check done - if it isn't called, all tools will appear valid if m_checkEnvironmentOnStartup is disabled toolsControlImpl->exec(); m_qmakeName = toolsControlImpl->qmakeName(); m_makeName = toolsControlImpl->makeName(); m_gdbName = toolsControlImpl->gdbName(); m_ctagsName = toolsControlImpl->ctagsName(); m_linguistName = toolsControlImpl->linguistName(); m_lupdateName = toolsControlImpl->lupdateName(); m_lreleaseName = toolsControlImpl->lreleaseName(); m_designerName = toolsControlImpl->designerName(); // m_ctagsIsPresent = toolsControlImpl->ctagsIsPresent(); m_checkEnvironmentOnStartup = toolsControlImpl->checkEnvOnStartup(); m_assistant->setName( toolsControlImpl->assistantName() ); m_designer->setName( toolsControlImpl->designerName() ); m_assistant->setqVersion( toolsControlImpl->qVersion() ); delete toolsControlImpl; treeClasses->setCtagsIsPresent( m_ctagsIsPresent ); treeClasses->setCtagsName( m_ctagsName ); } // void MainImpl::slotAbout() { QDialog about; Ui::About ui; ui.setupUi( &about ); ui.version->setText( tr("Version %1").arg(VERSION) ); about.exec(); } // void MainImpl::slotAddDebugVariable() { bool ok; QString var = QInputDialog::getText(this, "QDevelop", tr("New Variable:"), QLineEdit::Normal, "", &ok); if (!ok || var.isEmpty()) return; for (int i=0; i < tableOtherVariables->rowCount(); i++) { if ( tableOtherVariables->item(i, 0)->text() == var ) { QMessageBox::warning(0, "QDevelop", tr("The variable \"%1\"\n already exists.").arg(var), tr("Cancel") ); return; } } QTableWidgetItem *newItem1 = new QTableWidgetItem(var); newItem1->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem2 = new QTableWidgetItem(); newItem2->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem3 = new QTableWidgetItem(); newItem3->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); QTableWidgetItem *newItem4 = new QTableWidgetItem(); newItem4->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); // int row = tableOtherVariables->rowCount(); tableOtherVariables->setRowCount(row+1); tableOtherVariables->setItem(row, 0, newItem1); tableOtherVariables->setItem(row, 1, newItem2); tableOtherVariables->setItem(row, 2, newItem3); tableOtherVariables->setItem(row, 3, newItem4); QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } // void MainImpl::slotRemoveDebugVariable() { if ( tableOtherVariables->currentRow() == -1 ) return; tableOtherVariables->removeRow( tableOtherVariables->currentRow() ); QStringList list; for (int i=0; i < tableOtherVariables->rowCount(); i++) list << tableOtherVariables->item(i, 0)->text(); emit otherVariables(list); } // void MainImpl::slotOpenFile() { if ( !m_projectManager ) return; OpenFileImpl dialog(this, m_projectManager, this); dialog.exec(); } // void MainImpl::loadPlugins() { QStringList entryList; #if defined(Q_OS_WIN) if ( m_pluginsDirectory.isEmpty() ) { QDir dir = QDir(qApp->applicationDirPath()+"/plugins"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } else { QDir dir = QDir(m_pluginsDirectory); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } #else if ( m_pluginsDirectory.isEmpty() ) { QDir dir = QDir(qApp->applicationDirPath()+"/../lib/qdevelop/plugins/"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } dir = QDir(QDir::homePath() + "/.qdevelop/plugins"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } // for linux only dir = QDir(qApp->applicationDirPath()+"/plugins/"); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } else { QDir dir = QDir(m_pluginsDirectory); foreach(QString fileName, dir.entryList(QDir::Files) ) { entryList += dir.absoluteFilePath(fileName); } } #endif // foreach (QString fileName, entryList) { QPluginLoader loader(fileName); QObject *plugin = loader.instance(); if (plugin) { SimplePluginInterface *iSimple = qobject_cast(plugin); if (iSimple) { QAction *action = new QAction(iSimple->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotSimplePlugin())); menuPlugins->addAction(action); if ( iSimple->hasConfigDialog() ) { QAction *action = new QAction(iSimple->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotConfigPlugin())); menuPluginsSettings->addAction(action); } } TextEditInterface *iTextEdit = qobject_cast(plugin); if (iTextEdit) { QAction *action = new QAction(iTextEdit->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotTextEditPlugin())); menuPlugins->addAction(action); if ( iTextEdit->hasConfigDialog() ) { QAction *action = new QAction(iTextEdit->menuName(), plugin); connect(action, SIGNAL(triggered()), this, SLOT(slotConfigPlugin())); menuPluginsSettings->addAction(action); } } } } if ( menuPlugins->actions().isEmpty() ) { delete menuPlugins; delete menuPluginsSettings; } } // void MainImpl::slotSimplePlugin() { QAction *action = qobject_cast(sender()); SimplePluginInterface * iSimple = qobject_cast(action->parent()); iSimple->start(this); } // void MainImpl::slotTextEditPlugin() { Editor *editor = currentEditor(); if ( !editor ) return; QAction *action = qobject_cast(sender()); TextEditInterface *iTextEdit = qobject_cast(action->parent()); editor->textPlugin( iTextEdit ); } // void MainImpl::slotConfigPlugin() { QAction *action = qobject_cast(sender()); TextEditInterface *iTextEdit = qobject_cast(action->parent()); if ( iTextEdit ) iTextEdit->config(); SimplePluginInterface * iSimple = qobject_cast(action->parent()); if ( iSimple ) iSimple->config(); } // void MainImpl::resetProjectsDirectoriesList() { if ( m_projectsDirectoriesList.count() ) m_projectsDirectoriesList = QStringList(QString()); } // void MainImpl::resetDebugAfterBuild() { m_debugAfterBuild = ExecuteNone; } // void MainImpl::slotNewQtVersion() { if( m_buildQtDatabase ) { QMessageBox::information(this, "QDevelop", tr("The Qt database building is already in progress.")); return; } QSqlDatabase::removeDatabase(getQDevelopPath() + "qdevelop.db"); QFile::remove( getQDevelopPath() + "qdevelop.db" ); m_buildQtDatabaseAsked = true; checkQtDatabase(); } // void MainImpl::checkQtDatabase() { if( !QFile::exists(ctagsName()) ) return; actionNewQtVersion->setEnabled(false); m_buildQtDatabase = new InitCompletion (this, treeClasses); connect(m_buildQtDatabase, SIGNAL(finished()), m_buildQtDatabase, SLOT(deleteLater()) ); connect(m_buildQtDatabase, SIGNAL(showMessage(QString)), this, SLOT(slotShowMessage(QString)) ); connect(m_buildQtDatabase, SIGNAL(finished()), this, SLOT(slotBuildQtDatabaseEnded()) ); QStringList includes; includes << m_includeDirectory; #ifdef WIN32 includes << QDir::cleanPath( QFileInfo(m_qmakeName).absoluteDir().path()+"/../src" ) ; #endif m_buildQtDatabase->setCtagsCmdPath( ctagsName() ); m_buildQtDatabase->setQtInclude( includes ); m_buildQtDatabase->slotInitParse(InitCompletion::CheckQtDatabase, QString(), QString(), true, false, true, QString()); // } void MainImpl::slotQmake() { slotBuild(false, false, true); } // void MainImpl::slotShowMessage(QString message) { QMessageBox::information(this, "QDevelop", message); } // void MainImpl::slotBuildQtDatabaseEnded() { actionNewQtVersion->setEnabled(true); m_buildQtDatabase = 0; if( m_buildQtDatabaseAsked ) QMessageBox::information(this, "QDevelop", tr("The Qt classes database build is ended.") ); } QList MainImpl::allEditors() { QList editorList; for (int i=0; icount(); i++) editorList.append( givenEditor(i) ); return editorList; } void MainImpl::slotUpdateOtherFileActions() { Editor *editor = currentEditor(); if ( !m_displayEditorToolbars && editor && editor->hasOtherFile() ) { actionOtherFile->setToolTip(editor->getOtherFileToolTip()); actionOtherFile->setIcon(QIcon(editor->getOtherFileIcon())); separatorOtherFile->setVisible(true); actionOtherFile->setVisible(true); } else { separatorOtherFile->setVisible(false); actionOtherFile->setVisible(false); } } void MainImpl::on_actionEditor_mode_triggered() { QWidget *w; bool editMode = actionEditor_mode->isChecked(); QList dockWidgets = findChildren(); foreach( w, dockWidgets ) { if (editMode) { toolbarStatus[w] = w->isVisible(); w->setVisible( false ); } else w->setVisible( toolbarStatus[w] ); } } // set up the main window for "full view" // docks on the left, right and bottom, all tabified // tabs in the sides "win" over the bottom group, as I think // it looks better. void MainImpl::on_actionFullDocksView_triggered() { setUpdatesEnabled( false ); blockSignals( true ); setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea ); setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); addDockWidget( Qt::BottomDockWidgetArea, dockBuild ); addDockWidget( Qt::BottomDockWidgetArea, dockOutputs ); addDockWidget( Qt::BottomDockWidgetArea, dockVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockOtherVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockFindInFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockClasses ); addDockWidget( Qt::RightDockWidgetArea , dockCallsStack ); addDockWidget( Qt::RightDockWidgetArea , dockRegisters ); // left docks tabifyDockWidget( dockFiles, dockClasses ); // bottom docks tabifyDockWidget( dockBuild, dockOutputs ); tabifyDockWidget( dockBuild, dockVariables ); tabifyDockWidget( dockBuild, dockOtherVariables ); tabifyDockWidget( dockBuild, dockFindInFiles ); // right docks tabifyDockWidget( dockCallsStack, dockRegisters ); foreach( QDockWidget *dock, findChildren() ) { dock->setFloating( false ); dock->show(); } // raise the first tabs in each group dockBuild->raise(); dockFiles->raise(); dockCallsStack->raise(); // just in case :) actionEditor_mode->setChecked( false ); blockSignals( false ); setUpdatesEnabled( true ); } // this is my favorite display mode, it gets it's own method // and menu item :) void MainImpl::on_actionMinimalDocksView_triggered() { setUpdatesEnabled( false ); blockSignals( true ); setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea ); setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); addDockWidget( Qt::BottomDockWidgetArea, dockBuild ); addDockWidget( Qt::BottomDockWidgetArea, dockOutputs ); addDockWidget( Qt::BottomDockWidgetArea, dockVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockOtherVariables ); addDockWidget( Qt::BottomDockWidgetArea, dockFindInFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockFiles ); addDockWidget( Qt::LeftDockWidgetArea , dockClasses ); addDockWidget( Qt::RightDockWidgetArea , dockCallsStack ); addDockWidget( Qt::RightDockWidgetArea , dockRegisters ); // left docks splitDockWidget( dockFiles, dockClasses, Qt::Vertical ); // bottom docks tabifyDockWidget( dockBuild, dockOutputs ); tabifyDockWidget( dockBuild, dockVariables ); tabifyDockWidget( dockBuild, dockOtherVariables ); tabifyDockWidget( dockBuild, dockFindInFiles ); // right docks splitDockWidget( dockCallsStack, dockRegisters, Qt::Vertical ); foreach( QDockWidget *dock, findChildren() ) { dock->setFloating( false ); dock->hide(); } dockBuild->raise(); // just in case :) actionEditor_mode->setChecked( false ); // only visible docks in this mode dockBuild->show(); dockOutputs->show(); dockFiles->show(); dockClasses->show(); setUpdatesEnabled( true ); blockSignals( false ); } void MainImpl::automaticCompilationState(Editor *editor, int state) { if( state == 2 ) m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/error.png")); else if( state == 1 ) m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/warning.png")); else m_tabEditors->setTabIcon(m_tabEditors->indexOf(editor), QPixmap(":/divers/images/empty-16x16.png")); } void MainImpl::slotNextWarningError() { if( currentEditor() ) currentEditor()->nextWarningError(); } void MainImpl::slotPreviousWarningError() { if( currentEditor() ) currentEditor()->previousWarningError(); } void MainImpl::slotClearAllWarningsErrors() { foreach(Editor *editor, allEditors() ) { editor->clearErrorsAndWarnings(); automaticCompilationState(editor, 0); } } qdevelop-v0.28/src/.svn/text-base/lineedit.h.svn-base0000444000175000017500000000226511362261065021463 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef LINEEDIT_H #define LINEEDIT_H // #include // class LineEdit : public QLineEdit { public: LineEdit( QWidget* parent); protected: virtual void mousePressEvent ( QMouseEvent * ); private: signals: protected slots: public slots: }; // #endif // LINEEDIT_H qdevelop-v0.28/src/.svn/text-base/projectmanager.cpp.svn-base0000444000175000017500000024741711362261065023234 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "mainimpl.h" #include "projectmanager.h" #include "ui_exechoice.h" #include "addexistantimpl.h" #include "addnewimpl.h" #include "addnewclassimpl.h" #include "addscopeimpl.h" #include "misc.h" #include "newprojectimpl.h" #include "projectpropertieimpl.h" #include "subclassingimpl.h" #include "parametersimpl.h" #include "tabwidget.h" #include "editor.h" // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // ProjectManager::ProjectManager(MainImpl * parent, TreeProject *treeFiles, TreeClasses *treeClasses) : m_parent(parent), m_treeFiles(treeFiles), m_treeClasses(treeClasses) {} void ProjectManager::init(QString name) { m_treeFiles->clear(); m_treeClasses->clear(); // QTreeWidgetItem *newProjectItem = new QTreeWidgetItem(m_treeFiles); // // connect(m_treeFiles, SIGNAL(addNewItem(QTreeWidgetItem *, QString)), this, SLOT(slotAddNewItem(QTreeWidgetItem *, QString))); connect(m_treeFiles, SIGNAL(addNewClass(QTreeWidgetItem *)), this, SLOT(slotAddNewClass(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addExistingsFiles(QTreeWidgetItem *)), this, SLOT(slotAddExistingFiles(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addScope(QTreeWidgetItem *)), this, SLOT(slotAddScope(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(lupdate(QTreeWidgetItem *)), this, SLOT(slotlupdate(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(lrelease(QTreeWidgetItem *)), this, SLOT(slotlrelease(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(addSubProject(QTreeWidgetItem *)), this, SLOT(slotAddSubProject(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(projectPropertie(QTreeWidgetItem *)), this, SLOT(slotProjectPropertie(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(open(QTreeWidgetItem *, int)), m_parent, SLOT(slotDoubleClickTreeFiles(QTreeWidgetItem *, int))); connect(m_treeFiles, SIGNAL(deleteItem(QTreeWidgetItem *)), this, SLOT(slotDeleteItem(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(renameItem(QTreeWidgetItem *)), this, SLOT(slotRenameItem(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(subclassing(QTreeWidgetItem *)), this, SLOT(slotSubclassing(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(previewForm(QTreeWidgetItem *)), this, SLOT(slotPreviewForm(QTreeWidgetItem *))); connect(m_treeFiles, SIGNAL(sort()), this, SLOT(slotSort())); m_isModifiedProject = false; m_previewForm = 0; m_parameters.isEmpty = true; loadProject(name, newProjectItem); parseTreeClasses(); loadProjectSettings(); } // ProjectManager::~ProjectManager() { QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( m_treeFiles->topLevelItem ( 0 ) ) m_treeClasses->toDB( directory ); m_treeFiles->clear(); m_treeClasses->clear(); if ( m_previewForm ) delete m_previewForm; QSqlDatabase::database().close(); } // QStringList ProjectManager::parents(QTreeWidgetItem *it) { QStringList parentsList; if ( !it ) return QStringList(); QTreeWidgetItem *parent = it; if ( toKey( it->data(0, Qt::UserRole) ) == "PROJECT" || toKey( it->data(0, Qt::UserRole) ) == "SCOPE" ) parentsList.prepend( it->text( 0 ) ); // while ( (parent = parent->parent()) ) { if ( toKey( parent->data(0, Qt::UserRole) ) == "PROJECT" || toKey( parent->data(0, Qt::UserRole) ) == "SCOPE" ) parentsList.prepend( parent->text( 0 ) ); } return parentsList; } // void ProjectManager::parseTreeClasses(bool force) { if ( !m_parent->showTreeClasses() ) return; m_treeClasses->clear(); QString directory = projectDirectory( m_treeFiles->topLevelItem( 0 ) ); if ( QFile::exists( directory + "/" + SETTINGS_FILE_NAME ) && !force) { m_treeClasses->fromDB( directory ); } else { // QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); QStringList files; sources(projectsList.at(nbProjects), files ); headers(projectsList.at(nbProjects), files ); files.sort(); extern QSplashScreen *splash; QProgressBar *bar = 0; if ( !splash ) { bar = new QProgressBar( 0 ); bar->setStyle( new QPlastiqueStyle() ); QRect screenGeometry = QDesktopWidget().screenGeometry(); bar->setGeometry( (screenGeometry.width()-(screenGeometry.width()/8))/2, (screenGeometry.height()-30)/2, screenGeometry.width()/8, 30 ); bar->setWindowFlags( Qt::Tool | Qt::WindowStaysOnTopHint ); bar->setAlignment( Qt::AlignHCenter ); bar->setMaximum( files.count() ); bar->setFormat( tr("Project parsing")+" %p%" ); bar->show(); } int value = 0; foreach(QString s, files) { QStringList parentsList = parents(projectsList.at(nbProjects)); QString buffer; Editor *editor = 0; foreach(Editor *ed, m_parent->allEditors() ) { if ( ed->filename() == s) { editor = ed; } } if ( editor ) { buffer = editor->toPlainText(); } else { QFile file(s); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) continue; buffer = file.readAll(); file.close(); } m_treeClasses->updateClasses(s, buffer, parentsList, "."+s.section(".", -1, -1)); if ( !splash ) bar->setValue( value++ ); else splash->showMessage(QObject::tr("Current project parsing")+" "+QString::number((100/files.count())*value++)+"%", Qt::AlignRight | Qt::AlignTop, Qt::white); } if ( !splash ) delete bar; } } } // Parameters ProjectManager::parameters() { if ( m_parameters.isEmpty ) { ParametersImpl *parametersimpl = new ParametersImpl(0); m_parameters = parametersimpl->parameters(); delete parametersimpl; } m_parameters.isEmpty = false; return m_parameters; } // void ProjectManager::setParameters(Parameters p) { m_parameters = p; m_parameters.isEmpty = false; } // QStringList ProjectManager::dependpath(QTreeWidgetItem *it) { if ( !it ) return QStringList(); while ( toKey( it->data(0, Qt::UserRole) ) != "PROJECT" ) it = it->parent(); QTreeWidgetItem *itDepend = 0; for (int i=0; ichildCount(); i++) { if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "DEPENDPATH" ) { itDepend = it->child(i); break; } } if ( !itDepend ) return QStringList(); QStringList path; for (int i=0; ichildCount(); i++) { path << itDepend->child( i )->text(0); } return path; } // bool ProjectManager::close() { QTreeWidgetItem *it = item(m_treeFiles->topLevelItem ( 0 ), "PROJECT", Key); if ( !it ) return true; QString projectName = it->text(0); if ( isModifiedProject() ) { // Save? int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return false; if ( rep == 0 ) { slotSaveProject(); } } return true; } // void ProjectManager::saveProjectSettings() { // Save opened files QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( !connectDB( directory + "/" + SETTINGS_FILE_NAME ) ) return; QSqlQuery query(QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME) ); QString queryString = "delete from editors where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from bookmarks where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from breakpoints where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from config where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } queryString = "delete from projectsDirectories where 1"; if (!query.exec(queryString)) { qDebug() << "Failed to execute" << queryString; return; } foreach(Editor *editor, m_parent->allEditors() ) { if ( editor ) { QString filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO editors (filename, scrollbar, numline) " "VALUES (:filename, :scrollbar, :numline)"); query.bindValue(":filename", filename); query.bindValue(":scrollbar", editor->verticalScrollBar()); query.bindValue(":numline", editor->currentLineNumber()); if ( !query.exec() ) qDebug() << query.lastError(); foreach(int line, editor->bookmarksList()) { filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO bookmarks (filename, numline) " "VALUES (:filename, :numline)"); query.bindValue(":filename", filename); query.bindValue(":numline", line); if ( !query.exec() ) qDebug() << query.lastError(); } foreach(QTextBlock block, editor->breakpointsList()) { BlockUserData *blockUserData = (BlockUserData*)block.userData(); filename = QDir( directory ).relativeFilePath( editor->filename() ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO breakpoints (filename, numline, breakpointCondition, isTrue) " "VALUES (:filename, :numline, :breakpointCondition, :isTrue)"); query.bindValue(":filename", filename); query.bindValue(":numline", editor->currentLineNumber(block)); query.bindValue(":breakpointCondition", blockUserData->breakpointCondition); query.bindValue(":isTrue", blockUserData->isTrue); if ( !query.exec() ) qDebug() << query.lastError(); } } } // QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); QString srcDir = srcDirectory( itemProject(projectName) ); srcDir = QDir( projectDir ).relativeFilePath( srcDir ); QString uiDir = uiDirectory( itemProject(projectName) ); uiDir = QDir( projectDir ).relativeFilePath( uiDir ); QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("INSERT INTO projectsDirectories (projectName, srcDirectory, uiDirectory) " "VALUES (:projectName, :srcDirectory, :uiDirectory)"); query.bindValue(":projectName", projectName); query.bindValue(":srcDirectory", srcDir); query.bindValue(":uiDirectory", uiDir); if ( !query.exec() ) qDebug()<<"projectsDirectories" << query.lastError(); } // query.prepare("INSERT INTO config (key, value) " "VALUES (:key, :value)"); query.bindValue(":key", "currentEditor"); if ( m_parent->tabEditors()->count() ) query.bindValue(":value", QString::number( m_parent->tabEditors()->currentIndex()) ); else query.bindValue(":value", "-1"); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); query.bindValue(":key", "showAsKrawek"); query.bindValue(":value", QString::number( m_treeFiles->showAsKrawek() ) ); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); query.bindValue(":key", "forceQmakeMode"); query.bindValue(":value", m_parent->qmakeForcedMode() ); if ( !query.exec() ) qDebug()<<"config" << query.lastError(); } // void ProjectManager::loadProjectSettings() { // Save opened files QString directory = projectDirectory(m_treeFiles->topLevelItem(0)); if ( !connectDB( directory + "/" + SETTINGS_FILE_NAME ) ) return; QSqlQuery query( QSqlDatabase::database( directory + "/" + SETTINGS_FILE_NAME )); query.prepare("select * from editors where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int scrollbar = query.value(1).toInt(); int numline = query.value(2).toInt(); m_parent->openFile( QStringList( filename ) ); if ( m_parent->tabEditors()->count() && numline ) { m_parent->givenEditor( m_parent->tabEditors()->count()-1 )->setVerticalScrollBar( scrollbar ); m_parent->givenEditor( m_parent->tabEditors()->count()-1 )->gotoLine( numline,false ); } } // query.prepare("select * from bookmarks where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int line = query.value(1).toInt(); Editor *editor = m_parent->openFile( QStringList(filename) ); if ( editor ) editor->toggleBookmark( line ); } // query.prepare("select * from breakpoints where 1"); query.exec(); while (query.next()) { QString filename = query.value(0).toString(); filename = QDir( directory ).absoluteFilePath( filename ); int line = query.value(1).toInt(); QString breakpointCondition = query.value(2).toString(); bool isTrue = query.value(3).toBool(); Editor *editor = m_parent->openFile( QStringList(filename) ); if ( editor ) editor->toggleBreakpoint(line, breakpointCondition, isTrue); } // query.prepare("select * from config where 1"); query.exec(); while (query.next()) { int currentEditor = -1; QString key = query.value( 0 ).toString(); if( key == "currentEditor" ) { currentEditor = query.value( 1 ).toString().toInt(); if ( currentEditor != -1 ) m_parent->tabEditors()->setCurrentIndex( currentEditor ); } else if( key == "showAsKrawek" ) { bool showAsKrawek = query.value( 1 ).toString().toInt(); if( showAsKrawek ) m_treeFiles->slotShowAsKrawek(); } else if ( key == "forceQmakeMode" ) { m_parent->setQmakeForcedMode(query.value( 1 ).toString()); } } // query.prepare("select * from projectsDirectories where 1"); query.exec(); while (query.next()) { QString projectName = query.value( 0 ).toString(); QString projectDir = projectDirectory( projectName ); QString srcDir = query.value( 1 ).toString(); srcDir = QDir( projectDir ).absoluteFilePath( srcDir ); QString uiDir = query.value( 2 ).toString(); uiDir = QDir( projectDir ).absoluteFilePath( uiDir ); QTreeWidgetItem *itProject = itemProject( projectName ); setSrcDirectory(itProject, srcDir); setUiDirectory(itProject, uiDir); } } // void ProjectManager::slotAddExistingFiles(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString plateforme; QStringList filesList; AddExistantImpl *window = new AddExistantImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { //window->comboProjects->addItem( projectName, QVariant(reinterpret_cast(projectsList.at(nbProjects)))); window->comboProjects->addItem( projectName, addressToVariant( projectsList.at(nbProjects) ) ); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } //window->comboProjects->addItem( nomScope, QVariant(reinterpret_cast(listeScope.at(nbScope)))); window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->slotComboProjects( window->comboProjects->currentText() ); QVariant variant; if ( window->exec() == QDialog::Accepted ) { projectName = window->comboProjects->currentText(); QString line = window->filename->text(); filesList = line.split(","); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); projectDir = projectDirectory( item ); setQmake( projectFilename(item) ); foreach(QString filename, filesList) { filename = filename.remove("\"").simplified(); filename = QDir(projectDir).relativeFilePath(filename).replace("\\", "/"); insertFile(item, filename); } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotAddNewClass(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString absoluteFilename; QString plateforme; QStringList filesList; AddNewClassImpl *window = new AddNewClassImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->on_comboProjects_currentIndexChanged( window->comboProjects->currentIndex() ); if ( window->exec() == QDialog::Accepted ) m_isModifiedProject = true; delete window; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotAddNewItem(QTreeWidgetItem *it, QString kind) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; QString projectDir; QString absoluteFilename; QString plateforme; QStringList filesList; AddNewImpl *window = new AddNewImpl(this); if ( !kind.isEmpty() ) { if ( kind == "SOURCES" ) window->source->setChecked(true); else if ( kind == "HEADERS" ) window->header->setChecked(true); else if ( kind == "FORMS" ) window->dialog->setChecked(true); else if ( kind == "RESOURCES" ) window->resource->setChecked(true); else if ( kind == "TRANSLATIONS" ) window->translation->setChecked(true); } QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); projectDir = findData(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it || projectsList.at(nbProjects) == it->parent() ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); window->slotComboProjects( window->comboProjects->currentText() ); QVariant variant; QString filename; QString repCreation; window->slotFileType(); if ( window->exec() == QDialog::Accepted ) { QString line = window->filename->text(); filesList = line.split(","); repCreation = window->location->text().replace("\\", "/"); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); projectDir = projectDirectory( item ); QDir projectDirObj(projectDir); setQmake( projectFilename( item ) ); foreach(QString filename, filesList) { absoluteFilename = projectDirObj.absoluteFilePath(repCreation)+"/"+filename.remove("\"").simplified(); absoluteFilename = QDir::cleanPath(absoluteFilename); projectDirObj.mkdir( repCreation ); filename = projectDirObj.relativeFilePath(absoluteFilename); QFile file ( absoluteFilename ); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file already exists in directory."), tr("Cancel") ); return; } QByteArray templateData; if ( absoluteFilename.section(".", -1, -1) == "ui" ) { // set a default content for UI files QStringList items; items << "QDialog" << "QMainWindow" << "QWidget"; bool ok; QString item = QInputDialog::getItem(0, "QDevelop", tr("Forms:"), items, 0, false, &ok); if (ok && !item.isEmpty()) { QString templateName; if ( item == "QDialog" ) templateName = ":/templates/templates/dialog.ui"; else if ( item == "QMainWindow" ) templateName = ":/templates/templates/mainwindow.ui"; else templateName = ":/templates/templates/widget.ui"; QFile templateFile(templateName); templateFile.open(QIODevice::ReadOnly); templateData = templateFile.readAll(); templateFile.close(); } else return; } else if ( filename.section(".", -1, -1) == "h" || filename.section(".", -1, -1) == "hpp" ) { // add a default content for *.h files QString defString = filename.toUpper().section("/", -1, -1); // filter out bad chars int j = defString.length(); for ( int i=0; i < j; i++ ) { if (!defString[i].isLetterOrNumber()) defString[i] = '_'; } // leading _ are because the file name can start with a digit, // while an identifier on C/C++ can not // trailing _ are for fun templateData.append( QString("#ifndef __%1__\n").arg( defString ) ); templateData.append( QString("#define __%1__\n").arg( defString ) ); templateData.append( QString("\n// place your code here\n\n") ); templateData.append( QString("#endif // __%1__\n").arg( defString ) ); } else if ((filename.section(".", -1, -1) == "c" ) || (filename.section(".", -1, -1) == "cpp" ) ) { // user added 2 files to the project, which means // source + header // lets assume users do not put "," in the file name if (filesList.count() != 1) { QString includeFile = filename.left( filename.lastIndexOf(".") ) + ".h"; includeFile = includeFile.section("/", -1, -1); templateData.append( QString("#include \"%1\"\n\n").arg( includeFile ) ); } templateData.append( QString("// place your code here\n") ); } // The (.ts) file must be created by lupdate only if ( filename.section(".", -1, -1) != "ts" ) { if ( !file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } if (!templateData.isEmpty ()) { file.write( templateData ); } file.close(); } insertFile(item, filename); // If it's a (.ts) file, save the project then call lupdate to create the file on disk. if ( filename.section(".", -1, -1) == "ts" ) { slotSaveProject(); slotlupdate(item); } } m_isModifiedProject = true; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // bool ProjectManager::listContains(QListlist, QString name, findMode type) { for (int i=0; i < list.count(); i++) { if ( (type==Data && list.at( i )->text(0)==name) ) return true; else if (type==Key && toKey( list.at( i )->data(0, Qt::UserRole) )==name) return true; } return false; } // void ProjectManager::insertFile(QTreeWidgetItem *it, QString filename, bool silentMode) { filename = filename.remove("\"").simplified(); if ( filename.isEmpty() ) return; QString kindFile = filename.toLower().section(".", -1, -1); QTreeWidgetItem *newItem; if ( ( newItem = item(it, filename, Data) ) ) { if ( !silentMode) QMessageBox::warning(0, "QDevelop", tr("The file already exists."), tr("Cancel") ); //return; } else { if ( !(QStringList() << "ui" << "cpp" << "h" << "hpp" << "qrc" << "ts").contains(kindFile) ) { if ( !silentMode) QMessageBox::warning(0, "QDevelop", tr("This file is not permitted."), tr("Ok") ); return; } QString parentKey; if ( kindFile == "ui" ) parentKey = "FORMS"; else if ( kindFile == "cpp" ) { parentKey = "SOURCES"; } else if ( kindFile == "h" || kindFile == "hpp" ) { parentKey = "HEADERS"; } else if ( kindFile == "qrc" ) parentKey = "RESOURCES"; else if ( kindFile == "ts" ) parentKey = "TRANSLATIONS"; // Le file de type "DATA" doit re contenu dans une clcorrespondant au type de file QTreeWidgetItem *parent = 0; for (int i=0; ichildCount(); i++) { if ( toKey( it->child( i )->data(0, Qt::UserRole) ) == parentKey ) { parent = it->child( i ); break; } } if ( !parent ) parent = insertItem(it, parentKey, parentKey, "+="); newItem = insertItem(parent, "DATA", filename); // do { m_treeFiles->setItemExpanded(parent, true ); } while ( (parent = parent->parent()) ); } // if ( kindFile == "cpp" || kindFile == "h" || kindFile == "hpp") { QString projectDir = projectDirectory(newItem); QString absoluteName = QDir(projectDir+"/"+filename).absolutePath(); QFile file(absoluteName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString buffer = file.readAll(); file.close(); QStringList parentsList = parents(newItem); m_treeClasses->updateClasses(absoluteName, buffer, parentsList, "."+kindFile); } } } void ProjectManager::slotAddSubProject(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); NewProjectImpl *window = new NewProjectImpl(m_parent, projectDirectory(it->text(0))); window->setWindowTitle( tr("Sub-project creation") ); window->parentProjectName->setText( it->text(0) ); if ( window->exec() == QDialog::Accepted ) { setQmake( projectFilename( it ) ); QString filename = window->filename(); bool continuer = true; QList listeTemplate; childsList(it, "TEMPLATE", listeTemplate); if ( listeTemplate.count() ) { for (int nbTemplate=0; nbTemplate < listeTemplate.first()->childCount(); nbTemplate++) { if ( listeTemplate.first()->child(nbTemplate)->text(0) == "subdirs" ) { continuer = false; } } } while ( continuer ) { continuer = false; for (int i=0; ichildCount(); i++) { if ( !QString("absoluteNameProjectFile:projectDirectory").contains( toKey( it->child( i )->data(0,Qt::UserRole) ) ) ) { delete it->child( i ); continuer = true; } } } if ( !item(it, "TEMPLATE", Key ) ) insertItem( insertItem(it, "TEMPLATE", "TEMPLATE", "="), "DATA", "subdirs" ); QTreeWidgetItem *itSubdir = item(it, "SUBDIRS", Key); if ( !itSubdir ) itSubdir = insertItem(it, "SUBDIRS", "SUBDIRS", "="); itSubdir->setText(0, tr("Sub-Projects")); QTreeWidgetItem *subProjectItem = insertItem(itSubdir, "PROJECT", filename); insertItem(subProjectItem, "qmake", "1"); insertItem(subProjectItem, "absoluteNameProjectFile", window->absoluteProjectName()); insertItem(subProjectItem, "projectDirectory", window->location->text() + "/" + QFileInfo(window->projectName->text()).baseName()); insertItem(subProjectItem, "subProjectName", filename.left(filename.lastIndexOf("."))); loadProject(window->absoluteProjectName(), subProjectItem); QTreeWidgetItem *itProject = itemProject( window->filename() ); setSrcDirectory(itProject, window->srcDirectory->text()); setUiDirectory(itProject, window->uiDirectory->text()); //m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); m_parent->configureCompletion( projectDirectory( window->location->text() + "/" + QFileInfo(window->projectName->text()).baseName() ) ); } delete window; } // void ProjectManager::slotProjectPropertie(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); while ( it && toKey( it->data(0,Qt::UserRole) ) != "PROJECT" ) it = it->parent(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName = projectFilename(it); ; ProjectPropertieImpl *window = new ProjectPropertieImpl(this, m_treeFiles, it); if ( window->exec() == QDialog::Accepted ) { m_isModifiedProject = true; setQmake(projectName); setSrcDirectory(itemProject(projectName), window->srcDirectory->text() ); setUiDirectory(itemProject(projectName), window->uiDirectory->text() ); } delete window; } // void ProjectManager::slotAddScope(QTreeWidgetItem *it) { if ( !it ) it = m_treeFiles->currentItem(); if ( !it ) it = m_treeFiles->topLevelItem( 0 ); QString projectName; AddScopeImpl *window = new AddScopeImpl(this); QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { projectName = projectsList.at(nbProjects)->text(0); //projectDir = data(projectName, "projectDirectory"); QList listeTemplate; bool ajouter = true; for (int enfant=0; enfantchildCount(); enfant++) { ajouter = true; if ( toKey( projectsList.at(nbProjects)->child(enfant)->data(0,Qt::UserRole) ) == "TEMPLATE") { QTreeWidgetItem *itTemplate = projectsList.at(nbProjects)->child(enfant); for (int nbTemplate=0; nbTemplate < itTemplate->childCount(); nbTemplate++) { if ( itTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; break; } } } } if ( ajouter ) { //window->comboProjects->addItem( projectName, QVariant(reinterpret_cast(projectsList.at(nbProjects)))); window->comboProjects->addItem( projectName, addressToVariant(projectsList.at(nbProjects))); if ( projectsList.at(nbProjects) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); QList listeScope; childsList(projectsList.at(nbProjects), "SCOPE", listeScope); for (int nbScope=0; nbScope < listeScope.count(); nbScope++) { QString nomScope; QTreeWidgetItem *tmp = listeScope.at(nbScope); int nbSpace = 0; while ( tmp ) { QString cleTmp = toKey( tmp->data(0,Qt::UserRole) ); QString indent; for (int i=0; itext(0) + ":" + nomScope.simplified(); if ( cleTmp == "PROJECT" ) break; tmp = tmp->parent(); nbSpace++; } //window->comboProjects->addItem( nomScope, QVariant(reinterpret_cast(listeScope.at(nbScope)))); window->comboProjects->addItem( nomScope, addressToVariant(listeScope.at(nbScope))); if ( listeScope.at(nbScope) == it ) window->comboProjects->setCurrentIndex( window->comboProjects->count()-1); } } } // if ( window->comboProjects->count() == 1 ) window->comboProjects->setEnabled( false ); QVariant variant; QString scopeName; if ( window->exec() == QDialog::Accepted ) { if ( window->win32->isChecked() ) scopeName = "win32"; else if ( window->Unix->isChecked() ) scopeName = "unix"; else if ( window->mac->isChecked() ) scopeName = "mac"; else if ( window->debug->isChecked() ) scopeName = "debug"; else if ( window->release->isChecked() ) scopeName = "release"; else scopeName = window->scopeName->text(); variant = window->comboProjects->itemData( window->comboProjects->currentIndex() ); delete window; } else { delete window; return; } //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); insertItem(item, "SCOPE", scopeName); setQmake( projectFilename(item) ); } // void ProjectManager::setQmake(QString projectName) { QTreeWidgetItem *itProjet = item(m_treeFiles->topLevelItem ( 0 ), projectName, Data); QTreeWidgetItem *itModifie = item(itProjet, "qmake", Key); itModifie->setText(0, "1"); m_isModifiedProject = true; } // bool ProjectManager::qmake(QString projectName) { bool retour = true; if ( !projectName.isEmpty() ) { retour = findData(projectName, "qmake") == "1"; QTreeWidgetItem *itProjet = item(m_treeFiles->topLevelItem ( 0 ), projectName, Data); //if( itProjet ) QTreeWidgetItem *itModifie = item(itProjet, "qmake", Key); if ( itModifie ) itModifie->setText(0, "0"); } else { QList list; childsList(m_treeFiles->topLevelItem ( 0 ), "PROJECT", list); for (int i=0; itext(0) == "1"; itModifie->setText(0, "0"); } } } return retour; } // void ProjectManager::slotlupdate(QTreeWidgetItem *it) { if ( m_parent->saveBeforeBuild() ) slotSaveProject(); if ( isModifiedProject() ) { // Proposer sauvegarde int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return; if ( rep == 0 ) { slotSaveProject(); } } QApplication::setOverrideCursor(Qt::WaitCursor); QString projectDir = projectDirectory( it ); QString name = projectName( projectDir ); QProcess process; process.setWorkingDirectory( projectDir ); process.start(m_parent->lupdateName(), QStringList() << "-noobsolete" << name); process.waitForFinished(); QApplication::restoreOverrideCursor(); } // void ProjectManager::slotlrelease(QTreeWidgetItem *it) { if ( m_parent->saveBeforeBuild() ) slotSaveProject(); if ( isModifiedProject() ) { // Proposer sauvegarde int rep = QMessageBox::question(0, "QDevelop", tr("Save project changes ?"), tr("Yes"), tr("No"), tr("Cancel"), 0, 2 ); if ( rep == 2 ) return; if ( rep == 0 ) { slotSaveProject(); } } QApplication::setOverrideCursor(Qt::WaitCursor); QString projectDir = projectDirectory( it ); QString name = projectName( projectDir ); QProcess process; process.setWorkingDirectory( projectDir ); process.start(m_parent->lreleaseName(), QStringList(name)); process.waitForFinished(); setQmake( projectFilename(it) ); QApplication::restoreOverrideCursor(); } // void ProjectManager::slotPreviewForm(QTreeWidgetItem *it) { if ( m_previewForm ) { delete m_previewForm; m_previewForm = 0; } QString projectDir = projectDirectory(it); QString filename = it->text(0); QString uiName = QDir(projectDir+"/"+filename).absolutePath(); QUiLoader builder; QFile file(uiName); file.open(QFile::ReadOnly); m_previewForm = builder.load(&file, 0); file.close(); // if ( m_previewForm ) { m_previewForm->setWhatsThis( filename ); // Set tooltip for all widgets in form QString name = m_previewForm->objectName(); QString className = m_previewForm->metaObject()->className(); m_previewForm->setToolTip( name+" ("+className+")" ); QRect rect = QDesktopWidget().screenGeometry(); m_previewForm->setGeometry((rect.width()-m_previewForm->width())/2, (rect.height()-m_previewForm->height())/2, m_previewForm->width(), m_previewForm->height()); QList widgets; widgets += m_previewForm->findChildren(); foreach(QWidget *w, widgets) { w->installEventFilter( this ); name = w->objectName(); className = w->metaObject()->className(); w->setToolTip( name+" ("+className+")" ); w->setWhatsThis( filename ); } // m_previewForm->installEventFilter( this ); QDialog *dlg = dynamic_cast(m_previewForm); QMainWindow *win = dynamic_cast(m_previewForm); if ( win ) { win->setAttribute(Qt::WA_QuitOnClose, false); win->show(); } else if ( dlg ) { dlg->show(); } else { m_previewForm->show(); } } else { QString error = tr("File not found: \"%1\"").arg(uiName); QMessageBox::warning(0, "QDevelop", error, tr("Cancel") ); } } // void ProjectManager::slotSubclassing(QTreeWidgetItem *it) { QString projectDir = projectDirectory(it); QString projectName = projectFilename( it ); QString srcDir = srcDirectory( itemProject(projectName) ); QString filename = it->text(0); QString uiName = QDir(projectDir+"/"+filename).absolutePath(); QStringList listeHeaders; headers( itemProject(projectName), listeHeaders); SubclassingImpl *dialog = new SubclassingImpl(0, m_parent, srcDir, uiName, listeHeaders); if (!dialog->isValid()) { QString error = tr("File not found: \"%1\"").arg(uiName); QMessageBox::warning(0, "QDevelop", error, tr("Cancel") ); delete dialog; return; } if ( dialog->exec() == QDialog::Accepted ) { while ( toKey( it->data(0, Qt::UserRole) ) != "PROJECT" ) it = it->parent(); projectDir = projectDirectory( itemProject(projectName) ); setQmake( projectFilename(it) ); QString filename = QDir(projectDir).relativeFilePath(dialog->newFile()+".h").replace("\\", "/"); insertFile(it, filename, true); filename = QDir(projectDir).relativeFilePath(dialog->newFile()+".cpp").replace("\\", "/"); insertFile(it, filename, true); } delete dialog; m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotRenameItem(QTreeWidgetItem *it) { if ( !it ) return; QTreeWidgetItem *itProject = itemProject( projectFilename(it) ); QString projectDir = projectDirectory(it); QString oldAbsolutePath = QDir(projectDir+"/"+it->text(0)).absolutePath(); QString path = it->text(0).section("/", 0, -2); QString filename = it->text(0).section("/", -1, -1); bool ok; filename = QInputDialog::getText(0, "QDevelop", tr("New name:"), QLineEdit::Normal, filename, &ok); if ( !ok ) return; if ( oldAbsolutePath.section(".", -1, -1) != filename.section(".", -1, -1) ) { int rep = QMessageBox::question(0, "QDevelop", tr("The kind of the new and the old filename is different !"), tr("Rename"), tr("Cancel") ); if ( rep == 1 ) return; } if (!filename.isEmpty()) { QString newName; if ( !path.isEmpty() ) newName = path + "/" + filename; else newName = filename; QString newAbsolutePath = QDir(projectDir+"/"+newName).absolutePath(); QFile file( oldAbsolutePath ); if ( file.rename( newAbsolutePath ) ) { slotDeleteItem(it, true); insertFile(itProject, newName); m_parent->renameEditor(oldAbsolutePath, newAbsolutePath); m_isModifiedProject = true; foreach(Editor *editor, m_parent->allEditors() ) { editor->setNameOtherFile(oldAbsolutePath, newAbsolutePath); } } else { QMessageBox::warning(0,"QDevelop", tr("Unable to rename the file to \"%1\"").arg(newAbsolutePath), tr("Cancel")); return; } } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::slotDeleteItem(QTreeWidgetItem *it, bool silentMode) { if ( !it ) return; if ( it == m_treeFiles->topLevelItem ( 0 ) ) { QMessageBox::warning(0, "QDevelop", tr("Cannot remove the main project."), tr("Ok") ); return; } int rep = 0; if ( !silentMode ) { rep = QMessageBox::question(0, "QDevelop", tr("Do you want to remove \"%1\" from the project ?").arg(it->text(0)), tr("Yes"), tr("No") ); } if ( rep == 1 ) return; // /*QString filename = it->text(0); QString projectName = projectFilename( it ); QString projectDir = projectDirectory(it); QString absoluteName = QDir(projectDir+"/"+filename).absolutePath(); if( filename.section(".", -1, -1).toLower() == "h" || filename.section(".", -1, -1).toLower() == "cpp") m_treeClasses->clearFile( absoluteName );*/ setQmake( projectFilename( it ) ); QTreeWidgetItem *parent = it->parent(); delete it; while ( !parent->childCount() ) { it = parent->parent(); delete parent; parent = it; } // m_treeClasses->clear(); parseTreeClasses(); // // Le parent est de type PROJECT. S'il a un TEMPLATE subdirs mais qu'il n'a plus de sous-projets, // il doit devenir un projet normal de TEMPLATE app. if ( toKey( parent->data(0, Qt::UserRole) ) == "PROJECT" ) { bool subdirs = false; QTreeWidgetItem *itTemplate = item(parent, "TEMPLATE", Key); if ( itTemplate ) { QList list; childsList(itTemplate, "DATA", list); for (int i=0; itext(0) == "subdirs" ) subdirs = true; } } if ( subdirs ) { QTreeWidgetItem *itTemplate = item(parent, "TEMPLATE", Key); if ( itTemplate ) delete itTemplate; itTemplate = insertItem(parent, "TEMPLATE", "TEMPLATE", "="); insertItem(itTemplate, "DATA", "app" ); } } m_parent->configureCompletion( projectDirectory(m_treeFiles->topLevelItem( 0 ) ) ); } // void ProjectManager::loadProject(QString s, QTreeWidgetItem *newProjectItem) { QTreeWidgetItem *itemProject = newProjectItem; QFile file(s); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QString projectName = s.section("/",-1,-1); newProjectItem->setText(0, projectName); newProjectItem->setData(0, Qt::UserRole, toItem("PROJECT")); m_treeFiles->setItemExpanded(newProjectItem, true ); // // insertItem(newProjectItem, "absoluteNameProjectFile", s); insertItem(newProjectItem, "srcDirectory", ""); insertItem(newProjectItem, "uiDirectory", ""); QTreeWidgetItem *it; QString projectDirectory = QDir().absoluteFilePath(s).left( QDir().absoluteFilePath(s).lastIndexOf("/") ); insertItem(newProjectItem, "projectDirectory", projectDirectory); insertItem(newProjectItem, "qmake", "1"); QString key; QString data; bool toFollow = false; bool scope = false; while (!file.atEnd()) { QString line = QString( file.readLine() ); if ( !line.simplified().length() ) continue; if ( scope && !toFollow) { scope = false; newProjectItem = newProjectItem->parent(); } while ( !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && !line.simplified().contains(QRegExp("^#")) && line.indexOf(":")!=-1 && ( line.indexOf(":")data(0, Qt::UserRole) ) == "SCOPE" ) newProjectItem = it; else newProjectItem = insertItem(newProjectItem, "SCOPE", line.section(":", 0, 0).simplified()); scope = true; line = line.section(":", 1); } if ( !line.simplified().contains(QRegExp("^#")) && !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && line.contains("{") ) { it = item(newProjectItem, line.section("{", 0, 0).simplified(), Data); if ( it && toKey( it->data(0, Qt::UserRole) ) == "SCOPE" ) newProjectItem = it; else newProjectItem = insertItem(newProjectItem, "SCOPE", line.section("{", 0, 0).simplified()); toFollow = true; continue; } if ( !line.simplified().contains(QRegExp("^#")) && !line.contains(QRegExp("\"")) && !line.contains(QRegExp("/")) && line.contains("}") ) { newProjectItem = newProjectItem->parent(); continue; } // if ( !line.simplified().contains(QRegExp("^#")) /*&& !line.contains(QRegExp("\""))*/ && line.contains("=") ) { QString operateur; if ( line.contains("+=") ) operateur = "+="; else if ( line.contains("-=") ) operateur = "-="; else if ( line.contains("*=") ) operateur = "*="; else if ( line.contains("~=") ) operateur = "~="; else operateur = "="; key = line.simplified().section(operateur, 0, 0).simplified(); data = line.simplified().section(operateur, 1).simplified(); toFollow = line.simplified().right(1) == "\\"; if ( data.simplified().right(1) == "\\" ) data = data.simplified().left( data.simplified().length()-1 ); QTreeWidgetItem *it = 0; for (int i=0; ichildCount(); i++) { if ( toKey( newProjectItem->child( i )->data(0, Qt::UserRole) ) == key ) { it = newProjectItem->child( i ); break; } } if ( !it ) it = insertItem(newProjectItem, key, key, operateur); if ( key == "SUBDIRS" ) it->setText(0, tr("Sub-projects")); if ( toFollow ) newProjectItem = it; QString name; bool guillemet = false; data = data.simplified(); for (int i=0; iparent(); } else if ( !line.simplified().contains(QRegExp("^#")) ) { QString function = line.simplified().section("\(", 0, 0).simplified(); data = line.simplified(); insertItem(newProjectItem, "DATA", data); } /*else //if ( line.contains(QRegExp("^#")) ) { insertItem(newProjectItem, "TEXTELIBRE", line); toFollow = false; }*/ // SUBDIRS loading for (int i=0; ichildCount(); i++) { if ( toKey( newProjectItem->child( i )->data(0, Qt::UserRole) ) == "SUBDIRS" ) { QTreeWidgetItem *sub = newProjectItem->child( i ); m_treeFiles->setItemExpanded(sub, true ); for (int n=0; nchildCount(); n++) { QString name = sub->child(n)->text(0); QString subDirName = QDir(projectDirectory+"/"+name).absolutePath(); QStringList filesList = QDir(subDirName).entryList(); foreach(QString newProjectName, filesList ) { if ( newProjectName.toLower().right(4) == ".pro" ) { loadProject(subDirName+"/"+newProjectName, sub->child( n )); insertItem(sub->child( n ), "subProjectName", name); } } } } } } // if ( findData(projectName, QString("TEMPLATE")).isEmpty() ) { QTreeWidgetItem *tmp = insertItem(itemProject, "TEMPLATE", "TEMPLATE", "="); insertItem(tmp, "DATA", "app"); } return; } // QTreeWidgetItem * ProjectManager::insertItem(QTreeWidgetItem *parent, QString key, QString data, QString op) { QString begin; if ( !op.isEmpty() && op != "=" && op != "+=" ) begin = op + " "; QTreeWidgetItem *it = new QTreeWidgetItem(parent); it->setText(0, data); it->setData(0, Qt::UserRole, toItem(key, op)); key = "|"+key+"|"; QString parentKey = "|"+toKey( it->parent()->data(0, Qt::UserRole) )+"|"; if ( !QString("|PROJECT|SUBDIRS|SOURCES|SCOPE|HEADERS|FORMS|TRANSLATIONS|RESOURCES|").contains(key) ) if (key!="|DATA|" || !QString("|PROJECT|SUBDIRS|SOURCES|SCOPE|HEADERS|FORMS|TRANSLATIONS|RESOURCES|").contains(parentKey) ) m_treeFiles->setItemHidden(it, true); if ( key == "|HEADERS|" ) { it->setText(0, begin + tr("Headers")); it->setIcon(0, QIcon(":/treeview/images/h.png")); } else if ( key == "|SOURCES|" ) { it->setText(0, begin + tr("Sources")); it->setIcon(0, QIcon(":/treeview/images/cpp.png")); } else if ( key == "|FORMS|" ) { it->setText(0, begin + tr("Dialogs")); it->setIcon(0, QIcon(":/treeview/images/designer.png")); } else if ( key == "|TRANSLATIONS|" ) { it->setText(0, begin + tr("Translations")); it->setIcon(0, QIcon(":/treeview/images/linguist.png")); } else if ( key == "|RESOURCES|" ) { it->setText(0, begin + tr("Resources")); it->setIcon(0, QIcon(":/treeview/images/qrc.png")); } else { it->setToolTip(0, data); } QTreeWidgetItem *itemParent = it->parent(); bool hide = true; for (int i = 0; i < itemParent->childCount(); i++ ) if ( !m_treeFiles->isItemHidden(itemParent->child(i) ) ) hide = false; if ( hide && toKey( itemParent->data(0, Qt::UserRole) ) != "SCOPE" && toKey( itemParent->data(0, Qt::UserRole) ) != "PROJECT") m_treeFiles->setItemHidden(itemParent, true); else { do { m_treeFiles->setItemHidden(itemParent, false); } while ( (itemParent = itemParent->parent()) ); } return it; } // bool ProjectManager::slotSaveProject() { if ( !isModifiedProject() ) return true; QTreeWidgetItem *itemProject = m_treeFiles->topLevelItem ( 0 ); bool ret = saveDataOfProject(itemProject, new QTextStream()); if ( ret ) { QTreeWidgetItem *it = item(m_treeFiles->topLevelItem ( 0 ), "PROJECT", Key); if ( !it ) return true; it = item(it, "absoluteNameProjectFile", Key); if ( !it ) return true; } m_isModifiedProject = false; return ret; } // bool ProjectManager::saveDataOfProject(QTreeWidgetItem *it, QTextStream *s, int nbSpace, QString endOfLine) { QTextStream *output = s; QString key = toKey( it->data(0, Qt::UserRole) ); QString op = toOp( it->data(0, Qt::UserRole) ); QString data = it->text(0); QString indent; for (int x=0; xtopLevelItem ( 0 ) ) ) { QString subProjectName = item(it, "subProjectName", Key)->text(0); *output << subProjectName + " "; *output << endOfLine; } if ( key == "PROJECT" ) { nbSpace = -1; QString absoluteName = item(it, "absoluteNameProjectFile", Key)->text(0); file.setFileName(absoluteName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; output = new QTextStream(&file); } else if ( key == "SCOPE" ) { *output << indent+data << " {\n"; if ( !it->childCount() ) { nbSpace--; for (int x=0; xchildCount() ) *output << "\n"; } for ( int i=0; ichildCount(); i++) { QString newEndLine = ""; if ( it->childCount() > 4 && i+1childCount() ) newEndLine = " \\\n"; else if ( i+1 == it->childCount() ) newEndLine = "\n"; saveDataOfProject(it->child(i), output, nbSpace+1, newEndLine); } if ( it->childCount() && key == "SCOPE" ) { *output << indent+"}\n"; } return true; } // QString ProjectManager::projectDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "projectDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // void ProjectManager::setUiDirectory(QTreeWidgetItem *it, QString s) { QTreeWidgetItem *itModifie = item(it, "uiDirectory", Key); itModifie->setText(0, s); } // QString ProjectManager::uiDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "uiDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // void ProjectManager::setSrcDirectory(QTreeWidgetItem *it, QString s) { QTreeWidgetItem *itModifie = item(it, "srcDirectory", Key); itModifie->setText(0, s); } // QString ProjectManager::srcDirectory(QTreeWidgetItem *it) { QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { for (int i=0; ichildCount(); i++ ) if ( toKey( tmp->child( i )->data(0, Qt::UserRole) ) == "srcDirectory" ) return tmp->child( i )->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // QString ProjectManager::projectDirectory(QString projectName) { QString rep = findData(projectName, "projectDirectory"); return rep; } // QString ProjectManager::fileDirectory(QString absoluteFilename) { // Renvoie le repertoire du projet auquel appartient le file nommabsoluteFilename QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString projectDir = findData(projectsList.at(nbProjects)->text(0), "projectDirectory"); QList dirSourcesList; childsList(projectsList.at(nbProjects), "SOURCES", dirSourcesList); for (int nbSrc=0; nbSrc < dirSourcesList.count(); nbSrc++) { QList filesList; childsList(dirSourcesList.at(nbSrc), "DATA", filesList); for (int nbFic=0; nbFic < filesList.count(); nbFic++) { QString name = filesList.at(nbFic)->text(0); if ( QDir().absoluteFilePath(projectDir + "/" + name) == absoluteFilename ) return projectDir; } } } return QString(); } // QString ProjectManager::projectName(QString location) { // Renvoie le name du projet prent dans location QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QString name = projectsList.at(nbProjects)->text(0); if ( findData(name, "projectDirectory") == location ) return name; } return QString(); } // QString ProjectManager::absoluteNameProjectFile(QTreeWidgetItem *it) { // Renvoie le name absolu du file projet auquel appartient le file sectionndans le treeview // Nom au format /home/jl/monprojet/monprojet.pro ou C:/jl/monprojet/monprojet.pro QTreeWidgetItem *tmp = item(it, "PROJECT", Key); if ( !tmp ) return ""; QString projectName = tmp->text(0); return findData(projectName, "projectDirectory")+"/"+projectName; } // QString ProjectManager::findData(QString projectName, QString key) { QTreeWidgetItem *it = item(0, projectName, Data); if ( !it ) return QString(); it = item(it, key, Key); if ( it ) return it->text(0); return QString(); } // QString ProjectManager::projectFilename(QTreeWidgetItem *it) { // Renvoie le name court du file projet auquel appartient le file sectionndans le treeview // Nom au format monprojet.pro QTreeWidgetItem *tmp = it; do { if ( tmp->text(0).toLower().right(4) == ".pro" ) { return tmp->text(0); } } while ( (tmp = tmp->parent()) ); return QString(); } // QTreeWidgetItem *ProjectManager::item(QTreeWidgetItem *begin, QString name, findMode type) { // Renvoie le premier item correspondant la recherche if ( begin == 0 ) begin = m_treeFiles->topLevelItem( 0 ); if ( (type==Data && begin->text(0)==name) ) return begin; else if (type==Key && toKey( begin->data(0, Qt::UserRole) )==name) return begin; else { // Les enfants for (int i=0; ichildCount(); i++) { if ( (type==Data && begin->child( i )->text(0)==name) ) return begin->child( i ); else if (type==Key && toKey( begin->child( i )->data(0, Qt::UserRole) )==name) return begin->child( i ); } // Les petits-enfants for (int i=0; ichildCount(); i++) { QTreeWidgetItem *retour = item(begin->child( i ), name, type); if ( retour ) return retour; } } return 0; } // QTreeWidgetItem *ProjectManager::itemProject(QString projectName) { QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { if ( projectName == projectsList.at(nbProjects)->text(0) ) return projectsList.at(nbProjects); } return 0; } // void ProjectManager::childsList(QTreeWidgetItem *begin, QString key, QList &list) { // Renvoie la list enfants correspondants la cl if ( begin == 0 ) begin = m_treeFiles->topLevelItem( 0 ); if ( toKey( begin->data(0, Qt::UserRole) ) == key ) list.append(begin); for (int i=0; ichildCount(); i++) { childsList(begin->child(i), key, list); } return; } // QStringList ProjectManager::buildableProjectsDirectories() { QStringList list; QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { bool ajouter = false; QString projectName = projectsList.at(nbProjects)->text(0); QString projectDir = findData(projectName, "projectDirectory"); //QList listeTemplate; //childsList(projectsList.at(nbProjects), "TEMPLATE", listeTemplate); QTreeWidgetItem *itemTemplate = item(projectsList.at(nbProjects), "TEMPLATE", Key); ajouter = true; if ( itemTemplate ) { for (int nbTemplate=0; nbTemplate < itemTemplate->childCount(); nbTemplate++) { if ( itemTemplate->child(nbTemplate)->text(0) == "subdirs" ) { ajouter = false; } } } if ( ajouter ) { list << projectDir; } } return list; } // QString ProjectManager::projectVersion(QTreeWidgetItem *it) { QTreeWidgetItem *itConfig = 0; QTreeWidgetItem *itTemplate = 0; for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = it->child( i ); QString key = toKey( item->data(0, Qt::UserRole) ); if ( key == "CONFIG" ) { itConfig = item; } if ( key == "TEMPLATE" ) { itTemplate = item; } } if ( itTemplate ) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = itTemplate->child( i ); QString data = item->text(0); if ( data == "lib" || data == "subdirs" ) { return QString(); } } } if ( itConfig ) { for (int i=0; ichildCount(); i++) { QTreeWidgetItem *item = itConfig->child( i ); QString data = item->text(0); if ( data == "debug" || data == "release" || data == "debug_and_release" ) { return data; } } } return "debug"; } // QString ProjectManager::executableName(QString preferedVersion) { if ( !m_executablesList.count() ) { QList projectsList; childsList(0, "PROJECT", projectsList); for (int nbProjects=0; nbProjects < projectsList.count(); nbProjects++) { QTreeWidgetItem *it = projectsList.at(nbProjects); QString projectName = it->text(0); QString projectDir = projectDirectory( it ); QString realVersion = projectVersion( it ); if ( realVersion.toLower() == "debug_and_release" ) realVersion = preferedVersion; else if (!m_parent->qmakeForcedMode().isEmpty()) { realVersion = m_parent->qmakeForcedMode(); } if ( realVersion != preferedVersion && realVersion.length() ) { QMessageBox::warning(0, "QDevelop", tr("The only available version for \"%1\" is %2").arg(projectName, realVersion), tr("Run on %1").arg(realVersion) ); } if ( realVersion.toLower() == "release" ) m_releaseVersion = true; else m_releaseVersion = false; QString name = findExecutable(projectDir, realVersion); if ( !name.isNull() ) { m_projectDirectoryOfExecutableList << projectDir; m_executablesList << name; } } } if ( m_executablesList.count() == 1 ) { QString choice = m_executablesList.first(); m_executablesList.clear(); m_projectDirectoryOfExecutable = m_projectDirectoryOfExecutableList.first(); return choice; } else if ( m_executablesList.count() == 0 ) return QString(); else { QString choice; QDialog *window = new QDialog; Ui::ExeChoice ui; ui.setupUi(window); foreach(QString name, m_executablesList ) { if ( name.length() < 50 ) ui.list->addItem( name ); else ui.list->addItem( "... "+name.right(50) ); } ui.list->setCurrentRow( 0 ); if ( window->exec() == QDialog::Accepted ) { int line = ui.list->currentRow(); choice = m_executablesList.at(line); if ( ui.dontask->isChecked() ) { m_executablesList.clear(); m_executablesList << choice; m_projectDirectoryOfExecutable = m_projectDirectoryOfExecutableList.at(line); } } delete window; return choice; } return QString(); } // void ProjectManager::headers(QTreeWidgetItem *it, QStringList &headerFiles) { if ( !it ) it = m_treeFiles->topLevelItem(0); if ( !it ) return; QString projectDir = projectDirectory( it ); for (int i=0; ichildCount(); i++) { if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "HEADERS" ) { for (int j=0; jchild(i)->childCount(); j++) { headerFiles += projectDir+"/"+it->child(i)->child(j)->text(0); } } else if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SCOPE" ) { headers(it->child(i), headerFiles); } } return; } // void ProjectManager::sources(QTreeWidgetItem *it, QStringList &sourcesFiles) { if ( !it ) it = m_treeFiles->topLevelItem(0); if ( !it ) return; QString projectDir = projectDirectory( it ); for (int i=0; ichildCount(); i++) { QTreeWidgetItem *itChild = it->child(i); if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SOURCES" ) { for (int j=0; jchildCount(); j++) { sourcesFiles += projectDir+"/"+itChild->child(j)->text(0); } } else if ( toKey( it->child(i)->data(0, Qt::UserRole) ) == "SCOPE" ) { sources(it->child(i), sourcesFiles); } } return; } // void ProjectManager::setCurrentItem(const QString& _strFileName) { QString strSearch( QDir::cleanPath(_strFileName) ); qint32 ii; QTreeWidgetItem* pItemFound = NULL; QList projectsList; childsList(0, "PROJECT", projectsList); for (ii = 0; ii < projectsList.count() && NULL == pItemFound; ++ii) { QString strProjectDir = projectDirectory(projectsList.at(ii)); pItemFound = find_r(projectsList.at(ii), strSearch, strProjectDir); } } // QTreeWidgetItem* ProjectManager::find_r(const QTreeWidgetItem* _pItem, const QString& _strFileName, const QString& _strProjectDir) // BK - recursive call { QTreeWidgetItem* pItemFound = NULL; qint32 ii, jj; for (ii = 0; ii < _pItem->childCount() && NULL == pItemFound; ++ii) { QTreeWidgetItem* pItemChild = _pItem->child(ii); if ( toKey( _pItem->child(ii)->data(0, Qt::UserRole) ) == "SCOPE" ) { pItemFound = find_r(_pItem->child(ii), _strFileName, _strProjectDir); } else { for (jj = 0; jj < pItemChild->childCount(); ++jj) { QString str = _strProjectDir+"/"+pItemChild->child(jj)->text(0); if ( QDir::cleanPath(str) == _strFileName ) { pItemFound = pItemChild->child(jj); m_treeFiles->setCurrentItem(pItemFound); } } } } return pItemFound; } // QString ProjectManager::findExecutable( QString projectDirectory, QString preferedVersion ) { // Find on Makefile, Makefile.Debug or Makefile.Release the name of executable // then return it if the suffixe is not .so, .dll or .a QString fichierMakefile, cible, repertoireDest, nomCompletDest; QString exeName; QString line; QFile makefile(projectDirectory+"/"+"Makefile"); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QTextStream *makefileText = new QTextStream(&makefile); while (!makefileText->atEnd()) { line = QString( makefileText->readLine() ); // Here the file Makefile call under Windows (only) Makefile.Debug or Makefile.Release. if ( line.contains(" ") && line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="all" )) cible = preferedVersion+"-all"; else if ( line.contains(" ") && line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="debug" || line.section(" ", 1, 1).simplified()=="release")) cible = line.section(" ", 1, 1).simplified(); if ( line.contains("=") && line.section("=", 0, 0).simplified() == "MAKEFILE" ) fichierMakefile = line.section("=", 1, 1).simplified(); if ( !cible.isNull() && line.section(":", 0, 0) == cible ) { fichierMakefile = line.section(" ", 1, 1).simplified().replace("$(MAKEFILE)", fichierMakefile); makefile.close(); makefile.setFileName( projectDirectory+"/"+fichierMakefile ); delete makefileText; if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); cible = QString(); makefileText = new QTextStream(&makefile); continue; } // Part for Win and Linux // TARGET is the good variable to find exe on Linux if ( line.contains("=") && line.section("=", 0, 0).simplified() == "TARGET" ) { QString exe = line.section("=", 1, 1).simplified(); int pos = exe.indexOf("#"); if ( pos > -1 ) exe = exe.left(pos); exe = exe.replace("\\ ", " "); exe = QDir::cleanPath(projectDirectory + "/" + exe ).remove("\""); if ( !QString("so:dll:a").contains(exe.section(".", -1, -1).toLower() ) && QDir().exists(exe) ) exeName = exe; } // DESTDIR_TARGET is only present on MinGW Makefile if ( line.contains("=") && line.section("=", 0, 0).simplified() == "DESTDIR_TARGET" ) { QString exe = line.section("=", 1, 1).simplified(); int pos = exe.indexOf("#"); if ( pos > -1 ) exe = exe.left(pos); exe = exe.replace("\\ ", " "); exe = QDir::cleanPath(projectDirectory + "/" + exe ).remove("\""); if ( !QString("so:dll:a").contains(exe.section(".", -1, -1).toLower() ) && QDir().exists(exe) ) exeName = exe; } } makefile.close(); delete makefileText; return exeName; } // void ProjectManager::slotSort() { m_treeFiles->sortItems(0, Qt::AscendingOrder); m_isModifiedProject = true; return; } // bool ProjectManager::eventFilter( QObject *obj, QEvent *ev ) { if ( obj == m_previewForm ) { if ( ev->type() == QEvent::Close ) { if ( m_previewForm ) { m_previewForm->deleteLater(); m_previewForm = 0; } return true; } else { return false; } } else return QObject::eventFilter(obj,ev); } // QString ProjectManager::toOp(QVariant variant) { Item item = variant.value(); return item.op; } // QString ProjectManager::toKey(QVariant variant) { Item item = variant.value(); return item.key; } // QVariant ProjectManager::toItem(QString key, QString op) { // An item contains: // a key "HEADERS", "SOURCES", "DATA" etc. // a operator "=", "+="; "-=", "*=" or "~=". This operator is read and wrote in project file // Example : SOURCES += myfile.cpp Item item; item.key = key; item.op = op; QVariant v; v.setValue( item ); return v; } qdevelop-v0.28/src/.svn/text-base/designer.cpp.svn-base0000444000175000017500000000412711362261065022020 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "designer.h" #include "mainimpl.h" #include #include #include #include #include #include #include // Designer::Designer() { if( QString(qVersion()).remove(".").toInt() >= 430 ) { process = new QProcess( this ); socket = new QTcpSocket( this ); } } // Designer::~Designer() { if( QString(qVersion()).remove(".").toInt() >= 430 ) { if ( process->state() == QProcess::Running ) { process->terminate(); } } } // void Designer::openUI(QString file) { if( QString(qVersion()).remove(".").toInt() >= 430 ) { QString lu; if ( process->state() == QProcess::NotRunning ) { process->start(m_designerName, QStringList() << "-server" ); process->waitForFinished(3000); lu = process->readAll(); if ( lu.isEmpty() ) { QMessageBox::information(0, "QDevelop", QObject::tr("Unable to start Designer !") ); return; } else { m_port = lu.toUShort(); socket->connectToHost( "localhost", m_port ); } } QTextStream os( socket ); os << file << "\n"; os.flush(); } else { QProcess::startDetached (m_designerName, QStringList(file)); } } qdevelop-v0.28/src/.svn/text-base/subclassingimpl.cpp.svn-base0000444000175000017500000004101411362261065023413 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "subclassingimpl.h" #include "projectmanager.h" #include "editor.h" #include "tabwidget.h" #include "ui_newimplementation.h" #include #include #include #include #include #include #include #include #include SubclassingImpl::SubclassingImpl(ProjectManager * parent, MainImpl *mainImpl, QString srcDirectory, QString uiName, QStringList headers) : QDialog(0) { m_srcDirectory = srcDirectory; m_parent = parent; m_mainImpl = mainImpl; m_uiName = uiName; QApplication::setOverrideCursor(Qt::WaitCursor); setupUi(this); treeSlots = new QTreeWidget; treeSlots->hide(); treeSlots->setHeaderLabel( tr("") ); proxyModel = new QSortFilterProxyModel; proxyModel->setDynamicSortFilter(true); proxyModel->setSourceModel(treeSlots->model()); filterView->setModel(proxyModel); implementations(headers); if ( comboClassName->count() ) { comboClassName->setCurrentIndex( 0 ); slotParseForm(); } QApplication::restoreOverrideCursor(); } QString SubclassingImpl::newFile() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString(); return filename; } QStringList SubclassingImpl::signatures(QString header) { QStringList sign; bool slot = false; QString formattedParams, name; foreach(QString line, header.split("\n") ) { if ( line.simplified().right(1) == ":" ) { if ( line.simplified().contains("slots") ) slot = true; else slot = false; continue; } if ( slot ) { line = line.simplified(); line = line.section(" ", 1).simplified(); name = line.section("(", 0, 0).simplified(); QString params = line.section("(", 1).section(")", 0, 0).simplified(); formattedParams.clear(); foreach(QString param, params.split(",") ) { if ( param.contains("=") ) param = param.simplified().left( param.simplified().lastIndexOf("=") ); if ( param.contains("&") ) param = param.simplified().left( param.simplified().lastIndexOf("&")+1 ); else if ( param.contains("*") ) param = param.simplified().left( param.simplified().lastIndexOf("*")+1 ); else if ( param.simplified().contains(" ") ) param = param.simplified().left( param.simplified().lastIndexOf(" ")+1 ); formattedParams += param + ","; } formattedParams = formattedParams.simplified().left( formattedParams.lastIndexOf(",") ); QString s = name + "(" + formattedParams + ")"; sign << QMetaObject::normalizedSignature( s.toLatin1() ); } } return sign; } void SubclassingImpl::implementations(QStringList headers) { QString name = objectName(); if (name.isEmpty()) { return; } foreach(QString header, headers) { QFile file(header); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream in(&file); QString className; while (!in.atEnd()) { QString line = in.readLine(); if ( line.simplified().indexOf("class ") == 0 && !line.contains(";") ) className = line.simplified().section("class ", 1, 1).section(":", 0, 0).simplified().section(" ", -1, -1).simplified(); if ( line.contains("Ui::"+name) ) { header = header.left( header.lastIndexOf(".") ); comboClassName->addItem(className, QVariant(header)); break; } } file.close(); } } QString SubclassingImpl::objectName() { QUiLoader loader; QFile file(m_uiName); file.open(QFile::ReadOnly); QWidget *dial = loader.load(&file, this); file.close(); if (!dial) { return QString(); } QString name = dial->objectName(); delete dial; return name; } QString SubclassingImpl::className() { QUiLoader loader; QFile file(m_uiName); file.open(QFile::ReadOnly); QWidget *dial = loader.load(&file, this); file.close(); if (!dial) { return QString(); } QString className = dial->metaObject()->className(); delete dial; return className; } QStringList SubclassingImpl::templateHeaderImpl() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString().section("/", -1).section(".", 0); QString classImpl = comboClassName->currentText(); QFile file(":/templates/templates/impl.h.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$IMPL_H", filename.toUpper()+"_H"); data.replace("$UIHEADERNAME", "\"ui_"+m_uiName.section("/", -1, -1).section(".", 0, 0)+".h\""); data.replace("$CLASSNAME", classImpl); data.replace("$PARENTNAME", className()); data.replace("$OBJECTNAME", objectName()); QStringList impl = data.split("\n"); return impl; } QStringList SubclassingImpl::templateSourceImpl() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString().section("/", -1); QString classImpl = comboClassName->currentText(); QFile file(":/templates/templates/impl.cpp.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$HEADERNAME", "\""+filename+".h\""); data.replace("$CLASSNAME", classImpl); data.replace("$PARENTNAME", className()); QStringList impl = data.split("\n"); return impl; } void SubclassingImpl::on_okButton_clicked() { QString filename = comboClassName->itemData( comboClassName->currentIndex() ).toString(); QFile file( filename + ".h" ); QStringList headerImpl; QStringList sourceImpl; // Find filename in opened editors Editor *editorHeader = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == filename+ ".h" ) { editorHeader = ed; } } // if ( editorHeader ) { // Get content of opened editor headerImpl = editorHeader->toPlainText().split("\n"); } else { // If file exists, get content from file if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { headerImpl = QString(file.readAll()).split("\n"); file.close(); } else // Otherwise creation of a new content from template headerImpl = templateHeaderImpl(); } // int headerInsertLineAfter = headerImpl.indexOf( "private slots:" ); if ( headerInsertLineAfter != -1 ) { if ( editorHeader ) { headerInsertLineAfter += 2; } else { headerInsertLineAfter += 1; } } if ( headerInsertLineAfter == -1 ) { int last = headerImpl.lastIndexOf("};"); if ( last == -1 ) last = headerImpl.lastIndexOf("}"); headerInsertLineAfter = last -1 ; if ( editorHeader ) { editorHeader->insertText("private slots:\n", headerInsertLineAfter++); } else { headerInsertLineAfter--; headerImpl.insert(headerInsertLineAfter++, "private slots:"); } } // Implementation // Find filename in opened editors Editor *editorImplementation = 0; foreach(Editor *ed, m_mainImpl->allEditors() ) { if ( ed->filename() == filename+ ".cpp" ) { editorImplementation = ed; } } if ( !editorImplementation ) { // Get content of opened editor file.setFileName( filename+".cpp" ); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { sourceImpl = QString(file.readAll()).split("\n"); file.close(); } else // Otherwise creation of a new content from template sourceImpl = templateSourceImpl(); } // Now insert code for all new items checked for (int i=0; itopLevelItemCount(); i++) { QTreeWidgetItem *topLevelItem = treeSlots->topLevelItem( i ); for (int j=0; j< topLevelItem->childCount(); j++) { QTreeWidgetItem *item = topLevelItem->child( j ); if ( item->checkState( 0 ) && item->textColor(0)!= Qt::blue ) { QString s = item->data(0, Qt::UserRole).toString(); if ( editorHeader ) editorHeader->insertText("\tvoid "+s+";\n", headerInsertLineAfter++); else headerImpl.insert(headerInsertLineAfter++, "\tvoid "+s+";"); if ( editorImplementation ) { editorImplementation->insertText("void "+ comboClassName->currentText() + "::" + s, -1); editorImplementation->insertText("{", -1); editorImplementation->insertText("\t// TODO", -1); editorImplementation->insertText("}\n", -1); } else { sourceImpl << "void "+ comboClassName->currentText() + "::" + s; sourceImpl << "{"; sourceImpl << "\t// TODO"; sourceImpl << "}\n"; } } } } if ( !editorHeader ) { file.setFileName( filename+".h" ); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { foreach(QString line, headerImpl) { file.write( line.toLatin1()+"\n" ); } } file.close(); } if ( !editorImplementation ) { file.setFileName( filename+".cpp" ); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { foreach(QString line, sourceImpl) { file.write( line.toLatin1()+"\n" ); } } file.close(); } } void SubclassingImpl::on_clearButton_clicked() { filterEdit->clear(); } void SubclassingImpl::on_newImplementation_clicked() { QDialog *dial = new QDialog; uiNewImplementation.setupUi(dial); connect(uiNewImplementation.locationButton, SIGNAL(clicked()), this, SLOT(slotLocation()) ); connect(uiNewImplementation.className, SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); connect(uiNewImplementation.location , SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); connect(uiNewImplementation.filename , SIGNAL(textChanged(QString)), this, SLOT(slotEnableokButton(QString)) ); if ( !comboClassName->count() ) { uiNewImplementation.className->setText(objectName()+"Impl"); uiNewImplementation.location->setText(m_srcDirectory+"/"); uiNewImplementation.filename->setText(QString(objectName()+"Impl").toLower()); } if ( dial->exec() == QDialog::Accepted ) { if ( uiNewImplementation.filename->text().right(2).toLower() == ".h" || uiNewImplementation.filename->text().right(4).toLower() == ".cpp" ) uiNewImplementation.filename->setText( uiNewImplementation.filename->text().left( uiNewImplementation.filename->text().lastIndexOf(".") ) ); comboClassName->addItem(uiNewImplementation.className->text(), QVariant(uiNewImplementation.location->text()+"/"+uiNewImplementation.filename->text())); comboClassName->setCurrentIndex( comboClassName->count()-1 ); slotParseForm(); } delete dial; } void SubclassingImpl::on_comboClassName_activated(int i) { slotParseForm(); // supress gcc warnings i = 0; } void SubclassingImpl::on_filterEdit_textChanged( const QString &text ) { QRegExp regExp( text, Qt::CaseInsensitive, QRegExp::RegExp2 ); proxyModel->setFilterRegExp(regExp); } void SubclassingImpl::slotParseForm() { QString data = comboClassName->itemData( comboClassName->currentIndex() ).toString(); if ( QFile::exists( data + ".h" ) ) { okButton->setText( tr("&Update") ); } else { okButton->setText( tr("C&reate") ); } okButton->setEnabled( true ); filename->setText( data.section("/", -1).section(".", 0, 0) + " "+tr("(.h and .cpp)") ); location->setText( data.left( data.lastIndexOf("/")+1 ) ); QString headerContent; QFile fileHeader( comboClassName->itemData( comboClassName->currentIndex() ).toString() + ".h"); if (fileHeader.open(QIODevice::ReadOnly | QIODevice::Text)) { headerContent = fileHeader.readAll(); fileHeader.close(); } QStringList listeSignatures = signatures(headerContent); QFile file(m_uiName); QUiLoader loader; QTreeWidgetItem *item; QWidget *dial; file.open(QFile::ReadOnly); dial = loader.load(&file, this); file.close(); if (!dial) { return; } QList widgets = dial->findChildren(); QList actions = dial->findChildren(); QList objs; // merge the 2 lists into one big one! foreach(QObject *o, actions) objs.append( o ); foreach(QObject *o, widgets) objs.append( o ); treeSlots->clear(); foreach(QObject *w, objs) { QString name = w->objectName(); if ( name.isEmpty() ) continue; QString className = w->metaObject()->className(); item = new QTreeWidgetItem(QStringList(name+" ("+className+")")); treeSlots->addTopLevelItem ( item ); for (int i=0; imetaObject()->methodCount(); i++) { QMetaMethod meta = w->metaObject()->method( i ); if ( meta.methodType() == QMetaMethod::Signal ) { QTreeWidgetItem *item2 = new QTreeWidgetItem(item, QStringList()<<"on_"+name+"_"+meta.signature()); QString method = QString("on_"+name+"_"+meta.signature()).section("(", 0, 0) + "("; for (int param=0; paramsetData(0, Qt::UserRole, QVariant(method)); if ( listeSignatures.contains( "on_"+name+"_"+meta.signature() ) ) { item2->setFlags( Qt::ItemIsEnabled ); item2->setCheckState(0, Qt::Checked ); item2->setTextColor(0, Qt::blue); } else { item2->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); item2->setCheckState(0, Qt::Unchecked ); } } } treeSlots->expandItem( item ); } delete dial; } void SubclassingImpl::slotLocation() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), m_srcDirectory, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) return; uiNewImplementation.location->setText( s ); } void SubclassingImpl::slotEnableokButton(QString) { uiNewImplementation.okButton->setDisabled( uiNewImplementation.location->text().isEmpty() || uiNewImplementation.className->text().isEmpty() || uiNewImplementation.filename->text().isEmpty() ); } qdevelop-v0.28/src/.svn/text-base/textEdit.h.svn-base0000444000175000017500000001525611362261065021464 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TEXTEDIT_H #define TEXTEDIT_H #include #include #include #include "mainimpl.h" #include "InitCompletion.h" #include "ui_findwidget.h" #include "ui_replacewidget.h" // typedef QMap classesMethodsList; // class LineNumbers; class SelectionBorder; class Editor; class FindImpl; class CppHighlighter; class TextEditInterface; class QPixmap; // class TextEdit : public QTextEdit { Q_OBJECT public: QString tempFilename(); void saveAsTemp(); TextEdit(Editor * parent, MainImpl *mainimpl, InitCompletion *completion); ~TextEdit(); bool open(bool silentMode, QString filename, QDateTime &lastModified); bool save(QString filename, QDateTime &lastModified); bool close(QString filename); QTextCursor getLineCursor( int line ) const; void setLineNumbers( LineNumbers* ); LineNumbers* lineNumbers(); void setSelectionBorder( SelectionBorder* ); SelectionBorder* selectionBorder(); void findText(); void setExecutedLine(int line); void selectLines(int debut, int fin); QString wordUnderCursor(const QPoint & pos=QPoint(), bool select=false); QString wordUnderCursor(const QString text); QString firstWordUnderCursor(); QString classNameUnderCursor(const QPoint & pos=QPoint(), bool addThis=true); void activateLineNumbers(bool activate); void setSelectionBorder(bool activate); void setSyntaxHighlight(bool activate ); void setAutoIndent( bool activate ) { m_autoindent = activate; }; void setAutoCompletion( bool activate ) { m_autoCompletion = activate; }; void setTabStopWidth(int taille); void setSyntaxColors(QTextCharFormat a, QTextCharFormat b, QTextCharFormat c, QTextCharFormat d, QTextCharFormat e, QTextCharFormat f, QTextCharFormat g); void setEndLine(MainImpl::EndLine end) { m_endLine = end; }; void setTabSpaces(bool t) { m_tabSpaces = t; }; void setAutobrackets(bool b) { m_autobrackets = b; }; // Divius: comments autoclose void setAutocomments(bool b) { m_autocomments = b; }; // void setMatch(bool b) { m_match = b; }; void setHighlightCurrentLine(bool b) { m_highlightCurrentLine = b; } void setBackgroundColor( QColor c ); void setTextColor(QColor c); void setCurrentLineColor( QColor c ); void setMatchingColor( QColor c ) { m_matchingColor = c; }; void setShowWhiteSpaces( bool b ) { m_showWhiteSpaces = b; } void setRightMarginColumn( int c ) { m_rightMarginColumn = c; } void setWordWrap( bool w ) { if (w) setLineWrapMode(QTextEdit::WidgetWidth); else setLineWrapMode(QTextEdit::NoWrap); } int currentLineNumber(QTextCursor cursor=QTextCursor()); int currentLineNumber(QTextBlock block); int linesCount(); void dialogGotoLine(); void completeCode(); void setFocus(Qt::FocusReason reason); void gotoMatchingBracket(); void textPlugin(TextEditInterface *iTextEdit); void print(); void printWhiteSpacesAndMatching( QPainter &p ); enum ActionComment { Toggle, Comment, Uncomment }; void insertText(QString text, int insertAfterLine); void setMouseHidden( bool hidden ); public slots: void gotoLine( int line, bool moveTop ); void slotFind(Ui::FindWidget uiFind, Ui::ReplaceWidget uiReplace, QString ttf=0, QTextDocument::FindFlags options=0, bool fromButton=false); void slotIndent(bool indent=true); void slotUnindent(); void comment(ActionComment action); void slotGotoImplementation(); void slotGotoDeclaration(); private slots: void slotAdjustSize(); void slotWordCompletion(QListWidgetItem *item); void slotCursorPositionChanged(); void slotCompletionList(TagList tagList); void slotCompletionHelpList(TagList tagList); void slotToggleBreakpoint(); void slotToggleBookmark(); private: void completionHelp(); QString m_plainText; long m_matchingBegin; long m_matchingEnd; QPointer m_lineNumbers; QPointer m_selectionBorder; CppHighlighter *cpphighlighter; QString m_findExp; int m_findOptions; FindImpl *m_findImpl; int lineNumber(QTextCursor cursor); int lineNumber(QTextBlock b); int lineNumber(QPoint point); void key_home(bool shift); void key_end(bool shift); QPoint mousePosition; Editor *m_editor; MainImpl *m_mainImpl; bool m_autoindent; void autoIndent(); void autobrackets(); // Divius: comments autoclose void autocomments(bool start = true); // void autoUnindent(); void match(); void clearMatch(); MainImpl::EndLine m_endLine; bool m_tabSpaces; InitCompletion *m_completion; QListWidget *m_completionList; bool m_autoCompletion; bool m_autobrackets; // Divius: comments autoclose bool m_autocomments; // bool m_match; bool m_highlightCurrentLine; bool m_showWhiteSpaces; int m_rightMarginColumn; QColor m_backgroundColor; QColor m_currentLineColor; QColor m_matchingColor; QAction *actionToggleBreakpoint; int m_lineNumber; bool m_mouseHidden; QPixmap m_tabPixmap; QPixmap m_spacePixmap; protected: void resizeEvent( QResizeEvent* ); void keyPressEvent ( QKeyEvent * event ); void contextMenuEvent(QContextMenuEvent * e); void mouseDoubleClickEvent( QMouseEvent * event ); void dropEvent( QDropEvent * event ); void mousePressEvent ( QMouseEvent * event ); void paintEvent ( QPaintEvent * event ); void mouseMoveEvent( QMouseEvent * event ); signals: void editorModified(bool); void initParse(InitCompletion::Request, QString, QString, bool, bool, bool, QString); }; #endif qdevelop-v0.28/src/.svn/text-base/build.cpp.svn-base0000444000175000017500000001722111362261065021316 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "editor.h" #include "build.h" #include #include #include #include #include #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" // Build::Build(QObject * parent, QString qmakeName, QString makeName, QString makeOptions, QString absoluteProjectName, bool qmake, bool n, bool g, QString compileFile, QString forceMode) : QThread(parent) { connect(parent, SIGNAL(stopBuild()), this, SLOT(slotStopBuild()) ); m_isStopped = false; m_qmakeName = qmakeName; m_qmake = qmake; m_makeName = makeName; m_makeOptions = makeOptions; m_projectDirectory = QFileInfo(absoluteProjectName).absolutePath(); m_projectName = QFileInfo(absoluteProjectName).fileName(); m_clean = n; m_build = g; m_compileFile = compileFile; m_errors = 0; m_warnings = 0; m_forceMode = forceMode; } // void Build::slotIncErrors() { m_errors++; } // void Build::slotIncWarnings() { m_warnings++; } // void Build::run() { QStringList list; m_buildProcess = new QProcess(); connect(m_buildProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(slotBuildMessages()) ); connect(m_buildProcess, SIGNAL(readyReadStandardError()), this, SLOT(slotBuildMessages()) ); m_buildProcess->setWorkingDirectory( m_projectDirectory ); if( m_qmake || !m_forceMode.isEmpty() ) { emit message( QString(tr("Update project"))+" (qmake "+m_projectName+")..." ); QStringList forceDebugList; if (!m_forceMode.isEmpty()) { forceDebugList << "-after" << "CONFIG+="+m_forceMode; } #ifdef Q_WS_MAC m_buildProcess->start(m_qmakeName, QStringList() <<"-spec"<< "macx-g++" << m_projectName << forceDebugList); #else m_buildProcess->start(m_qmakeName, QStringList() << m_projectName << forceDebugList); #endif if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } emit message( QString(m_buildProcess->readAll()) ); } if( m_clean ) { emit message( QString("\n"+tr("Clean Project")+" (make clean)...\n") ); m_buildProcess->start(m_makeName, QStringList("clean")); if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } emit message( QString(m_buildProcess->readAll()) ); } if( m_build ) { QString compilation = buildOnly(m_compileFile); if( !compilation.isEmpty() ) { m_buildProcess->start( compilation ); emit message( tr("\nCompilation of %1...\n").arg(m_compileFile) ); } else { emit message( QString("\n"+tr("Build")+" (make)...\n") ); m_buildProcess->start(m_makeName, QStringList() << m_makeOptions.split(" ", QString::SkipEmptyParts)); } if (!m_buildProcess->waitForFinished(800000)) { m_buildProcess->deleteLater(); return; } } emit message( QString(m_buildProcess->readAll()), m_projectDirectory); m_buildProcess->deleteLater(); } // void Build::slotBuildMessages() { #ifdef Q_OS_WIN32 // Divius: workaround for Windows: console use IBM 866 but system locale is CP1251 static QTextCodec *codec = QTextCodec::codecForName("IBM 866"); if (QLocale::system().language() == QLocale::Russian && codec) { emit message( codec->toUnicode(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( codec->toUnicode(m_buildProcess->readAllStandardError()), m_projectDirectory ); } else { emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardError()), m_projectDirectory ); } #else emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardOutput()), m_projectDirectory ); emit message( QString::fromLocal8Bit(m_buildProcess->readAllStandardError()), m_projectDirectory ); #endif } // void Build::slotStopBuild() { m_isStopped = true; emit message( QString("\n---------------------- "+tr("Build stopped")+" ----------------------\n") ); m_buildProcess->kill(); m_buildProcess->deleteLater(); } // QString Build::buildOnly( QString sourceFile ) { if( sourceFile.isEmpty() ) return QString(); bool automaticCompilation = false; if( sourceFile.endsWith("-qdeveloptmp.cpp") ) { sourceFile = sourceFile.section("-qdeveloptmp.cpp",0 ,0)+".cpp"; automaticCompilation = true; } QString objectFile = sourceFile.mid(0, sourceFile.lastIndexOf("."))+".o"; #ifndef WIN32 //QString name = QDir( m_projectDirectory ).relativeFilePath( sourceFile ); //return m_makeName+" "+ name.mid(0, name.lastIndexOf("."))+".o"; #endif QString shortObjectFile = objectFile; if( !objectFile.section("/", -1, -1).isEmpty() ) shortObjectFile = shortObjectFile.section("/", -1, -1).section(".", 0, 0)+".o"; QString directives; QFile makefile(m_projectDirectory+"/"+"Makefile"); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QString target, makefileFile, CXX, DEFINES, CXXFLAGS, INCPATH; while (!makefile.atEnd()) { QString line = QString( makefile.readLine() ); // This block is for Windows where the Makefile include Makefile.Debug or Makefile.Release. // Not used under Linux if( line.section(" ", 0, 0).simplified() == "first:" && (line.section(" ", 1, 1).simplified()=="debug" || line.section(" ", 1, 1).simplified()=="release")) target = line.section(" ", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "MAKEFILE" ) makefileFile = line.section("=", 1, 1).simplified(); if( !target.isEmpty() && line.section(":", 0, 0) == target ) { makefileFile = line.section(" ", 1, 1).simplified().replace("$(MAKEFILE)", makefileFile); makefile.close(); makefile.setFileName( m_projectDirectory+"/"+makefileFile ); if (!makefile.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); target = QString(); continue; } // Common block for Windows and Linux if( line.section("=", 0, 0).simplified() == "CXX" ) CXX = line.section("=", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "DEFINES" ) DEFINES = line.section("=", 1, 1).simplified(); if( line.section("=", 0, 0).simplified() == "CXXFLAGS" ) CXXFLAGS = line.section("=", 1, 1).simplified().replace("$(DEFINES)", DEFINES); if( line.section("=", 0, 0).simplified() == "INCPATH" ) INCPATH = line.section("=", 1, 1).simplified(); if( line.section("-o ", 1, 1).section(" ", 0, 0).replace("\\", "/").simplified().right(shortObjectFile.length()) == shortObjectFile ) { line = line.simplified(); line = line.replace("$(CXX)", CXX); line = line.replace("$(CXXFLAGS)", CXXFLAGS); line = line.replace("$(INCPATH)", INCPATH); directives = line; break; } } if( automaticCompilation ) { QString s = sourceFile.section(".cpp", 0, 0).section("/", -1); directives.replace(s+".o", s+"-qdeveloptmp.o"); directives.replace(s+".cpp", s+"-qdeveloptmp.cpp"); } return directives; } // qdevelop-v0.28/src/.svn/text-base/misc.cpp.svn-base0000444000175000017500000002120011362261065021142 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "misc.h" #include #include #include #include #include #ifdef Q_OS_WIN32 #include #endif // QVariant addressToVariant(void *it ) { #if QT_POINTER_SIZE == 4 return QVariant( reinterpret_cast(it)); #else return QVariant( reinterpret_cast(it)); #endif } // QTreeWidgetItem* variantToItem( QVariant variant ) { #if QT_POINTER_SIZE == 4 return (QTreeWidgetItem*)variant.toUInt(); #else return (QTreeWidgetItem*)variant.toULongLong(); #endif } // QAction* variantToAction( QVariant variant ) { #if QT_POINTER_SIZE == 4 return (QAction*)variant.toUInt(); #else return (QAction*)variant.toULongLong(); #endif } // bool connectDB(QString const& dbName) { static bool errorAlreadyReported = false; QSqlDatabase database; if( QSqlDatabase::database(dbName).databaseName() != dbName ) { database = QSqlDatabase::addDatabase("QSQLITE", dbName); database.setDatabaseName(dbName); } else { database = QSqlDatabase::database(dbName); if ( database.isOpen() ) return true; } // if (!database.open()) { if (!errorAlreadyReported) QMessageBox::critical(0, "QDevelop", QObject::tr("Unable to establish a database connection.")+"\n"+ QObject::tr("QDevelop needs SQLite support. Please read " "the Qt SQL driver documentation for information how " "to build it."), QMessageBox::Cancel, QMessageBox::NoButton); errorAlreadyReported = true; return false; } else { QString queryString = "create table classesbrowser (" "text string," "tooltip string," "icon string," "key string," "parents string," "name string," "implementation string," "declaration string," "ex_cmd string," "language string," "classname string," "structname string," "enumname string," "access string," "signature string," "kind string" ")"; QSqlQuery query(database); query.exec(queryString); queryString = "create table editors (" "filename string," "scrollbar int," "numline int" ")"; query.exec(queryString); // queryString = "create table bookmarks (" "filename string," "numline int" ")"; query.exec(queryString); // queryString = "create table breakpoints (" "filename string," "numline int," "breakpointCondition string," "isTrue int" ")"; query.exec(queryString); // queryString = "create table projectsDirectories (" "projectName string," "srcDirectory string," "uiDirectory string" ")"; query.exec(queryString); // queryString = "create table config (" "key string," "value string" ")"; query.exec(queryString); // queryString = "create table checksums (" "filename string," "checksum int" ")"; query.exec(queryString); // } return true; } // //static function to determine the QDevelop directory (used for settings and global ctags database) // the directory is returnded WITH a trailing slash QString getQDevelopPath(void) { static QString path; if (!path.isEmpty()) return path; // if we havn't yet done so, determine the full db file name and make sure the directory exists // determine path for application data dirs #ifdef Q_OS_WIN32 wchar_t buf[MAX_PATH]; if (!SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, buf)) path = QString::fromUtf16((ushort *)buf)+"/"; else path = QDir::homePath()+"/Application Data/"; // this shouldn't happen #else path = QDir::homePath()+"/"; #endif // create subdir QDir dir(path); #ifdef Q_OS_WIN32 dir.mkdir("QDevelop"); path += "QDevelop/"; #else dir.mkdir(".qdevelop"); path += ".qdevelop/"; #endif return path; } // QString simplifiedText(const QString string) { QString m_fileString = string; enum CodeState { NORMAL, NORMAL_GOT_SLASH, COMMENT_SINGLE_LINE, COMMENT_MULTI_LINE, COMMENT_GOT_STAR, COMMENT_GOT_ESCAPE, STRING, STRING_GOT_ESCAPE, CHAR, CHAR_GOT_ESCAPE } state = NORMAL; QChar c; int i; bool isAfterSharp = false; for (i = 0; i < m_fileString.count(); i++) { c = m_fileString.at(i); switch (state) { case NORMAL: if (c == '/') { state = NORMAL_GOT_SLASH; break; } else if (c == '"' ) { state = STRING; } else if (c == '\'' ) { state = CHAR; } else if (c == '#' ) { isAfterSharp = true; } else if (c == QChar('\n') ) { isAfterSharp = false; } break; case NORMAL_GOT_SLASH: if (c == '/') { state = COMMENT_SINGLE_LINE; m_fileString[i-1] = m_fileString[i] = ' '; } else if (c == '*') { state = COMMENT_MULTI_LINE; m_fileString[i-1] = m_fileString[i] = ' '; } else { state = NORMAL; } isAfterSharp = false; break; case COMMENT_SINGLE_LINE: if (c == '\n') { state = NORMAL; } else if (c == '\\') { state = COMMENT_GOT_ESCAPE; m_fileString[i] = ' '; } else m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_MULTI_LINE: if (c == '*') { state = COMMENT_GOT_STAR; } m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_GOT_STAR: if (c == '*') state = COMMENT_GOT_STAR; else if (c == '/') state = NORMAL; else state = COMMENT_MULTI_LINE; m_fileString[i] = ' '; isAfterSharp = false; break; case COMMENT_GOT_ESCAPE: state = COMMENT_SINGLE_LINE; m_fileString[i] = ' '; break; case STRING: if (c == '\\') { state = STRING_GOT_ESCAPE; m_fileString[i] = ' '; } else if (c == '"') { state = NORMAL; } else if( isAfterSharp ) m_fileString[i] = c; else m_fileString[i] = ' '; break; case CHAR: if (c == '\\') { state = CHAR_GOT_ESCAPE; m_fileString[i] = ' '; } else if (c == '\'') { state = NORMAL; } else m_fileString[i] = ' '; break; case STRING_GOT_ESCAPE: state = STRING; m_fileString[i] = ' '; break; case CHAR_GOT_ESCAPE: state = CHAR; m_fileString[i] = ' '; break; } } return m_fileString; } qdevelop-v0.28/src/.svn/text-base/debug.h.svn-base0000444000175000017500000000471311362261065020754 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DEBOGAGE_H #define DEBOGAGE_H #include #include #include #include #include "projectmanager.h" // struct Variable; class BlockUserData; class RegistersImpl; // class Debug : public QThread { Q_OBJECT public: Debug(QObject * parent, RegistersImpl *registersImpl, QString gdbName, Parameters p, QString exe, bool exeOnly=false); void run(); enum Request { None, Registers, InfoSources, InfoScope, Local, OtherArgs, Whatis, Address, Length, Value}; private: // Methods void writeMessagesToDebugger(); void launchDebug(); void executeWithoutDebug(); void configureGdb(); void setEnvironment(QProcess *process); // Variables QString executableName; QString m_gdbName; QStringList messagesToDebugger; QProcess *processDebug; int m_pid; bool m_executeWithoutDebug; bool m_infoSources; Parameters m_parameters; Request m_request; QList listVariables, listVariablesToSend; QStringList m_otherVariables; QObject * m_parent; RegistersImpl *m_registersImpl; signals: void message(QString); void endDebug(); void onPause(); void debugVariables( QList ); public slots: void slotBreakpoint(QString filename, unsigned int line, BlockUserData *); protected slots: void slotMessagesDebug(); void slotMessagesError(); void slotDebugCommand(QString text); void slotStopDebug(); void slotPauseDebug(); void slotOtherVariables(QStringList list); }; // struct Variable { Debug::Request kind; QString name; QString type; int length; QString content; QString address; int pos; }; #endif qdevelop-v0.28/src/.svn/text-base/addexistantimpl.cpp.svn-base0000444000175000017500000000743111362261065023413 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addexistantimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include // AddExistantImpl::AddExistantImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(fileButton, SIGNAL(clicked()), this, SLOT(slotFilesChoice()) ); connect(locationButton, SIGNAL(clicked()), this, SLOT(slotLocationChoice()) ); connect(comboProjects, SIGNAL(activated(QString)), this, SLOT(slotComboProjects(QString)) ); } // void AddExistantImpl::slotAccept() { if( filename->text().isEmpty() ) { QMessageBox::warning(0, "QDevelop", tr("Enter a filename."), tr("Cancel") ); return; } if( copy->isChecked() ) { if( location->text().isEmpty() ) { QMessageBox::warning(0, "QDevelop", tr("Enter a location destination."), tr("Cancel") ); return; } location->setText( location->text().replace("\\", "/") ); if( location->text().right(1) != "/" ) location->setText( location->text()+"/" ); QString newList; foreach(QString filenamestr, filename->text().split(",")) { filenamestr = filenamestr.remove("\"").simplified(); filenamestr.replace("\\", "/"); if( !QFile::exists( filenamestr ) ) { QMessageBox::warning(0, "QDevelop", tr("The file %1 doesn't exist.").arg(filenamestr), tr("Cancel") ); return; } QString f = filenamestr.section("/", -1, -1); if( !QFile::copy(filenamestr, location->text()+f) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to copy %1").arg(filenamestr), tr("Cancel") ); return; } newList += "\"" + location->text()+f + "\","; } filename->setText( newList ); } accept(); } // void AddExistantImpl::slotLocationChoice() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose a directory"), m_projectDirectory, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if( s.isEmpty() ) { // Cancel is clicked return; } location->setText( s ); } // void AddExistantImpl::slotFilesChoice() { QStringList s = QFileDialog::getOpenFileNames( this, tr("Choose the file to add"), m_projectDirectory, tr("Files (*.cpp *.h *.hpp *.ui *.qrc *.ts)") ); if( s.isEmpty() ) { // Cancel is clicked return; } QString line; foreach(QString file, s) line += "\"" + file + "\", "; if( line.length() ) line = line.mid(0, line.length() - 2); filename->setText( line ); } // void AddExistantImpl::slotComboProjects(QString /*projectName*/) { QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); //QTreeWidgetItem *item = reinterpret_cast(variant.toUInt()); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); m_projectDirectory = m_projectManager->projectDirectory( item ); } // qdevelop-v0.28/src/.svn/text-base/addnewimpl.h.svn-base0000444000175000017500000000256411362261065022014 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEW_H #define ADDNEW_H #include "ui_addnew.h" #include // class ProjectManager; // class AddNewImpl : public QDialog, public Ui::AddNew { Q_OBJECT public: AddNewImpl(ProjectManager * parent = 0); public slots: void slotComboProjects(QString projectName); void slotFileType(); private: ProjectManager *m_projectManager; QString m_projectDirectory; QString suffixe; private slots: void slotAccept(); void slotDirectoryChoice(); }; #endif qdevelop-v0.28/src/.svn/text-base/toolscontrolimpl.h.svn-base0000444000175000017500000000441511362261065023310 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef TOOLSCONTROLIMPL_H #define TOOLSCONTROLIMPL_H // #include "ui_toolsControl.h" // class ToolsControlImpl : public QDialog, public Ui::ToolsControl { Q_OBJECT public: ToolsControlImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); bool toolsControl(); QString qmakeName() { return qmake->text(); }; QString makeName() { return make->text(); }; QString gdbName() { return gdb->text(); }; QString ctagsName() { return ctags->text(); }; QString linguistName() { return linguist->text(); }; QString lupdateName() { return lupdate->text(); }; QString lreleaseName() { return lrelease->text(); }; QString designerName() { return designer->text(); }; QString assistantName() { return assistant->text(); }; bool ctagsIsPresent() { return m_ctagsIsPresent; }; bool checkEnvOnStartup() { return checkEnvironmentOnStartup->isChecked(); }; QString qVersion(); private slots: void on_assistantLocation_clicked(); void on_linguistLocation_clicked(); void on_lupdateLocation_clicked(); void on_lreleaseLocation_clicked(); void on_designerLocation_clicked(); void on_buttonBox_clicked(QAbstractButton * button ); void on_qmakeLocation_clicked(); void on_makeLocation_clicked(); void on_gdbLocation_clicked(); void on_ctagsLocation_clicked(); void on_test_clicked(); void chooseLocation(QLineEdit *dest); private: bool m_ctagsIsPresent; QString m_qVersion; }; #endif qdevelop-v0.28/src/.svn/text-base/projectpropertieimpl.h.svn-base0000444000175000017500000000460411362261065024147 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PROJECTPROPERTIE_IMPL #define PROJECTPROPERTIE_IMPL #include "ui_projectpropertie.h" #include "ui_newvariable.h" #include #include // class ProjectManager; // class ProjectPropertieImpl : public QDialog, public Ui::ProjectPropertie { Q_OBJECT public: ProjectPropertieImpl(ProjectManager * parent, QTreeWidget *tree,QTreeWidgetItem *itProject); public slots: private: ProjectManager *m_projectManager; QTreeWidgetItem *m_itProject; QTreeWidgetItem *m_copyItProject; QTreeWidget *m_treeFiles; QTreeWidget *m_copyTreeFiles; QString m_projectName; // void parse(QTreeWidgetItem *it); void parseTemplate(QTreeWidgetItem *it); void parseConfig(QTreeWidgetItem *it); void parseQT(QTreeWidgetItem *it); void populateComboScope(); void connections(); void unconnections(); void clearFields(); QTreeWidgetItem *subItTemplate(QTreeWidgetItem *it); QTreeWidgetItem *subItQT(QTreeWidgetItem *it); QTreeWidgetItem *subItConfig(QTreeWidgetItem *it); void makeComboVariables( QComboBox *combo ); private slots: void slotSubdirs(bool); void slotCheck(bool); void slotAccept(); void slotComboScope(int index); void slotCurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); void slotAddVariable(); void slotDeleteVariable(); void slotAddValue(); void slotDeleteValue(); void slotModifyValue(); void copyTreeWidget(QTreeWidgetItem *source, QTreeWidgetItem *dest); void slotSrcDirectory(); void slotUiDirectory(); }; #endif qdevelop-v0.28/src/.svn/text-base/addnewclassvariableimpl.h.svn-base0000444000175000017500000000402211362261065024537 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef ADDNEWCLASSVARIABLEIMPL_H #define ADDNEWCLASSVARIABLEIMPL_H // #include "ui_addnewclassvariable.h" // class MainImpl; class TreeClasses; class QTreeWidgetItem; class Editor; // class AddNewClassVariableImpl : public QDialog, public Ui::AddNewClassVariable { Q_OBJECT public: AddNewClassVariableImpl( MainImpl * parent, TreeClasses *treeClasses, QTreeWidgetItem *treeWidget, QString declaration, QString implementation, QString classname); bool addGet() { return get->isChecked(); } QString addGetName() { return getName->text(); } bool addGetInline() { return getInline->isChecked(); } bool addSet() { return set->isChecked(); } QString addSetName() { return setName->text(); } bool addSetInline() { return setInline->isChecked(); } private slots: void on_variableName_textChanged(QString ); void on_okButton_clicked(); private: MainImpl *m_mainImpl; TreeClasses *m_treeClasses; QTreeWidgetItem *m_treeWidget; QString m_declaration; QString m_implementation; QString m_classname; void insertInDeclaration(QString scope, QString insertedText); void insertInImplementation(QString insertedText); }; #endif qdevelop-v0.28/src/.svn/text-base/parametersimpl.cpp.svn-base0000444000175000017500000001071611362261065023246 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "parametersimpl.h" // #include #include #include #include // #include // ParametersImpl::ParametersImpl(QWidget * parent) : QDialog(parent) { setupUi(this); tableVariables->verticalHeader()->hide(); QHeaderView *header = tableVariables->horizontalHeader(); header->resizeSection(1, 230); on_defaults_clicked(); } // Parameters ParametersImpl::parameters() { Parameters p; p.workingDirectory = location->text(); p.arguments = arguments->text(); for(int row=0; rowrowCount(); row++) p.env << tableVariables->item(row, 0)->text()+"="+tableVariables->item(row, 1)->text(); return p; } // void ParametersImpl::setParameters(Parameters p) { arguments->setText( p.arguments ); newVariable->clear(); location->setText( p.workingDirectory ); for(int i=0; irowCount(); i++) tableVariables->removeRow(0); int row = 0; foreach(QString s, p.env) { tableVariables->setRowCount(row+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( s.section("=", 0, 0) ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(row, 0, itemCol0); tableVariables->setItem(row++, 1, new QTableWidgetItem( s.section("=", 1, 1))); } } // void ParametersImpl::on_defaults_clicked() { arguments->clear(); newVariable->clear(); location->clear(); for(int i=0; irowCount(); i++) tableVariables->removeRow(0); QStringList systemEnvironment = QProcess::systemEnvironment(); int row = 0; foreach(QString s, systemEnvironment) { tableVariables->setRowCount(row+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( s.section("=", 0, 0) ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(row, 0, itemCol0); tableVariables->setItem(row++, 1, new QTableWidgetItem( s.section("=", 1))); } } // void ParametersImpl::on_chooseDirectory_clicked() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if( s.isEmpty() ) { // Cancel clicked return; } location->setText( s ); } // void ParametersImpl::on_add_clicked() { QString variable = newVariable->text().section("=", 0, 0).simplified(); QString value = newVariable->text().section("=", 1, 1).simplified(); if (variable.isEmpty() || value.isEmpty() ) return; if( tableVariables->findItems(variable, Qt::MatchExactly).count() ) { QMessageBox::warning(this, "QDevelop", tr("The variable \"%1\" already exists.").arg(variable), tr("Cancel") ); return; } tableVariables->setRowCount(tableVariables->rowCount()+1); QTableWidgetItem *itemCol0 = new QTableWidgetItem( variable ); itemCol0->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); tableVariables->setItem(tableVariables->rowCount()-1, 0, itemCol0); tableVariables->setItem(tableVariables->rowCount()-1, 1, new QTableWidgetItem( value ) ); } // void ParametersImpl::on_del_clicked() { int row = tableVariables->currentRow(); if( row != 1 ) tableVariables->removeRow( row ); } // void ParametersImpl::on_sort_clicked() { tableVariables->sortItems(0); } // void ParametersImpl::on_edit_clicked() { int row = tableVariables->currentRow(); if( row != 1 ) { tableVariables->setCurrentItem( tableVariables->item(row, 1) ); tableVariables->editItem( tableVariables->item(row, 1) ); } } // void ParametersImpl::on_tableVariables_itemDoubleClicked(QTableWidgetItem* /*item*/) { on_edit_clicked(); } // qdevelop-v0.28/src/.svn/text-base/shortcutsimpl.cpp.svn-base0000444000175000017500000000631011362261065023134 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include #include "shortcutsimpl.h" #include "ui_main.h" #include "mainimpl.h" #include "misc.h" // ShortcutsImpl::ShortcutsImpl(QWidget * parent) : QDialog(parent), m_mainImpl((MainImpl *)parent) { setupUi(this); initTable( m_mainImpl ); connect(okButton, SIGNAL(clicked()), this, SLOT(slotAccept()) ); connect(defaultButton, SIGNAL(clicked()), this, SLOT(slotDefault()) ); } // void ShortcutsImpl::initTable(MainImpl *main) { QList childrens = main->children(); QListIterator iterator(childrens); int row = 0; while( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if (action) { QString text = action->text().remove("&"); if ( !text.isEmpty() && !(action->data().toString().contains("Recent|")) ) { QString shortcut = action->shortcut(); QTableWidgetItem *newItem = new QTableWidgetItem(text); newItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); newItem->setData(Qt::UserRole, addressToVariant(object)); newItem->setIcon(action->icon()); table->setRowCount(row+1); table->setItem(row, 0, newItem); table->setItem(row++, 1, new QTableWidgetItem(shortcut)); } } table->sortItems( 0 ); } QHeaderView *header = table->horizontalHeader(); header->resizeSection( 0, 230 ); table->verticalHeader()->hide(); } // void ShortcutsImpl::slotAccept() { for(int row=0; rowrowCount(); row++ ) { QTableWidgetItem *item = table->item(row, 0); QAction *action = (QAction *)variantToAction( item->data(Qt::UserRole) ); QString shortcut = table->item(row, 1)->text(); action->setShortcut( shortcut ); } } // void ShortcutsImpl::slotDefault() { QMainWindow *dial = new QMainWindow; Ui::Main ui; ui.setupUi(dial); QList childrens = dial->children(); QListIterator iterator(childrens); while( iterator.hasNext() ) { QObject *object = iterator.next(); QAction *action = qobject_cast(object); if (action) { QString text = action->text().remove("&"); QString shortcut = action->shortcut(); QList listFind = table->findItems(text , Qt::MatchExactly); if( listFind.count() ) table->item(table->row(listFind.first()), 1)->setText(shortcut); } } delete dial; } qdevelop-v0.28/src/.svn/text-base/addnewclassimpl.cpp.svn-base0000444000175000017500000001577211362261064023401 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "addnewclassimpl.h" #include "projectmanager.h" #include "misc.h" #include #include #include #include #include // AddNewClassImpl::AddNewClassImpl(ProjectManager * parent) : QDialog(0), m_projectManager(parent) { setupUi(this); scope->addItems(QStringList() << "public" << "protected" << "private"); scope->setCurrentIndex(0); } // void AddNewClassImpl::on_className_textChanged(QString ) { QString s = className->text().toLower(); header->setText( s + ".h" ); implementation->setText( s + ".cpp" ); control(); } void AddNewClassImpl::on_directoryButton_clicked() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the file location"), location->text(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel choosen return; } location->setText( s ); control(); } // void AddNewClassImpl::control() { bool enable = true; if ( className->text().isEmpty() ) enable = false; if ( implementation->text().isEmpty() ) enable = false; if ( header->text().isEmpty() ) enable = false; okButton->setEnabled( enable ); } // void AddNewClassImpl::on_okButton_clicked() { QByteArray templateData; QVariant variant = comboProjects->itemData( comboProjects->currentIndex() ); QTreeWidgetItem *item = (QTreeWidgetItem*)variantToItem(variant); QString projectDir = m_projectManager->projectDirectory( item ); // QString impl = implementation->text(); // filter out bad chars int j = impl.length(); for ( int i=0; i < j; i++ ) { if (!impl[i].isLetterOrNumber() && impl[i]!='.' ) impl[i] = '_'; } QString absoluteNameImpl = QDir( location->text() ).absoluteFilePath( impl ) ; QString relativeNameImpl = QDir( projectDir ).relativeFilePath( absoluteNameImpl ); // QString head = header->text(); // filter out bad chars j = head.length(); for ( int i=0; i < j; i++ ) { if (!head[i].isLetterOrNumber() && head[i]!='.' ) head[i] = '_'; } QString absoluteNameHeader = QDir( location->text() ).absoluteFilePath( head ) ; QString relativeNameHeader = QDir( projectDir ).relativeFilePath( absoluteNameHeader ); // QFile file ( absoluteNameHeader ); if ( file.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists.").arg(absoluteNameHeader), tr("Cancel") ); return; } if ( !file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } file.write( templateHeaderImpl().toLatin1() ); file.close(); // QFile file2 ( absoluteNameImpl ); if ( file2.exists() ) { QMessageBox::warning(0, "QDevelop", tr("The file \"%1\"\n already exists.").arg(absoluteNameImpl), tr("Cancel") ); return; } if ( !file2.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(0, "QDevelop", tr("Unable to create file."), tr("Cancel") ); return; } file2.write( templateSourceImpl().toLatin1() ); file2.close(); m_projectManager->insertFile(item, relativeNameHeader); m_projectManager->insertFile(item, relativeNameImpl); m_projectManager->setQmake( m_projectManager->projectFilename( item ) ); accept(); } // QString AddNewClassImpl::templateHeaderImpl() { QString filename = header->text(); QString classImpl = className->text(); QFile file(":/templates/templates/newclassimpl.h.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); data.replace("$IMPL_H", filename.toUpper().section(".H", 0, 0) +"_H"); if ( checkboxInherits->isChecked() ) { data.replace("$ANCESTORFILENAME", "#include <"+ ancestorFilename->text() +">"); data.replace("$SCOPE", ": "+scope->currentText()); data.replace("$PARENTNAME", ancestor->text()); if ( !ancestor->text().length() || ancestor->text().left(1) != "Q" ) data.replace("Q_OBJECT", ""); } else { data.replace("$ANCESTORFILENAME", ""); data.replace("$SCOPE", ""); data.replace("$PARENTNAME", ""); data.replace("Q_OBJECT", ""); } if ( virtualDestructor->isChecked() ) data.replace("$VIRTUAL", "virtual ~"+className->text()+"();"); else data.replace("$VIRTUAL", ""); data.replace("$ARGUMENTS", arguments->text()); data.replace("$CLASSNAME", className->text()); return data; } // QString AddNewClassImpl::templateSourceImpl() { QString filename = implementation->text(); QString classImpl = className->text(); QFile file(":/templates/templates/newclassimpl.cpp.template"); QString data; file.open(QIODevice::ReadOnly); data = file.readAll(); file.close(); if ( checkboxInherits->isChecked() ) { data.replace("$ANCESTOR", "\n\t: " + ancestor->text() + "()" ); } else { data.replace("$ANCESTOR", ""); } if ( virtualDestructor->isChecked() ) data.replace("$VIRTUAL", className->text()+"::~"+className->text()+"()\n{\n}\n//"); else data.replace("$VIRTUAL", ""); data.replace("$HEADERNAME", "#include \""+header->text()+"\""); data.replace("$ARGUMENTS", arguments->text()); data.replace("$CLASSNAME", className->text()); return data; } void AddNewClassImpl::on_comboProjects_currentIndexChanged(int index) { QVariant variant = comboProjects->itemData( index ); QTreeWidgetItem *item = (QTreeWidgetItem*)(variantToItem( variant ) ); QString projectDirectory = m_projectManager->srcDirectory( item ); location->setText( projectDirectory ); } qdevelop-v0.28/src/.svn/text-base/projectmanager.h.svn-base0000444000175000017500000001215511362261064022665 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef PROJECTMANAGER_H #define PROJECTMANAGER_H #include #include #include #include #include #include #include #include // typedef struct { QString arguments; QString workingDirectory; QStringList env; bool isEmpty; } Parameters; // typedef struct { QString key; QString op; } Item; Q_DECLARE_METATYPE(Item) // class TreeProject; class TreeClasses; class QTreeWidget; class QTreeWidgetItem; class MainImpl; // // class ProjectManager : public QObject { Q_OBJECT public: ProjectManager(MainImpl * parent, TreeProject *treeFiles, TreeClasses *treeClasses); ~ProjectManager(); void init(QString name); QString absoluteNameProjectFile(QTreeWidgetItem *it); QString projectFilename(QTreeWidgetItem *it); QString projectDirectory(QTreeWidgetItem *it); QString projectDirectory(QString projectName); QString fileDirectory(QString absoluteFilename); QString projectName(QString directoryName); void setUiDirectory(QTreeWidgetItem *it, QString s); QString uiDirectory(QTreeWidgetItem *it); void setSrcDirectory(QTreeWidgetItem *it, QString s); QString srcDirectory(QTreeWidgetItem *it); QStringList buildableProjectsDirectories(); QStringList dependpath(QTreeWidgetItem *it); void headers(QTreeWidgetItem *it, QStringList &headerFiles); void sources(QTreeWidgetItem *it, QStringList &sourcesFiles); bool qmake(QString projectName=QString()); bool isModifiedProject() { return m_isModifiedProject; }; QString executableName(QString preferedVersion); bool isReleaseVersion() { return m_releaseVersion; }; void saveProjectSettings(); bool close(); void childsList(QTreeWidgetItem *begin, QString key, QList &list); Parameters parameters(); void setParameters(Parameters p); QString projectDirectoryOfExecutable() { return m_projectDirectoryOfExecutable;}; QString findData(QString projectName, QString key); QTreeWidgetItem *itemProject(QString projectName); QStringList parents(QTreeWidgetItem *it); void parseTreeClasses(bool force=false ); void setQmake(QString projectName); void insertFile(QTreeWidgetItem *it, QString filename, bool silentMode=false); void setCurrentItem(const QString& _strFileName); QString toKey(QVariant variant); QString toOp(QVariant variant); QVariant toItem(QString key, QString op=QString()); private: QTreeWidgetItem* find_r(const QTreeWidgetItem* _pItem, const QString& _strFileName, const QString& _strProjectDir); enum findMode { Key, Data }; // Methods void loadProject(QString s, QTreeWidgetItem *newProjectItem); QString findExecutable( QString projectDirectory, QString preferedVersion ); QString projectVersion(QTreeWidgetItem *it); QTreeWidgetItem *item(QTreeWidgetItem *begin, QString name, findMode type); bool saveDataOfProject(QTreeWidgetItem *item, QTextStream *s, int nbSpace=-1, QString endOfLine=""); QTreeWidgetItem * insertItem(QTreeWidgetItem *parent, QString key, QString data, QString op=QString()); bool listContains(QList, QString name, findMode type); void loadProjectSettings(); bool m_isModifiedProject; // Variables MainImpl *m_parent; TreeProject *m_treeFiles; TreeClasses *m_treeClasses; QString m_absoluteNameProjectFile; QString m_projectDirectoryOfExecutable; QStringList m_classes; QStringList m_executablesList; QStringList m_projectDirectoryOfExecutableList; QWidget *m_previewForm; Parameters m_parameters; bool m_releaseVersion; protected: bool eventFilter( QObject *obj, QEvent *ev ); signals: public slots: void slotResetExecutablesList() { m_executablesList.clear(); }; bool slotSaveProject(); void slotAddExistingFiles(QTreeWidgetItem *it=0); void slotAddNewItem(QTreeWidgetItem *it=0, QString kind=QString()); void slotAddNewClass(QTreeWidgetItem *it=0); void slotAddScope(QTreeWidgetItem *it=0); void slotAddSubProject(QTreeWidgetItem *it=0); void slotlupdate(QTreeWidgetItem *); void slotlrelease(QTreeWidgetItem *); void slotDeleteItem(QTreeWidgetItem *it=0, bool silentMode=false); void slotRenameItem(QTreeWidgetItem *it=0); void slotProjectPropertie(QTreeWidgetItem *it=0); void slotSubclassing(QTreeWidgetItem *it=0); void slotPreviewForm(QTreeWidgetItem *it=0); void slotSort(); }; #endif qdevelop-v0.28/src/.svn/text-base/build.h.svn-base0000444000175000017500000000360211362261064020760 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef BUILD_H #define BUILD_H #include #include #include // class QProcess; class Build : public QThread { Q_OBJECT public: Build(QObject * parent, QString qmakeName, QString makename, QString makeOptions, QString absoluteProjectName, bool qmake, bool n, bool g, QString compileFile=0, QString forceMode = QString()); void run(); int nbErrors() { return m_errors; } int nbWarnings() { return m_warnings; } private: bool m_qmake; QString m_projectDirectory; QString m_projectName; bool m_clean; bool m_build; bool m_isStopped; QString m_compileFile; QProcess *m_buildProcess; QString buildOnly( QString sourceFile ); QString m_qmakeName; QString m_makeName; QString m_makeOptions; int m_errors; int m_warnings; QString m_forceMode; signals: void message(QString, QString=0); protected slots: void slotBuildMessages(); void slotStopBuild(); public slots: void slotIncErrors(); void slotIncWarnings(); }; #endif qdevelop-v0.28/src/.svn/text-base/subclassingimpl.h.svn-base0000444000175000017500000000416611362261064023066 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef SUBCLASSINGIMPL_H #define SUBCLASSINGIMPL_H #include "ui_subclassing.h" #include "ui_newimplementation.h" class ProjectManager; class QSortFilterProxyModel; class QTreeWidget; class MainImpl; class SubclassingImpl : public QDialog, public Ui::Subclassing { Q_OBJECT public: SubclassingImpl(ProjectManager * parent, MainImpl *mainImpl, QString srcDirectory, QString uiName, QStringList headers); QString newFile(); inline bool isValid() { return !objectName().isEmpty(); } private: void implementations(QStringList); static QStringList signatures(QString header); QString objectName(); QString className(); QStringList templateHeaderImpl(); QStringList templateSourceImpl(); private slots: void on_okButton_clicked(); void on_clearButton_clicked(); void on_newImplementation_clicked(); void on_comboClassName_activated(int i); void on_filterEdit_textChanged(const QString &text); void slotParseForm(); void slotLocation(); void slotEnableokButton(QString); private: ProjectManager *m_parent; MainImpl *m_mainImpl; QSortFilterProxyModel *proxyModel; QString m_uiName; QString m_srcDirectory; QTreeWidget *treeSlots; Ui::NewImplementation uiNewImplementation; }; #endif qdevelop-v0.28/src/.svn/text-base/newprojectimpl.cpp.svn-base0000444000175000017500000002610711362261064023263 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "newprojectimpl.h" #include "projectmanager.h" #include "mainimpl.h" #include #include #include // NewProjectImpl::NewProjectImpl(QWidget * parent, QString s) : QDialog(0), m_projectLocation(s) { setupUi(this); m_mainImpl = (MainImpl *)parent; connect(locationButton, SIGNAL(clicked()), this, SLOT(slotChooseDirectory()) ); connect(projectName, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) ); connect(location, SIGNAL(textChanged(QString)), this, SLOT(slotLabel()) ); location->setText( s ); on_dialog_clicked(true); srcDirectory->setText("src"); buildDirectory->setText("build"); uiDirectory->setText("ui"); binDirectory->setText("bin"); } // void NewProjectImpl::slotChooseDirectory() { QString s = QFileDialog::getExistingDirectory( this, tr("Choose the project directory"), m_projectLocation, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); if ( s.isEmpty() ) { // Cancel clicked return; } location->setText( s ); } // void NewProjectImpl::slotLabel() { //label->setText( label->text().section(":", 0, 0) + ": " + location->text() + "/" + projectName->text().toLower().remove(".pro") ); if ( projectName->text().isEmpty() || location->text().isEmpty() ) { okButton->setEnabled( false ); label->setText( label->text().section(":", 0, 0) + ": " ); } else { okButton->setEnabled( true ); label->setText( label->text().section(":", 0, 0) + ": " + location->text() + "/" + QFileInfo(projectName->text()).baseName() ); } } void NewProjectImpl::on_dialog_clicked(bool checked) { if (!checked) return; uiFilename->setText( "dialog" ); subclassFilename->setText( "dialogimpl" ); uiObjectName->setText( "Dialog" ); subclassObjectName->setText( "DialogImpl" ); } void NewProjectImpl::on_mainwindow_clicked(bool checked) { if (!checked) return; uiFilename->setText( "mainwindow" ); subclassFilename->setText( "mainwindowimpl" ); uiObjectName->setText( "MainWindow" ); subclassObjectName->setText( "MainWindowImpl" ); } void NewProjectImpl::on_okButton_clicked() { bool isSubProject = false; if ( !parentProjectName->text().isEmpty() ) isSubProject = true; if ( !isSubProject && !m_mainImpl->slotCloseProject() ) { reject(); } m_filename = projectName->text(); if ( !m_filename.toLower().contains( ".pro" ) ) m_filename += ".pro"; QString projectDirectory = location->text(); projectDirectory += "/" + m_filename.left( m_filename.lastIndexOf(".") ); QString l_srcDirectory = projectDirectory+"/"+srcDirectory->text(); QString l_uiDirectory = projectDirectory+"/"+uiDirectory->text(); QString l_buildDirectory = buildDirectory->text(); QString l_binDirectory = binDirectory->text(); QString l_uiFilename = uiFilename->text(); QString l_uiObjectName = uiObjectName->text(); QString l_subclassFilename = subclassFilename->text(); QString l_subclassObjectName = subclassObjectName->text(); m_absoluteProjectName = projectDirectory + "/" + m_filename ; QDir dir; if (dir.exists(projectDirectory)) { if (QFile::exists(m_absoluteProjectName)) { QMessageBox::warning(this, "QDevelop", tr("Project file \"%1\" already exists").arg(m_absoluteProjectName), tr("Cancel") ); return; } else if ( QMessageBox::question(this, "QDevelop", tr("The directory \"%1\" already exists. Do you want to create project anyway?").arg(projectDirectory), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No ) { return; } } else if ( !dir.mkpath(projectDirectory) ) { QMessageBox::warning(this, "QDevelop", tr("The directory \"%1\" cannot be created").arg(projectDirectory), tr("Cancel") ); return; } QFile projectFile ( m_absoluteProjectName ); if ( !projectFile.open(QIODevice::WriteOnly | QIODevice::Text) ) { QMessageBox::warning(this, "QDevelop", tr("The project cannot be created"), tr("Cancel") ); return; } else { QByteArray projectFileContent; if ( !empty->isChecked() ) { projectFileContent += "TEMPLATE = app\n"; projectFileContent += "QT = gui "; projectFileContent += "core\n"; projectFileContent += "CONFIG += qt "; QString version = "debug"; if ( release->isChecked() ) projectFileContent += "release "; else projectFileContent += "debug "; projectFileContent += "warn_on "; projectFileContent += "console\n"; } if ( dialog->isChecked() || mainwindow->isChecked() ) { if ( !l_srcDirectory.isEmpty() ) { QDir().mkdir( l_srcDirectory ); } if ( !l_uiDirectory.isEmpty() ) { QDir().mkdir( l_uiDirectory ); } if ( !l_binDirectory.isEmpty() ) { projectFileContent += "DESTDIR = "+l_binDirectory+"\n"; } if ( !l_buildDirectory.isEmpty() ) { projectFileContent += "OBJECTS_DIR = "+l_buildDirectory+"\n"; projectFileContent += "MOC_DIR = "+l_buildDirectory+"\n"; projectFileContent += "UI_DIR = "+l_buildDirectory+"\n"; } if ( dialog->isChecked() ) { QFile file(":/templates/templates/dialog.ui"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("Dialog", ""+l_uiObjectName.toAscii()+""); data.replace("name=\"Dialog\"", "name=\""+l_uiObjectName.toAscii()+"\""); QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui"); uiFile.open(QIODevice::WriteOnly); uiFile.write( data ); uiFile.close(); projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n"; } else if ( mainwindow->isChecked() ) { QFile file(":/templates/templates/mainwindow.ui"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("MainWindow", ""+l_uiObjectName.toAscii()+""); data.replace("name=\"MainWindow\"", "name=\""+l_uiObjectName.toAscii()+"\""); QFile uiFile(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui"); uiFile.open(QIODevice::WriteOnly); uiFile.write( data ); uiFile.close(); projectFileContent+= "FORMS = "+QDir(projectDirectory).relativeFilePath(l_uiDirectory + "/" + l_uiFilename.section(".ui", 0, 0) + ".ui") + "\n"; } // Create subclassing header QFile file(":/templates/templates/impl.h.template"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); data.replace("$IMPL_H", QString( l_subclassFilename.section(".h", 0, 0).toUpper()+"_H" ).toAscii()); data.replace("$UIHEADERNAME", QString( "\"ui_"+l_uiFilename.section(".ui", 0, 0)+".h\"").toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); if ( dialog->isChecked() ) data.replace("$PARENTNAME", QString( "QDialog" ).toAscii()); else data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii()); data.replace("$OBJECTNAME", QString( l_uiObjectName ).toAscii()); QFile headerFile(l_srcDirectory + "/" + l_subclassFilename + ".h"); headerFile.open(QIODevice::WriteOnly); headerFile.write( data ); headerFile.close(); projectFileContent += "HEADERS = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".h") + "\n"; // Create subclassing sources QFile file2(":/templates/templates/impl.cpp.template"); file2.open(QIODevice::ReadOnly); data = file2.readAll(); file2.close(); QFile sourceFile(l_srcDirectory + "/" + l_subclassFilename + ".cpp"); data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); if ( dialog->isChecked() ) data.replace("$PARENTNAME", QString( "QDialog" ).toAscii()); else data.replace("$PARENTNAME", QString( "QMainWindow" ).toAscii()); sourceFile.open(QIODevice::WriteOnly); sourceFile.write( data ); sourceFile.close(); projectFileContent += "SOURCES = "+ QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + l_subclassFilename + ".cpp")+" "; // Create main.cpp QFile file3(":/templates/templates/main.cpp.template"); file3.open(QIODevice::ReadOnly); data = file3.readAll(); file3.close(); QFile mainFile(l_srcDirectory + "/" + "main.cpp"); data.replace("$HEADERNAME", QString( "\""+l_subclassFilename+".h\"" ).toAscii()); data.replace("$CLASSNAME", QString( l_subclassObjectName ).toAscii()); mainFile.open(QIODevice::WriteOnly); mainFile.write( data ); mainFile.close(); projectFileContent += QDir(projectDirectory).relativeFilePath(l_srcDirectory + "/" + "main.cpp") + "\n"; } // projectFile.write( projectFileContent ); projectFile.close(); accept(); } } qdevelop-v0.28/src/.svn/text-base/cpphighlighter.cpp.svn-base0000444000175000017500000003261311362261064023221 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * 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. * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Trent Zhou * Program URL : http://biord-software.org/qdevelop/ * */ #include #include #include #include #include #include #include "cpphighlighter.h" // CppHighlighter::CppHighlighter(QTextDocument* document): QSyntaxHighlighter(document), m_reInclude("^\\s*#\\s*include\\s*(<.+>|\\\".+\\\")"), m_reMacro("^\\s*#.*$"), m_reMultilineMacro("^\\s*#\\s*(define|if|elif|pragma|warning|error)"), m_reSpecial("//|\\\"|'|/\\*") { setupRegexTable(); m_formatFunction.setForeground(Qt::black); m_formatSingleLineComment.setForeground(Qt::red); m_formatKeyword.setForeground(Qt::blue); m_formatUserKeyword.setForeground(Qt::darkBlue); m_formatOperator.setForeground(Qt::black); m_formatNumber.setForeground(Qt::darkMagenta); m_formatEscapeChar.setForeground(Qt::darkBlue); m_formatMacro.setForeground(Qt::darkGreen); m_formatMultiLineComment.setForeground(Qt::red); m_formatString.setForeground(Qt::darkCyan); } // CppHighlighter::~CppHighlighter() { } // QTextCharFormat const& CppHighlighter::formatFor(SyntaxType type) { switch (type) { case TEXT: default: break; case FUNCTION: return m_formatFunction; case SINGLE_LINE_COMMENT: return m_formatSingleLineComment; case KEYWORD: return m_formatKeyword; case USER_KEYWORD: return m_formatUserKeyword; case OPERATOR: return m_formatOperator; case NUMBER: return m_formatNumber; case ESCAPE_CHAR: return m_formatEscapeChar; case MACRO: return m_formatMacro; case MULTI_LINE_COMMENT: return m_formatMultiLineComment; case STRING: return m_formatString; } static QTextCharFormat format; return format; } // void CppHighlighter::doRegexMatch(QString const& str, int startPos) { foreach (RegexItem item, m_regexItems) { int index = 0; int start = startPos; for (;;) { index = str.indexOf(item.regex, start); if (index == -1) break; int length = item.regex.matchedLength(); start = index + length; QString cap = item.regex.cap(); if (item.type == TEXT) { if ((cap.at(0) == 'Q') || m_userKeywords.contains(cap)) setFormat(index, length, formatFor(USER_KEYWORD)); else if (m_keywords.contains(cap)) setFormat(index, length, formatFor(KEYWORD)); continue; } setFormat(index, length, formatFor(item.type)); } } } // void CppHighlighter::addUserKeyword(QString const& keyword) { m_userKeywords.insert(keyword); } // bool CppHighlighter::removeUserKeyword(QString const& keyword) { if (m_userKeywords.contains(keyword)) { m_userKeywords.remove(keyword); return true; } return false; } // void CppHighlighter::setupRegexTable() { RegexItem item; m_regexItems.clear(); // number item.regex = QRegExp("\\b([0-9]+|0[xX][0-9a-fA-F]+|0[0-7]+)(\\.[0-9]+)?([eE][0-9]+)?\\b"); item.type = NUMBER; m_regexItems.push_back(item); // keywords QStringList keywords; keywords << "asm" << "auto" << "bool" << "break" << "case" << "catch" << "char" << "class" << "const" << "const_cast" << "continue" << "default" << "delete" << "do" << "double" << "dynamic_cast" << "else" << "enum" << "explicit" << "export" << "extern" << "false" << "float" << "for" << "friend" << "goto" << "if" << "inline" << "int" << "long" << "mutable" << "namespace" << "new" << "operator" << "private" << "protected" << "public" << "register" << "reinterpret_cast" << "return" << "short" << "signed" << "sizeof" << "static" << "static_cast" << "struct" << "switch" << "template" << "this" << "throw" << "true" << "try" << "typedef" << "typeid" << "typename" << "union" << "unsigned" << "using" << "virtual" << "void" << "volatile" << "wchar_t" << "while" // BK - Added Qt keywords << "slots" << "signals" << "SIGNAL" << "SLOT" << "connect" << "disconnect" << "emit" << "qobject_cast" << "forever" << "foreach" // Divius: Qt types from QtGlobal << "qint8" << "qint16" << "qint32" << "qint64" << "qlonglong" << "qulonglong" << "qreal" << "quint8" << "quint16" << "quint32" << "quint64" << "qptrdiff" << "quintptr" << "uchar" << "uint" << "ulong" << "ushort"; //functions and methods item.regex = QRegExp("\\b[a-zA-Z_][a-zA-Z0-9_]+\\s*(?=\\()"); item.type = FUNCTION; m_regexItems.push_back(item); //normal text item.regex = QRegExp("\\b[a-zA-Z_][a-zA-Z0-9_]+\\b"); item.type = TEXT; m_regexItems.push_back(item); m_keywords = QSet::fromList(keywords); // user keywords QStringList userKeywords; m_userKeywords = QSet::fromList(userKeywords); } // state enum { IN_MACRO = 0x01, IN_MULTILINE_COMMENT = 0x02, IN_SINGLELINE_COMMENT = 0x04, IN_STRING = 0x08, IN_SINGLE_STRING = 0x10 }; // bool CppHighlighter::handleState(QString const& text, int& startPos, int& endPos) { int prevState = previousBlockState(); startPos = 0; endPos = text.length(); if (prevState == -1) prevState = 0; if ((prevState & IN_STRING) || (prevState & IN_SINGLE_STRING)) { // this line is in a string, find for end of the string endPos = searchStringEnd(text, startPos, (prevState & IN_SINGLE_STRING)? '\'':'"'); if (endPos == -1) { // this is still in string setFormat(0, text.length(), formatFor(STRING)); setCurrentBlockState(IN_STRING); return true; } else { endPos += 1; // strlen("\""); setFormat(0, endPos - startPos, formatFor(STRING)); startPos = endPos; } } else if (prevState & IN_MULTILINE_COMMENT) { // this line is in a multiline comment, find for the end endPos = searchMultilineCommentEnd(text, startPos); if (endPos == -1) { // this is still in comment setFormat(0, text.length(), formatFor(MULTI_LINE_COMMENT)); // maybe previous line is in a macro... setCurrentBlockState(previousBlockState()); return true; } else { endPos += 2; // strlen("*/"); setFormat(0, endPos - startPos, formatFor(MULTI_LINE_COMMENT)); startPos = endPos; } } else if (prevState & IN_SINGLELINE_COMMENT) { setFormat(0, text.length(), formatFor(SINGLE_LINE_COMMENT)); if (text.endsWith("\\")) { setCurrentBlockState(IN_SINGLELINE_COMMENT); } return true; } else if (prevState & IN_MACRO) { setFormat(0, text.length(), formatFor(MACRO)); if (text.endsWith("\\")) { setCurrentBlockState(IN_MACRO); } // we can't just return... // consider the following code: // #define a /* // multiline comment // */ something } return false; } // void CppHighlighter::highlightBlock(QString const& text) { int startPos; int endPos; setCurrentBlockState(0); // 1. handle state specific highlighting if (handleState(text, startPos, endPos)) return; endPos = startPos; // backup startPos // 2. Highlight macro if (handlePreprocessor(text)) { // 3. Highlight keywords doRegexMatch(text, startPos); } // 4. Highlight strings, comments... // a. search for first occurrences of ", //, /* startPos = endPos; while (true) { startPos = text.indexOf(m_reSpecial, startPos); if (startPos == -1) break; QString cap = m_reSpecial.cap(); if (cap == "//") { setFormat(startPos, text.length() - startPos, formatFor(SINGLE_LINE_COMMENT)); if (text.endsWith("\\")) setCurrentBlockState(IN_SINGLELINE_COMMENT); return; } else if ((cap == "\"") || (cap == "'")) { endPos = searchStringEnd(text, startPos + 1, cap.at(0)); // handle unicode string if ((startPos > 0) && text.at(startPos - 1) == QChar('L')) --startPos; if (endPos == -1) { // this is a multiline string setFormat(startPos, text.length() - startPos, formatFor(STRING)); handleEscapeChar(text, startPos, text.length() - startPos); setCurrentBlockState(cap.at(0) == QChar('"')? IN_STRING: IN_SINGLE_STRING); return; } else { endPos += 1; setFormat(startPos, endPos - startPos, formatFor(STRING)); handleEscapeChar(text, startPos, endPos - startPos); startPos = endPos; } } else if (cap == "/*") { endPos = searchMultilineCommentEnd(text, startPos + 2); if (endPos == -1) { // this comment covers multi line setFormat(startPos, text.length() - startPos, formatFor(MULTI_LINE_COMMENT)); setCurrentBlockState(IN_MULTILINE_COMMENT); return; } else { endPos += 2; setFormat(startPos, endPos - startPos, formatFor(MULTI_LINE_COMMENT)); startPos = endPos; } } } } // // Return true if we still need to highlight keywords bool CppHighlighter::handlePreprocessor(QString const& text) { if (text.indexOf(m_reMultilineMacro) != -1) { setFormat(0, text.length(), formatFor(MACRO)); // FIXME: This can't handle the following code: // #define some this is /* // blabla... */ a macro definition... // if (text.endsWith("\\")) setCurrentBlockState(IN_MACRO); } else if (text.indexOf(m_reInclude) != -1) { // TODO: we can highlight it in a different format setFormat(0, text.length(), formatFor(MACRO)); int pos = m_reInclude.pos(1); if (pos > 0) { QString cap = m_reInclude.cap(1); setFormat(pos, cap.length(), formatFor(STRING)); } } else if (text.indexOf(m_reMacro) != -1) { setFormat(0, text.length(), formatFor(MACRO)); return false; } return true; } // int CppHighlighter::searchStringEnd(QString const& text, int startPos, QChar strChar) { for (int pos = startPos; pos < text.length(); pos++) { if (text.at(pos) == QChar('\\')) ++pos; else if (text.at(pos) == strChar) return pos; } return -1; } // int CppHighlighter::searchMultilineCommentEnd(QString const& text, int startPos) { return text.indexOf("*/", startPos); } // void CppHighlighter::handleEscapeChar(QString const& text, int start, int len) { for (int pos = start; pos < start + len; pos++) { if (text.at(pos) == QChar('\\')) { int endPos = pos; for (int i = 1; i <= 3; i++) { if ((pos + i < text.length()) && (text.at(pos + i) >= QChar('0')) && (text.at(pos + i) <= QChar('7')) ) endPos = pos + i; else break; } if (endPos == pos) { endPos = pos + 1; if ((endPos < start + len) && (text.at(endPos).toLower() == QChar('x'))) { while (++endPos < start + len) { QChar c = text.at(endPos).toLower(); if (c.isNumber() || ((c >= QChar('a')) && (c <= QChar('f')))) continue; else break; } --endPos; } } setFormat(pos, endPos - pos + 1, formatFor(ESCAPE_CHAR)); pos = endPos; } } } qdevelop-v0.28/src/.svn/text-base/logbuild.cpp.svn-base0000444000175000017500000001102411362261064022012 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2007 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #include "logbuild.h" #include "mainimpl.h" #include #include // LogBuild::LogBuild( QWidget * parent ) : QTextEdit(parent) {} // void LogBuild::mouseDoubleClickEvent( QMouseEvent * /*event*/ ) { // First highlight the line double-clicked QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); setTextCursor( cursor ); // BlockLogBuild *blockUserData = (BlockLogBuild*)cursor.block().userData(); // If blockUserData is null, the line doesn't contains "error" or "warning", we quit this function. if ( !blockUserData ) return; QString projectDirectory = blockUserData->directory(); QString text = cursor.block().text(); QString filename; uint numLine; if ( !containsError(text, filename, numLine) && !containsWarning(text, filename, numLine) ) return; if ( numLine == 0 ) return; QString absoluteName = QDir(projectDirectory).absoluteFilePath(filename); m_mainImpl->openFile( QStringList( absoluteName ), numLine); } // void LogBuild::slotMessagesBuild(QString list, QString directory) { foreach(QString message, list.split("\n")) { if ( !message.isEmpty() ) { message.remove( "\r" ); setTextColor( Qt::black ); QString fileName; uint line; if ( containsError(message,fileName,line) ) { setTextColor( Qt::red ); m_mainImpl->resetProjectsDirectoriesList(); m_mainImpl->resetDebugAfterBuild(); emit incErrors(); } else if ( containsWarning(message,fileName,line) ) { setTextColor( Qt::blue ); emit incWarnings(); } append( message ); if ( !directory.isEmpty() ) { QTextCursor cursor = textCursor(); BlockLogBuild *blockUserData = new BlockLogBuild(directory); cursor.block().setUserData( blockUserData ); setTextCursor( cursor ); } } } // Move the cursor to the bottom. Ensure it is visible. QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); setTextCursor( cursor ); } // #define ERR_EXP "^(.+):\\s*(\\d+)\\s*:\\s*(error|%1|undefined reference to|%2)" #define WARN_EXP "^(.+):\\s*(\\d+)\\s*:\\s*(warning|%1)" /* If your language is not translated in QDevelop and if g++ display the errors and warnings in your language, modify the two strings below "error" and "warning" to adapt in your language. Also have a look at editor.cpp*/ bool LogBuild::containsError(QString message, QString & file, uint & line) { QRegExp exp( QString(ERR_EXP).arg(tr("error", "Compiler message").toLower()).arg(tr("undefined reference to", "Linker message").toLower()) ); bool result = !message.startsWith("make") && !message.contains("------") && exp.indexIn(message) > -1; if (result) { Q_ASSERT(exp.capturedTexts().size() > 3); file = exp.cap(1); line = exp.cap(2).toUInt(); } return result; } bool LogBuild::containsWarning(QString message, QString & file, uint & line) { QRegExp exp( QString(WARN_EXP).arg(tr("warning", "Compiler message").toLower()) ); bool result = !message.startsWith("make") && !message.contains("------") && exp.indexIn(message) > -1; if (result) { Q_ASSERT(exp.capturedTexts().size() > 3); file = exp.cap(1); line = exp.cap(2).toUInt(); } return result; } // qdevelop-v0.28/src/.svn/text-base/misc.h.svn-base0000444000175000017500000000252611362261064020620 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 - 2010 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://biord-software.org/qdevelop/ * */ #ifndef DIVERS_H #define DIVERS_H #include #include #include QVariant addressToVariant(void *it ); QTreeWidgetItem *variantToItem( QVariant variant ); QAction *variantToAction( QVariant variant ); bool connectDB(QString const& dbName); QString getQDevelopPath(void); #ifdef Q_OS_UNIX #define SETTINGS_FILE_NAME ".qdevelop" #else #define SETTINGS_FILE_NAME "qdevelop-settings.db" #endif #endif qdevelop-v0.28/resources/templates/.svn/text-base/impl.cpp.template.svn-base0000444000175000017500000000020211362261070026176 0ustar jlbrdjlbrd#include $HEADERNAME // $CLASSNAME::$CLASSNAME( QWidget * parent, Qt::WFlags f) : $PARENTNAME(parent, f) { setupUi(this); } // qdevelop-v0.28/resources/templates/.svn/text-base/newclassimpl.cpp.template.svn-base0000444000175000017500000000012611362261070027743 0ustar jlbrdjlbrd$HEADERNAME // $CLASSNAME::$CLASSNAME( $ARGUMENTS ) $ANCESTOR { // TODO } // $VIRTUALqdevelop-v0.28/resources/templates/.svn/text-base/dialog.ui.svn-base0000444000175000017500000000176011362261070024527 0ustar jlbrdjlbrd Dialog 0 0 400 300 Dialog 9 9 382 244 Remove this widget and insert your own widgets 9 259 382 32 QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok qdevelop-v0.28/resources/templates/.svn/text-base/mainwindow.ui.svn-base0000444000175000017500000000137511362261070025446 0ustar jlbrdjlbrd MainWindow 0 0 598 388 MainWindow 0 0 598 28 qdevelop-v0.28/resources/templates/.svn/text-base/impl.h.template.svn-base0000444000175000017500000000037111362261070025652 0ustar jlbrdjlbrd#ifndef $IMPL_H #define $IMPL_H // #include <$PARENTNAME> #include $UIHEADERNAME // class $CLASSNAME : public $PARENTNAME, public Ui::$OBJECTNAME { Q_OBJECT public: $CLASSNAME( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: }; #endif qdevelop-v0.28/resources/templates/.svn/text-base/newclassimpl.h.template.svn-base0000444000175000017500000000023411362261070027410 0ustar jlbrdjlbrd#ifndef $IMPL_H #define $IMPL_H // $ANCESTORFILENAME // class $CLASSNAME $SCOPE $PARENTNAME { Q_OBJECT public: $CLASSNAME($ARGUMENTS); $VIRTUAL }; #endif qdevelop-v0.28/resources/templates/.svn/text-base/widget.ui.svn-base0000444000175000017500000000067211362261070024554 0ustar jlbrdjlbrd Form 0 0 400 300 Form qdevelop-v0.28/resources/templates/.svn/text-base/main.cpp.template.svn-base0000444000175000017500000000036311362261070026171 0ustar jlbrdjlbrd#include #include $HEADERNAME // int main(int argc, char ** argv) { QApplication app( argc, argv ); $CLASSNAME win; win.show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec(); } qdevelop-v0.28/resources/images/.svn/prop-base/CVprotected_var.png.svn-base0000444000175000017500000000006511362261070025771 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/filenew.png.svn-base0000444000175000017500000000006511362261070024330 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/cross.png.svn-base0000444000175000017500000000006511362261070024030 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/filesaveall.png.svn-base0000444000175000017500000000006511362261070025166 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/supprimer.png.svn-base0000444000175000017500000000006511362261070024725 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/nogood.png.svn-base0000444000175000017500000000006511362261070024164 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/cpp.png.svn-base0000444000175000017500000000006511362261070023461 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgstepout.png.svn-base0000444000175000017500000000006511362261070025057 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprotected_signal.png.svn-base0000444000175000017500000000006511362261070026456 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpublic_var.png.svn-base0000444000175000017500000000006511362261070025256 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprivate_var.png.svn-base0000444000175000017500000000006511362261070025452 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/wrap.png.svn-base0000444000175000017500000000006511362261070023650 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/ajouter.png.svn-base0000444000175000017500000000006511362261070024350 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/logoeditor.png.svn-base0000444000175000017500000000006511362261070025046 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/buildstop.png.svn-base0000444000175000017500000000006511362261070024704 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/bookmarkprevious.png.svn-base0000444000175000017500000000006511362261070026301 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgrestart.png.svn-base0000444000175000017500000000006511362261070025040 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/refresh.png.svn-base0000444000175000017500000000006511362261070024335 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/filesave.png.svn-base0000444000175000017500000000006511362261070024475 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/linguist.png.svn-base0000444000175000017500000000006511362261070024535 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/print.png.svn-base0000444000175000017500000000006511362261070024033 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpackage_var.png.svn-base0000444000175000017500000000006511362261070025373 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVtypedef.png.svn-base0000444000175000017500000000006511362261070024570 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/view_tree.png.svn-base0000444000175000017500000000006511362261070024670 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgstep.png.svn-base0000444000175000017500000000006511362261070024327 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/good.png.svn-base0000444000175000017500000000006511362261070023627 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/qdevelop.icns.svn-base0000444000175000017500000000006511362261070024666 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/h.png.svn-base0000444000175000017500000000006511362261070023126 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgstepinst.png.svn-base0000444000175000017500000000006511362261070025225 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/helpassistant.png.svn-base0000444000175000017500000000006511362261070025561 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/find.png.svn-base0000444000175000017500000000006511362261070023617 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/QDevelop.png.svn-base0000444000175000017500000000006511362261070024416 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dir.png.svn-base0000444000175000017500000000006511362261070023455 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/previous.png.svn-base0000444000175000017500000000006511362261070024553 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/editdelete.png.svn-base0000444000175000017500000000006511362261070025007 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/fileclose.png.svn-base0000444000175000017500000000006511362261070024644 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpublic_signal.png.svn-base0000444000175000017500000000006511362261067025751 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/bookmarknext.png.svn-base0000444000175000017500000000006511362261067025411 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpackage_meth.png.svn-base0000444000175000017500000000006511362261067025546 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/clear_left.png.svn-base0000444000175000017500000000006511362261067025005 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprivate_signal.png.svn-base0000444000175000017500000000006511362261067026145 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/logo.png.svn-base0000444000175000017500000000006511362261067023645 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/resume.png.svn-base0000444000175000017500000000006511362261067024205 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVclass.png.svn-base0000444000175000017500000000006511362261067024243 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/editclear.png.svn-base0000444000175000017500000000006511362261067024641 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/hide2.png.svn-base0000444000175000017500000000006511362261067023700 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/hide1.png.svn-base0000444000175000017500000000006511362261067023677 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/SplashQDevelop.png.svn-base0000444000175000017500000000006511362261067025577 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/error.png.svn-base0000444000175000017500000000011711362261067024034 0ustar jlbrdjlbrdK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/compile.png.svn-base0000444000175000017500000000006511362261067024335 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/clearallbookmarks.png.svn-base0000444000175000017500000000006511362261067026375 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/indente.png.svn-base0000444000175000017500000000006511362261067024333 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgmemview.png.svn-base0000444000175000017500000000006511362261067025033 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/window_nofullscreen.png.svn-base0000444000175000017500000000011711362261067026771 0ustar jlbrdjlbrdK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/qrc.png.svn-base0000444000175000017500000000006511362261067023472 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/stop.png.svn-base0000444000175000017500000000006511362261067023672 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpublic_meth.png.svn-base0000444000175000017500000000006511362261067025431 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/debugger.png.svn-base0000444000175000017500000000006511362261067024471 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/empty-16x16.png.svn-base0000444000175000017500000000011711362261067024624 0ustar jlbrdjlbrdK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/configure.png.svn-base0000444000175000017500000000006511362261067024666 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgrun.png.svn-base0000444000175000017500000000006511362261067024166 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/editcopy.png.svn-base0000444000175000017500000000006511362261067024525 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprivate_meth.png.svn-base0000444000175000017500000000006511362261067025625 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/next.png.svn-base0000444000175000017500000000006511362261067023663 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/exit.png.svn-base0000444000175000017500000000006511362261067023656 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpublic_slot.png.svn-base0000444000175000017500000000006511362261067025455 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVglobal_meth.png.svn-base0000444000175000017500000000006511362261067025413 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgvar.png.svn-base0000444000175000017500000000006511362261067024152 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprivate_slot.png.svn-base0000444000175000017500000000006511362261067025651 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVglobal_var.png.svn-base0000444000175000017500000000006511362261067025246 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/designer.png.svn-base0000444000175000017500000000006511362261067024505 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprotected_meth.png.svn-base0000444000175000017500000000006511362261067026144 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/build.png.svn-base0000444000175000017500000000006511362261067024004 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/libre.png.svn-base0000444000175000017500000000006511362261067024002 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgnext.png.svn-base0000444000175000017500000000006511362261067024340 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVpublic_enum.png.svn-base0000444000175000017500000000006511362261067025440 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/curseurDroit.png.svn-base0000444000175000017500000000006511362261067025377 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/redo.png.svn-base0000444000175000017500000000006511362261067023636 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgnextinst.png.svn-base0000444000175000017500000000006511362261067025236 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/window_fullscreen.png.svn-base0000444000175000017500000000011711362261067026434 0ustar jlbrdjlbrdK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprivate_enum.png.svn-base0000444000175000017500000000006511362261067025634 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/rebuild.png.svn-base0000444000175000017500000000006511362261067024333 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/logo.ico.svn-base0000444000175000017500000000006511362261067023633 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVnamespace.png.svn-base0000444000175000017500000000006511362261067025072 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/edit.png.svn-base0000444000175000017500000000006511362261067023632 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/exec.png.svn-base0000444000175000017500000000006511362261067023631 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgrunto.png.svn-base0000444000175000017500000000006511362261067024531 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/buildrun.png.svn-base0000444000175000017500000000006511362261067024531 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprotected_slot.png.svn-base0000444000175000017500000000006511362261067026170 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/qmessagebox-warn.png.svn-base0000444000175000017500000000006511362261067026170 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/editpaste.png.svn-base0000444000175000017500000000006511362261067024667 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/desindente.png.svn-base0000444000175000017500000000006511362261067025027 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/filesaveas.png.svn-base0000444000175000017500000000006511362261067025027 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/breakpoint2.png.svn-base0000444000175000017500000000006511362261067025125 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/pause.png.svn-base0000444000175000017500000000006511362261067024022 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVstruct.png.svn-base0000444000175000017500000000006511362261067024462 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/dbgparam.png.svn-base0000444000175000017500000000006511362261067024462 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/CVprotected_enum.png.svn-base0000444000175000017500000000006511362261067026153 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/warning.png.svn-base0000444000175000017500000000011711362261067024350 0ustar jlbrdjlbrdK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/bookmark.png.svn-base0000444000175000017500000000006511362261067024512 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/doc.png.svn-base0000444000175000017500000000006511362261067023452 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/undo.png.svn-base0000444000175000017500000000006511362261067023652 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/editcut.png.svn-base0000444000175000017500000000006511362261067024346 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/fileopen.png.svn-base0000444000175000017500000000006511362261067024506 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/refresh.jpeg.svn-base0000444000175000017500000000006511362261067024504 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/breakpoint.png.svn-base0000444000175000017500000000006511362261067025043 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/prop-base/fileprint.png.svn-base0000444000175000017500000000006511362261067024701 0ustar jlbrdjlbrdK 13 svn:mime-type V 24 application/octet-stream END qdevelop-v0.28/resources/images/.svn/text-base/CVprotected_var.png.svn-base0000444000175000017500000000050111362261070025770 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը_IDATxc`0>R`^ (f?^f0& fdL!X5o)KY3Y0L30LtS*o>LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKMI64KM3I44K1103LNJ607674H25IENDB`qdevelop-v0.28/resources/images/.svn/text-base/filenew.png.svn-base0000444000175000017500000000147111362261070024336 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  tIME79HwIDAT8˵[Hau77-܊Xx&\)HlE=ehJ *5P9άjudP'Ȍ {TJZ[ycdRB3&1z 4%4"޳~V%+T7O'fRf[hu[^34.%Kl¸%\SK+xgE{S!=p~/IENDB`qdevelop-v0.28/resources/images/.svn/text-base/cross.png.svn-base0000444000175000017500000000156311362261070024040 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@1҅A3/3(\c@7 " 5?ay T Ph_?0m823" P N_W@4PYA qySQOC  3\_?~}gra T|Ca8  `b4###(LAd(p_?>l@ aπз1?Ёf. SA.QNj(@PX A   ;Wfk(`0@a r&` þ4f0@a5* ǰ_[KWB^290W:FȆ2|o3@1Ja 66EEpR<Ǝ=ď_30|33(?Ɗi8@1.Ca>ȥ C1/"`B"  \*h7נd1܆AleFP)EL⇆~e&#nhb8(S@?G_c /AYqo|Dv,ޟ]lef08%] d?-@fJS`K)  ԥ3 0&Py DWM@`.EyH 4IENDB`qdevelop-v0.28/resources/images/.svn/text-base/filesaveall.png.svn-base0000444000175000017500000000174711362261070025202 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME 5/3SpLε7U#b4.-qm""YDPw ӵ^8w ΝK2y֞xXq sIk6$8^XX_gxG Djem"fa1"bT>0xN1" *j,j=UPJ'"Y)jz}6(RJ.a15(r"r#˝6V3RHbo)%5.;3xt00x^PcL1cl*AD#=jMIԦ$Y-~g")eT bEfe!\9h3fjeT3Ex)Q5O%ьɤb0(Q:ͺYU!_0NOWt)jT󺿛&e;,XWs"ج1tgJ坟VLcb4&^%?3){ŝnV!pf<39CL L"IEIENDB`qdevelop-v0.28/resources/images/.svn/text-base/supprimer.png.svn-base0000444000175000017500000000035511362261070024733 0ustar jlbrdjlbrdPNG  IHDRagAMAܲIDATx+@ g<W8Cot6Agpd^`e1F,G 2RrܯMuzhڕe%)DU\&p2H_:M}?$i_ CX0TfV?tO|1:B/rIENDB`qdevelop-v0.28/resources/images/.svn/text-base/nogood.png.svn-base0000444000175000017500000000156311362261070024174 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@1҅A3/3(\c@7 " 5?ay T Ph_?0m823" P N_W@4PYA qySQOC  3\_?~}gra T|Ca8  `b4###(LAd(p_?>l@ aπз1?Ёf. SA.QNj(@PX A   ;Wfk(`0@a r&` þ4f0@a5* ǰ_[KWB^290W:FȆ2|o3@1Ja 66EEpR<Ǝ=ď_30|33(?Ɗi8@1.Ca>ȥ C1/"`B"  \*h7נd1܆AleFP)EL⇆~e&#nhb8(S@?G_c /AYqo|Dv,ޟ]lef08%] d?-@fJS`K)  ԥ3 0&Py DWM@`.EyH 4IENDB`qdevelop-v0.28/resources/images/.svn/text-base/cpp.png.svn-base0000444000175000017500000000163511362261070023471 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 c($~a`a`X9C~o@ Ti?ÖaY @p>}``= [h+@`V; @!t_"fX?  >Pc`X r!΀̀p X qˑ0?oLpD ad߿Q /] cb`10q _z UTT);Ã|0ݻwQŅ'B >defde _fKJJ2Ɂ}n@  `"2ٳg|򕁍 Çp6;;; @( >H~[,""Hzo@D  r$“ 222p˃ ?*%%6=r0())]; p$a"ZA4,9"d3H#ȥ r,@|o]>, @a!`#2ܹsf(+>}`$> =H h Lb"G6(`>V f@ X1Ò(^fϞ 2T(ϊĂ~H'˗ Ur# J궭[ 2_`P 69xb<IENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgstepout.png.svn-base0000444000175000017500000000031411362261070025060 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxA W+h{ Bq#eA X8Fd9x.;:;:-,wĘH:*N $ܨey(Lqp` TWc ) 3٣Qn՟ר"-8IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprotected_signal.png.svn-base0000444000175000017500000000054011362261070026460 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը~IDATxc`0>R`^ 1kV͠pgwbY3>0 3c8nњ t"?H+t. yx:@]8LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex354OI42554I5H4N1I4N4O233L12034 ;4IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVpublic_var.png.svn-base0000444000175000017500000000044511362261070025264 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըCIDATxc`Cb4r1kV=%=0g0FL L$" r4S-oH!LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex34JN430ILH24N51L5726JK3J3400s`RmIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprivate_var.png.svn-base0000444000175000017500000000047211362261070025460 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըXIDATxc`0>U5byɐa(5[195#cb xLYȚ2a)6@Df*ՖQX LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex344I2I443453H2JL27N24OI06J4>jIENDB`qdevelop-v0.28/resources/images/.svn/text-base/wrap.png.svn-base0000444000175000017500000000076411362261070023662 0ustar jlbrdjlbrdPNG  IHDR r| pHYs  tIME  + bKGDIDAT(ύ=KQǥXڐYC(.QZOo؋YӋ:Q)jE3yy8G4<;=w5)8Ϛoh@EyUхRe(ƽ;\xPN W]͡jK*Y̠Œ ctpq|Rb&n1{c]X0u\x@n niaZF0< g1>!b&6MyHr~4 wLaj)6RdK #~ ;GkɆ0Ӫ$ w7m[pIo{gM뗴N!kko5(8z|GhEIENDB`qdevelop-v0.28/resources/images/.svn/text-base/ajouter.png.svn-base0000444000175000017500000000076611362261070024364 0ustar jlbrdjlbrdPNG  IHDRa pHYs  gAMA|Q cHRMz%u0`:o_FlIDATxڤj[A={,2 2`Ti JGH6&&Rƕ* 64jct9P DQ|?fUEDT;ի{m=QUJhfȗϟF1W p˕յu\}qW (tW z2pkJsz;7j*hW0?ݍo%,>V.xq;:0up_Ϫ줡UU.^ "EQ|AlPO/+sbaf0$x=Ξ}Dߏuxba2,7nD+)ft^4b8H@[Yl/4.^@KOC߇qO4i{mƿ>D\Q`4Yj"DAy.Ksˏdd/B.\vۃG V֬]K(-O>F?o0x*×n2v~l9X{~Y&iR:N߰K/"m'kЏy·:1M1o.Jrj;vp8J<0%Lb@~ !4u6m LgVr4Tj@R*%3x9Lf8 KD)H)vŤFQV!N8x5܀kQA6nwS&QIENDB`qdevelop-v0.28/resources/images/.svn/text-base/buildstop.png.svn-base0000444000175000017500000000247011362261070024712 0ustar jlbrdjlbrdPNG  IHDR\tIME (Q;t pHYsN N }gAMA aIDATxڥUklUfvvvݥJ+hQ 0B4"D FDilP& (iQ`QBKnϝM 5_͝s{߹4|oБ~\<+ïWB1v C\m#C"{:/>zeqzmG6c|Eu1<"uv&H!˜CYi,xA^+m ىHy0f0B컫JqoX zض HK'+/J Jč=PNP i" v|9ߘ57._щ}*ங@a㣍CS@6O!a(ຂ$Ic5QwC g]0⵵ vs!#SG>]@X##UUweGWOB#.9cvӊziR8\gKeȚgrdqL!SBZ#N3BMe0Kor#[[ f#ގ %<@a-Ktlm54j?>|ebH?#1JdσGVT Ȝ֓s!.#a\![Z-Z6X:#vO x5 \\0;cGvlǗɗ1}( BVTy?~Kpl|^|{{7RUuZǂ]RFh? =Gv^o7«#Ef[ԒRa.v}ϕ;6ǟ>E4CVW*!j >H-޺m,IxpKn=&:L+TT擐˸f@HyynnebARIENDB`qdevelop-v0.28/resources/images/.svn/text-base/bookmarkprevious.png.svn-base0000444000175000017500000000207311362261070026306 0ustar jlbrdjlbrdPNG  IHDR\tIME ;&ꝣ5 pHYsN N }gAMA aIDATxڍUmL[e>M+j6Fb3*fź-J9Y$? 15ı,Q.٪&dSÀ1Yl*~JaI[V.] $y{%Vz-lQ$1^A2*)(:3O!ϸe+R)jB/Xx/YgxWx491 d(`*Y%Ѓw)P~ 7̃+ɝStu#U|^nN\vmsx&I|-mvRO12z aٜ☶?e/#J+k"OL >$=\'e2A(vxJ6y{כ/iwZ.fsHOY բ3 @@R fӲԐ' ;e}Q=!{@Ypym( L=)u@٭-t:4F? x \Z-!C ˶monn"L~*(y7ڪOT^ :p'N(u'gZIeYdY15\,}'k+ፕ_[['D͘jB "?|@ /]7]$&TS]LLOqG$1!1B(+__̯},_#uY f€.ޘ0+5 pjd gdž޽o^#;C^LJ ݻ777g|O2myrrݯQL$ք9٭ ðZ 쥘Vy\-ew"ĀU6!`0DP[ C ΠGwx^9>EFV` }amՇ"R-6?jF44k˝nZ8_.98ƀϲ,J*|^x*B@Qc?|S*0'ۗi7%f*#YKfjn.^o+KϷnR̉sN; CIO6D{E.a#@g={m&5M* .@뺞z65]98?{Jsqyyٵ=J{c0,aX? gwA\)Cadd$B~d'[* ZA*z &1#9~W`?KKKd1YKA%?Pvu9D 37!?9l1ye(6,IΏZW?CjPIENDB`qdevelop-v0.28/resources/images/.svn/text-base/filesave.png.svn-base0000444000175000017500000000146511362261070024506 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME/IDATxՔ=Eٝ5w>2?1"uEbH@ A!sB2ddɾw3U3;k;vK O[6?Q]OT3zBvĤd)f,jnq9wb7>_ẞʵKPq>~ &p]>}޺_ᔔ. հryzm/#&a{U _•O1)8w*,1z·x_dҳu/,,?,͔b4:Jq;x͌t!bfۈ{+;e2}Ƚ1bH4˖:p|!Ka}޽{=sbY*o"b@ɤMӚ.kpϽuE/r2 LÀ4@ x}icOm7oZ3q9 1b9?OwGҘ)h8@XݧfZWDVtDdF6]B)3N?ށLbCDd8X8V鴵 #FbqY$ J+mם ߵ=i߽.F#";tЉS/=rKE* u9k\63ǍHkK6%"`AZ N~יIy5<,l7 2nTy3~LDRO!A.!ǜ}3'6ڇeq DR `σXVے8E+{GԇN~ٴ‡ĥgF.χ\k9&^O;u0%4 QYme^y@D:k,?]kcڼ/itnt?c˖/](Tf""3OrIX>T`D~\s¨i}\f:+Y (VCJ>n orSWo^LIv`m0$ Ǩ#Iyqye Yc˚~R~@/Br-x6`UED- w_p'nPJ0!H99D >7uN%RP*+-) 1W/E9%xϕ7w>!DU9@D..qM3&Q1!* )m(N~J*#u":jxLB֪pk zܟJQ_is >zB|_d'[̉[ nʗ &{ 6nNj{&&&`ZEu333p:pf,m CsDKK FZXqt 9ݸ} UQBHH(_ף bl͑n(1iF\L g^^^q9d\ ˤjF 58UhT.LMMB.7 $&& -[f1RBixt\O7&rvt钐F ѣP]))HHHD~~>Y ?r콽mM|@"ya~(mmk޽G](S.\8̕+Wno'G=<&l٢vСڵ*;w(ǎ]Sl9@~xȞ,v iEƟC+ŷLm;v码j>7%Ł{~·&}2IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVpackage_var.png.svn-base0000444000175000017500000000044711362261070025403 0ustar jlbrdjlbrdPNG  IHDRagAMA abKGD pHYs  d_tIME #tIDATxՒ!@EpXDq=J$HD- GhȊ dv-o6{όT8i@T9/4d+T(F͒nz<W k©tK L=PtF_bF5hX+ v2 #IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVtypedef.png.svn-base0000444000175000017500000000043711362261070024577 0ustar jlbrdjlbrdPNG  IHDR7bKGD̿ pHYs  tIME  3^0IDATxڅѽ @ PVAL@OA dT4iQDACV8HG(uH  %05ڨIENDB`qdevelop-v0.28/resources/images/.svn/text-base/view_tree.png.svn-base0000444000175000017500000000056511362261070024701 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGDC pHYs  d_tIME  IDATxAK@1!OzqߐoBe&z F-;{فf;vPK`i]5N'EQFUqaY,in ?E`tk] 03 MDmH ) =N?W\^WIENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgstep.png.svn-base0000444000175000017500000000026611362261070024336 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըkIDATxc`jR4 YJJˉr1@q!H r}C1C7$ J<ɍT@3 RՑV:FSQޥ(0;2) (IENDB`qdevelop-v0.28/resources/images/.svn/text-base/good.png.svn-base0000444000175000017500000000140111362261070023626 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@11  FFFƷA! 2s!CMϠ4h ffGbd,!Dg ddJ./ | 3Lf0 I@0``萠"4oC %2x#33~< ez_X3#ԃʍ+ n^:t#C&Rb`b``]e@{64[3gg/xD zy:!$I41gev`RgbsM?0?0dF9 #P ?~_Pǐ`b?6_u -`af@>s B@DB ..z>C+ bv$+@Q \/~;-á*o 0&N g eg``\h((O!.phx#Aa: P `RF/8r@^g`x 4i0 ?`H30|@AI7Ln.eK tc4J# #&Y @43 䭛pEIENDB`qdevelop-v0.28/resources/images/.svn/text-base/qdevelop.icns.svn-base0000444000175000017500000017405011362261070024700 0ustar jlbrdjlbrdicns(ics#H????is32҂dg cX |UcϿ̺q.ϾéPmr/˾Z̼ǁǯЮ͈k汮tBnê1Xá~,ʑ" ZÌE Et"Uw{g1dq XX |dlaH=?UcJم<fs.Dl \WmUi闼+,m/IoleMfMk? 9~M I^oShq|4: O6L}Bk+GՔ?::_g%1+0ng ,w?UPNHRY-x" ZQJE E~{"Uq:dq XX |godMBCUcNڈ@is.Ho^WmYl隿/ 0m/MrphR cPnC=QMb!"tWkq}8>T;P}Bk/LחC?:_h#,'2oc,y4A?=8@C({" ZNHE E{"Uq:s8mkSuuS--TRururSQ-,QrrQICN#????????????il32 )mm k}po­{w{λc|˭Ľ}W|⴫IJpL{ݬ]Eoެݭ{LHೳ殹鿡bCuĬֺ¿ΧrN?ҮȷȵgC­ծOv˵űҶb1ȯ¥گ~KĮȳ̿٘Qɽó̴ިZzƱᷝ_pǽԢ_eųڟfQk祪|DZ}唫jNg~Β[QUsđљmULmҲZHVɭǵ̼ľa:Il¯»ƺƬ߸kUUзúĮܴlPZǴФiPZ}ʼɵ_U6nýgT: UguqaTBD[\__VWGm}~~}m kzpo~Ƚêyw{ߥa4%##'6\§}cy00pk][SA1zWyPs^g`_Y$ CmL{/$mվcYM" '[Eo/.wK&$|JHO$qeY0{bCuבiuUGONvL?2Azrhz5ఄ !{f@ʗktngfG+jLv[,unke_şԈNV/ I`14EskhfQ 'r[|F7 ,|K"Tnhd`'WѼ'NXkccB ZɴaGvsZxUfa[  \T _m!Lc_D;&k& Zkɢ\e/6b\($H E .؎]QiKC>R7u? XxDWh&)X. hLfw' p4rS *֖YGRvXp6  kUJk8 .=3EC' O85Rŋ CِXHU'ppl0zGP=C^PHON &Ů`:Ij'XBTf@ijXcp[s`h%hUO|̸D2\A!a@jPW.  :ǥgPZ{ȎQ+(I\LHlñfT: Uero_QBD[\_ZVWGm}~~}m kzpo~ɾêyw{ߦe8)((+:_§}cy44sn`^WE$6zWyTvajcb](FmL{4)pֿf]Q&+[Eo43yN+(|JHR)tg\4{bCuהlxXKRQuL?7E}uk}9ⳇ&|f@ʙnwqjiL0lLv^0xqnhbǢ֋R[3M`18IunkiU+t_J;1|K'Wrkhc+Z,$!N$[nggF^͹eK{wZx#Yjd^%`X «_m&PfbH;+o*_n" ɢ\e3:e_,)L I3؎]QiNGB#W*Ʈ`:Ij,B6CM5PQELTGWJ_O*hUO|̺G*F6! IEjPWӃ28ȥgPZ{ɐT/,L\LHlòfT: Uero_QBD[\_ZVWGl8mk?[hh[?ll~<;\Z\Z<;}lj?=[Xhfhe[X?<kj~| ;9ZYZY;9}| jj=XffX=ich#H????????????ih32[ }zyyz}|̙|ſ~~ ׀ ¸~vǾ¹txòžsi!{俫þtZ#|έoÜ%}ィŹdL춨öUN쵩ضqHZ氠~_Dɨ㢮ʊ|oNH٭ʽкtaBo޺ȺɸӠxqPFά±Һ#}dCջڧ)zJLΰջDz)`GĬ⩶ȳ*yJ˼ã߬Ĕ*OKɷɻӗä+Ҩ_gǴ­ݹjJzòǴƾwOwȾ*ƶװɀUwƲ(ɃZkǾƀYk}Ŵ՛wZp֏r|q_ŷէf_X}%ۘؖcSg#ЉÁ_dSt|"hbLgrЏ\OWowΜÏrYKhx!ϩ֑̏]wKWzȽΧԡkWImдӽϩѽ̭W'ZQٮ̦ʿĪ[]%PbƵøŸҵеʺÓbY$PrѽƻҶgUV{ʱİ ̫߷gS Z{Į ͫaUbrƵ ϶{XV ikŻ ƶfUXmhpújVUhkvu_UUwfcgiqsz|zukg\ZWX ivXYZWYUoO }zyyw}{~z̙|~{{}ȿ}v~ěsVE??DSnpx~ْJ  Dƻpi!y/ )FwjeigaYM6 *vqZ#{> Lcmdhcca`_O 4mQ%y 7tYgq^^[Y[;haK~r RW[YT0RSKr dypRN8! LoGUi{ޥvS|\C}cz[RT clLE> P|rSdcH٤J#rs_Ao 2yvtsV`6FznND0dytro`n# pɒ *u}a@։ 6ytqoj{ܨ`+_S *TxILH \wqolhن{\ /{R+-^Eɳ prolkhbbqϾִĺt*wIˏ 9uomkifd],Ml6u'* wMKk Lsmkhfcd=42sR*, XҤ]g}Q YokifcbQ`Ĺd @׵gJzA^migda_(+ οbme"-uOw<_kfdaaF*q˸Q !D(~Uq;]hca^\$)\G .(ǀWh>Yea_^G  ~V,}YgzK Pc_][+9xv  jj ?tZn_ >b\[N c< ]ovq]y!Z]\3] LU d_Vz(F?% UwA@s*ؒaQe6$AD1z2~[_Rq\$ o]  {e]Jeqx#WTЌ[MUlzS'l<  poYIfw* P֍ &ˌZwNUws)PO@/mJV &G%{4v jWHj`,K H'.+!,,zA&*8 n}V'ZOU Z|mrra{seuuQzva  U辉YX%P`Xh]:e:0j_/ejkuATpaS VÐaV$Nom2tgEA.:%<&,22 meUUyؙ*E` z%޵eS Zxp   $kϨ_Q_ov4   -i϶xWVihϩ{S:(##&5LnȶeRXmfnŻhUSoehss]TUwfadenpwywrieZYUX ivXYWWVUoO }zyyw}{~z̙|~{{}ȿ}v~ƝvZICCHWqpx~ڔN#  "Hƻpi!y3-Jzmilje]R:/yqZ#{BOfpfkfgecbR"8mQ%y;w\jtaa^]_?kaK~uUZ^]X4USKt#g|sUR<%OoGU#l}ߦw#V|\C}f|^UW dlLECTuVggLڦN'rs_Ao6|ywuYd;IznND5g|wurdq't̕*!v}a@֌:|wtrm~ݪb.bW*WxILL_ztrpkۉ~`3W+1^Eɳ$%surpnkedtضȿ"y*wIˑ=xrpnliga0Qn9xĴ+*yMKoPupnkiggA96vU.,\Ҥ]g}U]rnliffUcȾhD׵gJzEapljgec-+ügqi&1uOw@cnigedJ*uνT$%H,~Uq@akgeb_))`J 3,ǀWhC\idbbKY1}YgzOTgb`_/>|zomDtZnbBf_^R g@ `ovq]{&]``8aPZd_Vz!-KC%Y{FDx.ؒaQe:$EH4~6~[_Rq_$ sa}e]Jeqx'"[X Ќ[MUlzU-oBsoYIfw.Uّ$*ˌZwNUwt&??5*R,('*9PqȶeRXmfnŻhUSoehss]TUwfadenpwywrieZYUX ivXYWWVUoOh8mk -ESZZSE,5xݳw4dc fe53gfge53 fcda52xv,*EASPZWZWSPEA,)wu31caec31fded31dbb`2vݱu1)BPWWPB)it32?U3*$8fuu uuf߶*3 ?Ԁ4*Hf4{vssrsw{64uf?ffPtux{}}{yvv&8?U!?UfUu]䫁uy~}yuu3??#?fuwx}$|xwUU? zxȄ}vyuڿ!???u}сӀ(¾zuQfڿU?!3vv؂#¿|vuǪ*.f]xւ!|u??Uʕv рҀр{rU?:?UWw}ЀxoÚ?'UuɁz&|ptHU#mfu¼"rg{U @xȸ ¿vhq#U8uwz~wiaO$8u޽yhZU?fwwŃ̀ˀʁziY_?f#y̯ˀʁɀƼ{hWkd???fɏ{ⶭȀˀʁɀȀĵxeT_?fɋ|ͫЀ ȁʁɀȀǀĵvbQYf#|̀ ʁɀȀǀŀðr^NWd翎8n{ᯬʁɀȀǀŀûnZK^Hᅩ?8z֪ǀȀǀŀĀhUGl*U??$uwͧǀŀĂÎxbQCffmwuɨѡāĂr\L@(3鿈?f<{ƨр屼ŀā~jWHA?8ǨсĀubQDJ=$uz˧с'ܦ~o[K?zf3UUvҦс%ۜ»wfUF;hWۨсЀ!zn_OBB係?$|歮рπ!۶}uhWI=}f?fxﶃр%ۛz~xobQC:H濁]ƫр&ӏz|ysiZJ>M3yتр&󑗥Ŀ}'}{wunbSE:C?_糯р'Ó¿򿚠'~{wuri\M?E0szŭрЀɀŶ¨%zvusndTE:??U٭рЁɀ²欥#|wutqk]L?Cf׿3z廰рЁɀǼ՚#yvvtpeUE:TѮрЁôƀŴ荜!xwvtl^L?Jf3ffxั΀Ёߡㄖ |zzxrgUD9buϱЁ΀ƿǽʀ~|xm^K>g?߱|ܹЁ΂藃}ufRC:[3ހ |ϲЁ΂̀&ϧȰ{p\I3f~˽΂́ˀ2|}߫ʽϦͨȶpVB8$U*ɹπ΁́ˀ2ƽz}ʹВǷ·|^Gdûˀ΁́ˀʀ/Ļ|}ϸfMJfmz΂̀ˀʁ.ܠzշƸ ȿnSBzf{ǿ΂̀ˀʁDz&{Ե ȽxYEU8|ƽ΂̀ˀʁɀ#Ǧɲ ÷_If6žł̀ˀʁɀ"ʅӿڷ }ɼgMĿˁ̀ˀʁɀư!ͺ }lSùˀʁɀǸ ƵrWb_uý̀ˀʁɀ‰˹wZZuû̀ˀʁɀDzν}^U8zº̀ˀʁɀǾ4aRfsºˀʁɀƯ5ǬɩèdPfnºˀʁɀȀ5{ŪfOflºˀʁɀȀĮ6}}ڦūiQfjˀʁɀȀŹ6Ų|ᴌƬjRfhˀʁɀȀĮ­|㹋ŬjUfg~ʁɀȀŻձō}峆ëjXfui{ʁɀȀİzӲ~©i]8ukxʁɀȀǀƷ~ϱzhb8rrɀȀǀijҨԲzνgk|lɀȀǀҲǠy̻ezgɀȀǀķĬМ||ɷ|cmf `zȀǁî ̹͔{dzwamZsȀǁĻ ֵॄîs_Tkƀŀ ©͛пn\fOc|ƀŀ ƼΠ̻j[3uY]uƀŀô ⨚ȶ}ekƿuUmŀþɣ 񼘜İvaU?fJOcyÀХоp\amUH\p˸hZ 3HMThz6ĻųzcalM`q6~| Ҿr^ 8GWiw}5 ʸjZԀ BPapx}|.zð{cX*[JZisxz{+}ϼq]tUCSbosuvx*˔{}zƴhXrUCL[iprsu~+|zҽvaZfsETcmqqrv*z ǶkZc?M]ioqqs~*Ҽ}!ԾxbTUuQGVcmpqtw(ӹz{"ƵmZk?`@N^joqtwy$ѼzbTUǾUKGVenrtx|Ω}~$ŴmZ`f&@O^krv|~Դ|ȋ&κxaTD$UUcKFWfpw|Ƕy«NJiX`3M?N^mxľļ{Ыڜȵt_RpUUZUEUft޾ά޺ܴЬƩ~~λ}fVk׿ѿ?߸@L]n|؁ԀЀﲆЬ{׾n[R*U?U*DRexЁԈЬóu`TȿUHIZo郬άЂ&鬬°°ЬǷ}gWZ3fk@Pdy郬ڬЂ'¬ᄌﴬЬͺϥʉ̸lZPmU~EWl郬֬Ђ(иΰ̬ʬиάЬ䬬ëܬ󲇬Ϻq^S?صFKK^v񮂬ƬЁԲҀ 讲ҀЬ܀ ЬܬлvbT_1?ʫDQd~Ƃ쮬Ёﴲ̂Ь̂Ь άܬ ҽzeVU%ɿ3*EVmĶﺀLЀ)ƼƼЬ󴬾ެڅн}hYP?m?ش*H\tȺڶҲ ҮހҮڸྫྷЮμjYP??ίH8oMaz̰Ї˺k[Q}3ֿH_QfɱԺЅǸl[Pl3U_\XSjѹܴЄ¶l[Rc?ٺ?_ZVm׀ƮĶփϽ}k[Q_\??ػ]Xnӹƀǹ{iZQcd?۾?dgYn̲ϿwgYPi俖ۿ?}YlǯŻrcWOzzU㿘ۿ?HFXi~ůȼo^TNU㿚ۻ?fC\fyɳʿxi[SQ<̪㿜׺fUgctҽȿqcXP[$῞ ׽`]m~̻ſwi]SM'Կ?Ŵfeguـķ"½{naWPU??ηUaly؀Ľ Ŀ}pdZRN$?fxcnzЀӀ׀.¾~qf\TNcU߽ʸ3$D~ndnyЅр'{pe\TNZb? ?´RncktɅ(wmd[TNZ8?ٶ?Ѽ? u`gow'yqg_XSN`tU?ɺA3faahnv}wohaZUPQqԿU?G?ɹ̑{{^`diou{}vpjd_ZURQib_۶?CɽUf͇c\^bfimruxz}~}{yvrnjeb^ZWTQXvƒԙU U?U$ ^hXZ\]_abceddba_][YWURR`{SUf?ȼ%U?fwi`[VUSSRVX^fs ȣ_?ʿUm8f 88f?ԁ ?8fuuuufq??3f$f2ztqqprtz2+ufUUmfCrsvy{}~{yvts8*G?3*uW}rw|zvs~u̿U?"?ffuvv{$~yuu?"fwv}Ā'ztwu?%??sz΀(~xrEf??!su}ӀՀ*ysqǍ?U!Uff]u~܀Ԁπ!zs??*Ɠt}ЁЀЀ"¿xpm3?+?fWt{Ǹ{w,xzumqU?'U*uxƿ{W6'%Dnylq$#Hfs~sC#+^~pd{ !auf`J?UUs޼k)!/=KW]cfkjf_^YMA7(FvfXUUfnu翥h#(AYnponmmlkkjihgfedcba_O6?¾wfW~_?f#w̪s( 1Uosrklkjihgfedcba`_^^\CJ¾xeUgd???UfɎxᵌ8"(Lnutsrgijjihgfedcba`_^^]\[X.hucR\??UfɊyˢ^ 3`wvutsrq_dhihgfedcba`_^^]\[ZYX.-s_PWUf#y츎23izs rqk^eggfedcba`__^]\[ZYXXV!cp]KV\翎Ufnyn*'ayoqqppYbffedcba`__^]\[ZYXXWU?:kXI[??wաU,NxxlotvU_eedcba`__^]\[ZYXXWUTP"|fREi*?uu̘?-nx zS^ceu]^^]\[ZYXXWUTsu`NAf3UmrsǕ0FxxwR\gZ\\[ZZXXWUTFaoZJ=%迈?UUf8yĒ(_yxwwTXZYXWVTGW{hUF???|ƒ&&oyxw)vRXYYXWVTTH+Ss`OAF=?uyʕ(-syxw'vsLTXXWVP9  V|mZJ>xfUsј04wyxw&vusoGPUU@(^tdSD9e_P۟?9yyxw$vuttqvE?+mxl]L@AmU係?UzU5xyyw$vutsr~NJ[k)}{rfUG<}ff?ffun,wyyxww`JMPQ%{ul_OB9$U濁]~Ŏ,#syyxwwvJMRVY[\YU<zvpgXI=Lvס2,jyyxwwvONT[_`aa_\W 'Y{yurlaQC9C??_ ^,YyyxwwvuLS\accba`_]h%'t{xurphZJ=C0qxč/=yyxwwvutpNX`ccba``_]>h%5~wurplbRD8?tר81"uyxwwvutt\Q[adba``_S%1#\yurqoh[J=Bֿws2ayxwwvuttsodS\bcaa`_@#!{wtsqmcRC8QUТ' Nf Wyδ=9Ewvuttsqpponmlkkjݧ tWx~mWE:Rʢ$ξbNfln=kkjihgfedcba`_^^]<¾' joeNfjm?kjihgfedcba`_^^]X¹ 7ڣfOfhm>jihgfedcba`_^^]\:cƳ35hPffl;ihgfedcba`_^^]\Z/îa@gRfe|l9hgfedcba`_^^]\[@'β? 5ͿhWfufxq4gfedcba`_^^]\[Z nԳ̽gZ8uiuy,fedcba`__^]\[ZFx DвB&ʻg`8pp$edcba`__^]\[ZY& ;ϩ_,Գ:9ʺeizkdcba`__^]\[ZYOoʳY&ȘA XǷ}cwe} \ba`__^]\[ZYX3 WŬi/ь ijy`Hf _x! Ja`__^]\[ZZXV OͺJr ïu^HWp: 5`__^]\[ZZYX? 7նw"Ͽp]˪ߣSj] __^]\[ZZYXW" zê\#΍$̻lZmMbyx H^]\[ZZYXWIxϛB2ǷgY̪uW[s \\[ZZYXWV)s\iiijzbh?tSj~$2[ZZYXWVFHʤ cqҿs_ߪfGM`wK.VYXWVPʦ N?4̺m[_HGZnr/=B<4}¤z^R\rA9ƴfWHKRew4z̽yz,ֿxa^fkL]o{:* λp\߀ 8FVgt{~i*IO 9ŵhWʪ AN`mvzy|*O־x`VfZHXgquwx}G*z¨9 ̸m\qSBQ`lqrtvv*{4jV c~eUoUڽAJZgmpqr|4*M/ \N ιs^V3pCRaknoptk OıiXUc>L[flnoq|/ҽ "йv`S*UuNETakmoqukӺy "S±kXi]?L\gmoqt~7:"Ϲw`S*Ǿ׀ IDTblpruzvΦ ?$ojX_?f!?L\ipsy{LԵO ZU'˵u_SB̀ cHETcmuz}%Xȸy%T[)VռhW_J>K\ku{s&ZaN ::GaaG Y{|Oy~ۛ&[ñr]Qm*UKQCRdq|PN:{ނ [AG{ݰ-׉.Ǫ,)˶zdUhѿ?޸>J[ly3ʣ:&&׉-f{oT*  ӺlYQ?ʁ BQcuu&:G׉ۿt_Rǿ?UDGXm׃GTZ &::3::3TZ ׉L]6*C?`3_ó{dUY3h>Navo׃-':TA[aM:T-׉&сFҘpᕶuCȵjXOHU{CUia׃ (È:: {uÈ::׉Taװ&3˶o\Q??״FJI\t[Ag &a :&a:׉װ װa:,͸t`S]1U?ʪ?COa{[ah{-&{:&{׉׽ װa-,͸xcTR!ԪɿU'CTkc@@G)aTThG-ThGމ-M-׷3͹zfWNYdwρ-XźvfZQO7U㿜׺3Uc`qؠS1~ĺ~naVNZ࿞ ׽U3`[j|ΐN 0puf[RL'#?IJmfcesҠu>#)Wľzl`VOTfU??Ͷ_iwԀy[<(*!0Ii}ÿ{ncXPM?mfualxЀсӀ*Ŀ{odZSMbf߽$ɷUD{lblv΁̀znd[SMY_Ԁ!?UyPl`iq|Ăŀ'~tkaYSNY8Uٵ?л_ s]dku~wne^WQM_qfA?ȹf^^eksz|unf_XTOPq?G?ɸUmvz[^bgmsyztmhb]XTPOh`?۶?ɼfʄaY\`dhlosuxz|}~!}|zxvsplhda\XURPVtqf* \eWXZ[]^abccba`^]\YVUSQP]zN_*3U?ǻfuf_XUQPUV]dpģq_fU?ɾmm8f 88߿ڪf?ԁ ?8fuuuufq??3f$f2ztqqprtz2+ufUUmfCrsvy{}~{yvts8*G?3*uW}rw|zvs~u̿U?"?ffuvv{$~yuu?"fwv}Ā'ztwu?%??sz΀(~xrEf??!su}ӀՀ*ysqǍ?U!Uff]u~܀Ԁπ!zs??*Ɠt}7¿xpm3?[?fWt{ʺ~{z{{}umqU?'U*ux~[:!'*Hrylq$#Hfs~üwG!#/a~pd{ kXI[??w֣X,R{znrwwXbhhgffedcba`_^]]\\[YXS&|fREi*?uu͙C2q{}Vafhxa `_^]]\\[YXWWuu`NAf3UmrsȖ5J{{z#T_i]__^]]\\[YXWWJdoZJ=%迈?UUf8yŔ,!b|{zyVZ]\\[ZXWWK Z{hUF???|ǔ++r|{zyU[\[ZXWK0Vs`OAF=?uy˖,1w|{zy&vOV[\[ZT=% Y|mZJ>xfUsҙ48z|{zy%xvrISYYD,`tdSD9e_PۡC<{|{zy xwwtxHB0oxl]L@AmU係?UzX9{||zy#xwvuNj\l+}{rfUG<}ff?ffuq1z||{yybLORS){ul_OB9$U濁]~Ɛ"(v||{y$LOTY\^^\X?zvpgXI=Lvآ7m||{y$QPV^bcddc`['[{yurlaQC9C??_ a]||{zyyxNU_dfedc`k)'t{xurphZJ=C0qxŏA||{zyyxwrP[cfeddc`Bl%8~wurplbRD8?t٩<2'x|{zyyxww^T^dgfeddcV*5#^yurqoh[J=Bֿwv2e|{zyyxwwvrfU_efeedcD#&{wtsqmcRC8QUѤ,@|{zyyxwwvtsmdsT_ed]0!R|vutqj[K=Hf3fv޹k t{zyyxwwvtsrpjd^YR]cedS j! {zxwupdRC7bڪu}Χ'O{zyyxwwvtssrpnlhdYadH%ۮQ|{yuk[I;fzٺo"wzyyxwwvtssrqponmyx\:"L!~~zrdPA9[yά-6Qzyyxwwvtssrqpoonw(e{iSP6\ymZG:EUuԿ7 vyyxwwvtssrqpoonrѶ#*wdO>Nf WyϵB9Iyyxwwvtssrqpoonmߩv[y~mWE:uwwvussrqpoonnlkjjgb0ٔF QϪ?JeL=Ūf{ǽtE8wwvussrqpoonnmkjjifcܹn:^+Ʈ8 nTA6ŹFDTwvutsrqpoonnmkjjigge`dL(P޳/˾ z\Ecm Covutsrqpoonnmkjjiggfec^HlL)ѽŠ1@ťwɽdKIfHx&vutsrqpponnmkjjiggffed['&R^.׼ʽDûlQ@z_xÿy;utsrqpponnmkjjiggffedc,#B7H׺"úuVC*8zXNtsrqpponnmkjjiggffedc?"(Q͸ P~]Gf6|7^srqpponnmkjjiggffedcR kޫ'#ˋ]Soؼ ŸdLm nrqpponnmljjiggffedc`$ ɽjQsm¯ rqpponnmlkjihgffedcb;^ Hk°oT__u*qpponnmlkjihgffedcbT @HǵuXWqu2pponnmlkjihgffedcba+%2'078,1ʹz\R8v|9ponnmlkjihgffedcbaI35¼5#̻}_Pfou>onnmlkjihgffedcba^!4$Ĉ]D6BV̧(ξbNflqAnnmlkjihgffedcba`@+mteNfjpCnmlkjihgffedcba`\4Ž;ݧfOfhpBmlkjihgffedcba`_>fʸ79hPffo?lkjihgffedcba`_] 2dzeEgRfe|p=kjihgffedcba`_^D,зB9ͿhWfufxt8jihgffedcba`_^]$­sַ ̽gZ8uiu}1ihgffedcba`_^]I{IӶF+ʻg`8pp)hgffedcba`_^]]+ @Ѯb0ַ>=ʺeizkgffedcba`_^]]S#rͷ\*˜E[Ƿ}cwe} `fedcba`_^]]\7[ɲl4Ӑ#ijy`Hf _x& Nedcba`_^]]\Z SѾOvïu^HWp> :dcba`_^]]\\C ;׻|&Ͽp]˪ߣSj` !cba`_^]]\\[' }ǯ`(ё(̻lZmMbyz La`_^]]\\[M "}ҠG6ǷgY̪uW[s %__^]]\\[Z.wīamlijzbh?tSj~)7^]]\\[ZKLͪ #gvҿs_ߪfGM`wN3Y\\[ZT"̬ RD8̺m[_HGZnt4AF@!5Ʃ~cWavE=ƴfWHKRew5~}~è0ֿxa^fkL]o{>"+ λp\߀ 8FVgt{~k+MT =ŵhWʪ AN`mvzy|!,S־x`VfZHXgquwx}J*~ŭ= ̸m\qSBQ`lqrtvw*π!8o[f~eUoUڽAJZgmpqr|7*Q4#aSιs^V3pCRaknoptl) RıiXUc>L[flnoq|3"ѹv`S*UuNETakmoqum վ}#"W±kXi]?L\gmoqt~:Ŋ>&Ϲw`S*Ǿ׀ IDTblpruzw#Ѫ$D$rjX_?f!?L\ipsy{O  ׹S _Z,˵u_SB̀ cHETcmuz})\˻}#BF.ZռhW_J>K\ku{u$FK> 11:KK: "]SZdܡ*_ñr]Qm*UKQCRdq|Su>1\` F5:\~)d3ʯ0.˶zdUhѿ?޸>J[ly7u1md$$d1kuY- ӺlYQ?ʁ BQcu$W$h1d:mdۿt_Rǿ?UDGXm:`dBF $11-11-BF d=H.%74J-có{dUY3h>Navr)yd'1Bd5uFK>1Bd)d$_9nTlWGȵjXOHU{CUid qd(d11` \`Wd11`dqBK~$8˶o\Q??״FJI\t^5Od m$hK 1u$hK1d~ d~K11͸t`S]1U?ʪ?COa{]KOdd\)$\1hd$\d `~K)1θxcTR!ԪɿU'CTkfy55:d)KBBO:)BO:d`)>)y7͹zfWNdF˸|hXO?ί?$8nJ^wɎ"-h\ daǷiYO|ֿ€H]Nc}ͪ1)~m5 dõ~kYOi_\WQgЀUK~)d-־}iZPbU?ٹ _XTkт#BK-q]̺|hZO^\U??ػ_]VlսOKddO+ĶygYPb\U?۾dfWkח/o̻vdWOhU㿖۾zWj}%SqbUMwz*㿘۾FUg|w%LŹ}l]SL㿚ۻf>Ydwσ1\źvfZQO7U㿜׺3Uc`qآW6ź~naVNZ࿞ ׽U3`[j|ΒQ! 4suf[RL'#?IJmfcesҡwB!#.Zľzl`VOTfU??Ͷ_iwԀ{^@,!*%4Llÿ{ncXPM?mfualxЀсӀ*{odZSMbf߽$ɷUD{lblv΁̀znd[SMY_Ԁ!?UyPl`iq|Ăŀ'~tkaYSNY8Uٵ?л_ s]dku~wne^WQM_qfA?ȹf^^eksz|unf_XTOPq?G?ɸUmvz[^bgmsyztmhb]XTPOh`?۶?ɼfʄaY\`dhlosuxz|}~!}|zxvsplhda\XURPVtqf* \eWXZ[]^abccba`^]\YVUSQP]zN_*3U?ǻfuf_XUQPUV]dpģq_fU?ɾmm8f 88߿ڪft8mk@   Aaϼa@  =oխn<  &`_%  !fe  FE  a_  lj  b`  DB  #!  ZX   ;9  ig    $! &$ &$ $!    if  ;8   ZX #   D@ b_ li a^  FC ! fc  &" `]  =: ol  A= a^               a^@=   nk<9  _\%!  eb  EA  _\ jh `]  B? ! XV 96 ge !$!$!! fe 86 XV  @?_] ih^\ CA  cb "]\!  :lԫk9 =^κ^=  qdevelop-v0.28/resources/images/.svn/text-base/h.png.svn-base0000444000175000017500000000156111362261070023134 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 Iӣ _^^c;aßo~ /&F7á_`1TA @ g]gzPT0 "x a&*c[df <+) bG|W`NpD n  _1f82w!X@ Ȏ2"h!}aL!,d`a BO߿3pqq1022 /×/_888}Lp}Dw2ܸql8`Xɓ'`Ad2 &Rhh XCAadA#&BK߼y f`יP=@DSpY X SkXA(J)Cv)b0(YXX ~ Jn`>dc bAw~7Va(ܱ P)|=߿# 9`  @a,,, :HHH0zٳgÇc<} 4Xb0H ۷oAb@3AfzA:2[Ɵ={6Cff"P>H ()@d1PL P=2b̙ CMsrĂ-CSnڵkAj`wH0}M iwMIENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgstepinst.png.svn-base0000444000175000017500000000031211362261070025224 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxRA 0 /=A!"v4+516p#,*k:VDUl cA, F~PSb}nY tlLFqex SrN;)-LK@U!mQjbEEK>Ƹ%+$@R(`لvZzgs{z%-6Orr·=yyaAl[usfGuBL cLð[;boXyoup`JzvoD1c@ (cb\p=˻;EtT=ci}a6{ [fաʼn0=.!$0m11/;P*gw4hקx`D~Ջ0:BbRycLU d:f;:  H!l/o" wՆ{q^|6[>ƩQ5;e^PsB1SH@k0Kt#0DU]-ibI:m wy/C%o/^8Sr?9`Dhc0B`0QĈTAAܒ,JailJiIbem{~4 Xu;v$k}H a$JPTb1*Q^@drqݮ.:]"26D2L@"P!(qۢ7.OwO?-Ơ'{[ZlXRX2?g(~kbu׸wM:jP<ҺMW_j뺯+O !n  $3 "?T o;CR^J=d%6pKx-GY=曫b2&td> jOBKڸZǙWW(WB\c:"VIuˇ+3ĝ|O[ 0$;[~e{査I+@)$^T Ba"J_ |IlE+s{'馊8ubJ2>tUk.ŠBM- 6p٦;6d,"}2̣Ef|>p4GF#p {df6 >f8ٝWm,;RGd4FGH!{FPw\!(s~ɚ6qq>IRˎR+$tWk6o}rbxbw f|"!BVb5)d2{5 b;^c˵6_?7Tuޒ(.xnF'N\_(] \ ԖB쎈MA4U]1IT u(XR!wms\#ddY&fLd>v3KΦ&iK M>ϯ#۳u8՜!M9~JjsSu7l-*MR }2 "᾽EOx CWxgyKNg$N6083-+zb$s㌜xn \W3dt.cJexK#@yoDiM-K&v+)[ynqB%PNSb^fV+}E,n0\O Fˆb'սe^A:LT[F^"`xJV4?ZyZ D{q+9w}̫F8ۣM2tIǭռcL%G{:f+hZCȏisxϟrj(6[wyY%,f jM"BLc؁\ v^l|9O(0ԑG#A (\s͆ l^۷Jź2[$P -iI,x= !Fyh0wd-Lh7[1` V8@ЬWiM!Sckym Dz`­3㇂G֘ @H5sb &`D}fDv?7ˋ| K}« $X%Y 3''#Ï@g푒d64q>a%O@13 ?304/s32VQA@ F&" l2 `fwkO0  X8%.zb@ I -  KxdLT}3o f'0N2Wn N&p2130+h70 i wݻOo/>'?+P0n^po2A `0p1@07߿9~z`387@B?Ѕ@\&>b6o@.߾}G70"  P׳,~ȁb%>< ~ŵ`70~a`  Yݫvb!>ׯ? VɌ/så3e>S@Lճ3|~I/@|hho,u>>n|38!)qᙋb g`2bdۊ gaUc`e{!܈Ka  tpHR|b"B LT@F9U@|o x߿p9炨y 0}m8"fDJ}߬LI MW/^?rv7 .(Ϡlɠ#-a8@#DŽYruDŠb_Z7_$6 ;W7>1,hcd [K$͏-d÷Nΰbz3f@5!'}б&0I3p1h2gbM ~‹<FAu!?r/g3b C b"'B.H99X 3RRIENDB`qdevelop-v0.28/resources/images/.svn/text-base/QDevelop.png.svn-base0000444000175000017500000001123511362261070024423 0ustar jlbrdjlbrdPNG  IHDRGH pHYsodOIDATx]koI\ĉss&W'!b0dff 9pda KQPX!! )"C9zرĞ=HLzByuȃY7 f]@]u:s[$`h_yΐo'L.?l7](XhƏC?W$E%\}ڙ3$npQxz>3o"$<-lQ2w!4X Ew[*azez"_;~o$^X ̯qJ bvG= ]WE8 VE9sr'4RGU랜Æ;[n]};KR{̑"be?3%Ln[6s}݃' ֤.[gx#sf+C%Caugnc&0 ]o rnye&M( xqq,qf4y BLcjDQh_DC(\wċ\}ډݣ()WcĄ1`N_-ԓY?k6G^΍|X-Mx*xI"ޘ8n,r%xj'Q@JVzq~[Z2~.dQWWtu3#Iin}GP#} mnGfՍK%6-Ii 1Bl;K*L4u$3=Jn-(_\?Ue=NcOa_Ͱ"OHLi_G۰>"rLkS򰥸MxمBiDVY֦ڤ[e)Y4]Akf-gUڔxixW37^vqτC%~:nˊqn/5Xt%ڲ@e?VhhdgXl9fcK06L'r/6pI/5]ɩ&>Nq#VXee[%֢h(`zO((j<1YߕZY>94K<􍞉AH1\Ob𕿵sXQ%lfnuGtdEۚp1 aCqwny{Uǒ84m@[7/O,F'>NJYCu?xم%=gMtԃpU7uC֤EwGB`BҰMNjrbS_Z4⢁( (`ӝzMį(j5t:ZWv?J~p((@vlϭWiwvpn+^ք9 e. eN]kfrW ZLBUM$UR-`v »ˠ{GDVF'b$8PhxMI +a-\ԍIi F&;SךFVALg雈߀I14ǏLJX)*QnmXm3 += kc]AK#2!Zjᄆ7z1țdIt ܞS 5A0f/W ~8xtK3ZU!s2hcC`.>rG&Dڅb)\b\$EIw'jwD64MΔ&bWvfIMa}33/oc&愆XwK &gQ aTi.w[qUwgbӽr!ad5@3Gh7];W_"&T7p݅eIog)ЩU7[qa{Nlwˀ%SWs,3B^HeW?Wsxwl9h'o0tկbx&0V(@Ѝ-ț. "/i9cSFJc&RAwB,/5rCV! ոǕc:돕оrY%,fAw(C0T)ea,";9JvȳA~d"1G8eyllUPYăwcЬ*%rYIG|"xP5 Pm"?6Ka)Tx<Џ%'ԧFS9A0Bob *w'j02ӵh[= D"hhX.7^:3H}USnvI;S)"$`ω0dI@0iWg+opEFAQg'HlSz:?Y.#c4IdVim[߻kpW/3hKkQx}BlD'o8OGb>zcFbo9e lBV3if; (]¸x FmٺHeʆtd= e}R/%blKT쳏ܾYɍR}h_2OEig7KH9[]cъ7 *Y <~1']IY˧%ZQ7v:Tf*4$`9sq6&:@hٜdͷ$omFѩ̔4w$f %\GAqn\iyEd/'>J$1eqÓSMxa%WNB1<; ;e\fW֎%+K$?u f_ЫdtsRm^.?lw$a&!='V3Φ-]ꋖ^PQF\_jȦF'?џU&'$W#$sh/"_Zb+rDž BDIꥵ(N\i˳qEɐ**5\XX cz8:ZBW9k]*5|\=4keķ- /v!"5=Wr 1l *?4}NN5aJbu\7FZRu:cv ֫nu3Ytl\7?3Jqyx5t㋽8r3As5ʫ5HhDA:Lχ?\Bយk,J3]ر5:_Op;(p DJÞUӱ ݹ>ݽu $Եf1qqy>dS6LnD}ݓv-Eqrc&亻yIMd`c`񃙅 @Xdd$?}bi#m꯴ 'Qƿ_? +@EO?W0}g4|@@+7P~+Ȯٙ0H L10X$}u>f   |f68QIENDB`qdevelop-v0.28/resources/images/.svn/text-base/previous.png.svn-base0000444000175000017500000000250411362261070024557 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs ,tIME 4ٸIDATxڍۋ\U{Oթ[Wv3t0J 3 C-,B<"/ DP$q=L NtWwUr.{IO4`}ǷYk)~JG $")@]6]wa'A(L;#M`^Ò{R? .y9NMx|szͲjFSFoT*;A:OdٷCx$opTN吓!__'M{ÓwΏ|z>sqt}JhDeNõLVj*˾o깲3 >6yw[1榓|tζ-Q$[ ٔQa fsp{rەK* |O=R$i݈\DU8{KԈ9=H!-=mU,@Y =WuA9)t"2!͞el?hvő= K}(@'|eɺwa%*~ieԝ 5;|rv_~1x_\+PI4r ll|.!lo8p}X\ 1 $i[ƶk<59R]xΆs߃7#cmQd6FILҍԭr^nvnUߏK 򗱴g,2\Zxl[XeK2`,B^Hڄծ8Yw-?$*']r!i?I&i/$mh&U!7o?٧>~9jU~Uz(;;*P$0 bk#v|MF' #$\Arym֙‰\BϔL.3ݏf)֬]PoGxsƁV-Wg&sNj`Rěj*ʩF]fεNjtt#]\ Db=Nl2_8qZT*/ȑ#G4>_GkUCۚr2^t44zA+3*qj%Hr^ns@T*{/{hRhIENDB`qdevelop-v0.28/resources/images/.svn/text-base/editdelete.png.svn-base0000444000175000017500000000166711362261070025024 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IIDATxb?ùK3112`~a7߿>~ 0Ǯ  j!h鏟Ə`eؼB!,ff(egce05O@5h 3 3@ "àp"b`D4;3")IA.  }GSy1(a@ J9`IW[f >b"dfwp?3v#g ~ dзo?9'6`x3p16@A@g23gh8(s Gq~?.^?f`=3~}t/ƣ2|~ l4ʊ`4Б> wkq בM ;fV.e36@LY0?p?|ײpC?0pefpabn0@~ 7%W0 B&L` B1 2=9_ؗ-``T9@X||'یfχo ̧2y20}NɈ=( H,`6u5F.o@˗=?~ěm+*dWSۚ !h8۱x  WLb'"𫴓O\>çÿLĂx  4\W@&̉=`6VDҁʲ#&0X-` HPZ@M`0O IENDB`qdevelop-v0.28/resources/images/.svn/text-base/fileclose.png.svn-base0000444000175000017500000000163111362261067024656 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGD pHYs  d_tIME 5(MIDATxnF?"v RnƀWjjS[/ҍ'V4D`A6E$N ilRAp9?_f́'LiQJQ5Bl6^ys.UUQy)Ƙ/RJ8~{ vL&1EQtp5,PJ}~|| (-. }~~N@UUxBmJʲ$"3|' A14 at](<u Ð`.{캮OQpO<<<<pqq+cg6h1[q`\$ irwwڽ^(>rs///'''}0,K嫠+$IBUUeI$$Ix 2} ivQosuxG/B꺦*h[8/<ےZNW)%+->li֩U߆/`Z^4MR 7if`2Bz&NkSۙeY̶ RJ,,KB  (dyo BqNeWTV;AiwA{ P7/x̺IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVpublic_signal.png.svn-base0000444000175000017500000000050711362261067025756 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըeIDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~%34E~LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex35K140J4M004NI242003O426430MɏlIENDB`qdevelop-v0.28/resources/images/.svn/text-base/bookmarknext.png.svn-base0000444000175000017500000000211011362261067025406 0ustar jlbrdjlbrdPNG  IHDR\tIME 0 ; pHYsN N }gAMA aIDATxڭU}L[U?T1Y\#a,.LLPC99Y$̍4q, i6Ԅl0`%,*֕b?`PȤ-`+!dxr914O\FEȓ w{PqFF%ıaL466]>{VwJ\Ԃ 8tjd}BۿbM?lj5|>#9.:ti!A} Mf~ҊdɄ0 1|#.h# S7PA NdYMQFb]ܨ6'< T'ld…?&1 F#^"P,FCR!@8V<Þؒ d6IP0™܇n jog{X p ǹgG:|iO~1ܧWTr?M ˯轣E!lR1O;΅^R%P.j]iëTZ;J r/<\}e()YN/fQ(D^ð狕NsOu@$d2`||\ @`ZZZ(##!ev(>53dqLQ IT)M.9#.f*((7&wq efXGU Ci1 ,+M/2"gG/:f2 ҳ;e*`&Ze1ޣ_{TU#ס7 !|Boi9g)ӃQTUb$0&9S4^""o/8k]IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprivate_signal.png.svn-base0000444000175000017500000000054211362261067026151 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW \ -+>I!)LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK1H2L6212102LL51L3331J5044414quIENDB`qdevelop-v0.28/resources/images/.svn/text-base/logo.png.svn-base0000444000175000017500000005612311362261067023657 0ustar jlbrdjlbrdPNG  IHDR>a IDATxԽwt\u.sn^ 7U.YJ\8#[{y.X{9Ŷ$+nd5" I؉B>{I"eZf3[}vCh͚5Xv-9eY((ЊE]׉0 48v:Yd u]3({ϼrB}}c2A$\e(e #BUU0Ԅkb͗>Nu3z؈F MPQ(P'a4 bL$mtEIӤVVU=p@=== ǎc4y@DyDspnrB ;Ꚛ TVV\|?x :x BE.Ie$qE*0"b8dYFSS#~a]`Y< 4Mm tE$@|WݽFӲqc2c 1PJ(c RPB@(pB9<_xlBN x/\YY{e͕UUwA pI,ːe+D! 1kmgrQo&a0 h Caz iqE_[[}}}n TAQUD"iiK^+1 "jba\VQQM6ݵwO,CVbTUW=% /vPiv@>'G%m8LMӠ:t]K ye=z7T[W?|#"gPbp8X,T*ʪ*l۶KK>`dx\0eYIJ,/X:;;c׭{CJ>ppaxEQJ"$c">W1/O  ]30 |8mcÀi7iЋEdpȢŋwwJWs%Y"G?刦i4Me˄3MV=?{( U& }]J [P|IB}o0A0i˲a6,{Džrx,A׮K"K|UBdI(I$QJʮlnj1ۻAwWq]"iBuؖyoGkk+.fMYMMMpȌ A+iԶ` ?~s(D#DQb1DQO܇B(uX`9tÀVWnP_x?!,n؎3'(%p,4 bt@Ẏ/\:ē0h۰}I1}4 #W*"|F$ٷoR\1( DH&9k4/]pQ chhC( D4bYa\Ngy,˳"b(b"BEA$(eU4+02A.a Nk'a״ 0J!$PfDhbH,Z:cׅ]LEpׅ3B`?gB|Pr4]o]~e_mۻסr&,\UU+*PW[iWzQ삷/ Cqr*V/bpXEH$E"޷A,B% m#a`hC0 {{a=B,qZW] ꫠ^uz;jH2wҲ,4d%塚ۢ$= _|R2\Ay2BMu5fϙsQ삷^__FQ(v:Λ7Oܲye'Q\FǑL$O$W}#A(DDnp]{ .>"#z]\]m$t\e,EdY {j3⪫޵v)c*D"3gbYo .АaP˲+T:-GJ8Jb1 $Ib1#(Q! "tMCwwN>ȁCp6nygÈƢ56"zfτp/|9/xY!lB6APZdwvwW㻊< J͘3g%& FI.a4fZV俟~ }DT"T*x2x,z^!˲g&% i -N!p66•(Xb,1J"$yQm1Le`pE,̡!pǙEˑO -_v27%Qus9 bppÞ4+++>v1$X,S40-H)38GFH!i4W*s]x,T2T:]j(Q IBpu?#G` d687LJ 5PTVzѿш_k^!sdZwt RELb S20LH&ug헾h4:fH$S4faSb+ /`F+~OpS"G*B:F"G$Do% ĒI0A@!ǑGqT ;_xNOR[ peNڽz_ }` 3{;vN8ɻLfX%BA4M$A L}x+[WVy:ƌ30~\I3@ 3 >(SN="I+$>xpKzD"p]N k7[$-[9A>Acphuͯ'zY[mp8SfΜY M &AVOOQ\1?!E"LqD#Rd,!]QA:6fl~yv= eˠLq1> y S 4QQ" wLsAυc;^3s8 $<@״ַ>O$:~_؁aDxee%͟9sФB6mŒ3000As9b:bl5b'!E*L%7OE(d2tU(bhp_ߎ]!ZٳPsm"*;:ZvIHj{guCRU4oG R 1> >4)n.m6?`ԋ."⇖dx ŗ^Z+o>u(=܃~r^شi֬Y! ]שetҥB_eY.L["0$?^_N#QQB)Nۡ&rEjn?g"} D6 p!zvc՞q Bsfqݲ W6f0|~nSAޛ=\֑t *J0_dYV/즛oC!ׇT-_;LpNf.[b`f޿ ݝL&QYYt1_WVU!JGŞ׷7=XָQDUzu'{$n!d :vk^_1#[I55"+1M9s3%OOrral, yuv1(I3Lsu>2##0j Jlݺɣs2@kk+LD_Q,iՉ=ſJxHB4m;ؿo?oOྱccӧw!4}: ȟy78#a\nARW[ңطNE/ZӫW qrdar%IpJQhk?'$Àc'H, 2k&_KYyڹiK+|q7n*A` gΙ38+zxh ˗/9}d2I+iObÐEjec8s''~~b+*H cVB@s0IB岥&UU-k{fѽw/‚XիbzJmGAG2xuucy c\Cνuz㠯#Gt_ݻvqpK@$w}VU0!?HYkV675]kW<}V~T ea׎h۵w܆2!Crٲq Pr`L9n",_] PEӲ@ٳкy`R/x9?GP3mO sGT&."Rr:u]MuݻwsRvXbYU  ̫Ĵ,tRo3$-ݣ3@nYN7M R"!@qrԌhmC-x?Zv aȟlA~9j4 y"TA7xcml6Y2(ӟ`:A^A̙j~;_'ޞJ&L"mɲh<*pαo>ڵ '_^w(\w]V/J{b6xv hݲ"%(ŨA&ndGv>p>6ak/K)R/8w L˪ڲeK߾u֭R e t, c&hd}زg~ޮεD+*ND*$QD8AeU paٱ?P;n D60P+*q s2}p'6mHp'=r s.&іVkR%r|%A>cر;wzN}<o6muY74֖-xɲnIe---h޽q?5B9'[Sgg`$*B!"Q6iA={8.6<߲ao#I/hBP]FWL#lܸbAbd2@__6m4K D.#ٳg:wD)9D_zm$8`rsհQ_>@<Á_>>Y")qH'[PXEg0uЯd+ڴtɒSNq3JH$lٲ[XR4 9_I׳A^r(VbX)/W+ˈmAQnEHj_}?aė-RSetDGh,8 bgް嫰WBaTèTTn؈WmD#aBƁ/2:w?Ȝ#B)„B& bCHAa x~y,EQE0htvt+.bd>F骨_H6@Ettv xal"j L_uz_}&,6>A@\VCH*Ⲍ$!"JI2!(T'N9B BBh }'z(b~ `J)DQ7&Ip=Lukf~a>]i/ i;xgBh,"hfs8~8 NlvS#x@ǨTWY1}yPADPT% ’_"Kx | n/ ^Uv\dJo9eTQ~(زylێΘ1jF4MC&Awwwi6 8/IbIlݺuEqQ8B$,Ͳ>|5rjiyƝpl"DfςwTusϧ})EX edcȵPZs۲18K|pvgPHJJyg5 Lۼ {:ZYQ 2.zG?︃AM$Q#?0h0LD":;GRUhSGe`=ոb1G媕>dO,5sN'00 P3% apju v-##.Z_z7{lLG1AT+RZK]ЀwOc%ɳm۶84iX,bxhhllmllzo&`kjjKpѲmFit@{{;؎]qM[s@ϙsQ<݁_wv&{PBJ Ȋ/[&9(0i%c l;Њ`bXQ.,b|u;3f P .p?ɻn/.i$ϣ`Wu] h1t444Pl޽PC! ) $YC}q'[j%#_,|9p"Ph͢cW8뼀uza oV=cH-\^eи pQ{ر!Br{UU8?^}wP]׉i$j IDATˡԟhA @<'ئRea~OCCpֿ2RW^ *˓)5p!Q>^foUWcڲe0K9 xu8>|h >)dIrIѽo?lSh y[:6``O*g~c sR۲H0qppTmCRmii0 `((0- } m۴B!}<]""Uٸ'v\E.ǍBg, 57chRD\M8 EEHƑH{8vG`8#aȮ0sH(zA`H/U(.4Mb]B04M`B6IAP|8\#qJ]~c %k{@0OK2Ø0gY q8cR)PIB]w`?7Bf$3|F)0Nmތ 8wu!s„@"h͇a_ 6cp]1f*'~qwdƍnX$| C1w\ ۻp(=/%۲0ɀlyF%,SDÅpAO|´*oŞ#k&LƼ~?=R*p\sCR%x埿"s$#QDR.W0^ ܍k۰@TB4~g+kl$c$ӬH*w_rɍ(aX,4D cMḡi;L+Pjj`;y8ι >v B(BBD}è~ &|x-w S 01BdF,Z(^xNP(pj&-VTTkEA+~u %Ǵl ȑ3΂ p@COu=Pty^94 oDEC=B pï97И zz0):r KIG"(<[]]]͝;8Ct]'Tu$InݺRP@~8vϜ&u>omO|^?kgkv:<0\E !Np;'B]bgQE|4#7E`~/>WK%(Crp( EClp?ΥM@MOٶ+eIlD`"0-c~=-< @EX0-~]2,*շ +~ v86E>_wC@-;B7,h6K/6&c'C-՗A$״A۲,T)u?s1iQJl1ujADẺ)_Y)&8䏡_2FA$Ӄ_!U~x3Ƃps܈\>0abR}}C#dB)v51;v\`xxGX3 X ^//eY.IˡmۺuICCTV+ ?sP{иj(sNāGXEEG~o߁52K!ܑ#xˡ C1e}IW8 8u't>V tU,laxb,j֮S_^5r!djFl،u}~e}}=mPݷoߍAQ`3,-I wqՍ|>+gx X~O>lbSeH chO_B?z=/EidcOP? .,~!0 ϣXD? @+j?Gs&p5qD|cPEOB%;@4555MR .$eY ̟´lPǁqظc?SO|xEdk $CR$)CD ÞBӋ0޲oE $iU}c;!ӄ(INg. "2_^ B\>0fףTP@d;ib*d8Q!?;H4~rq!>'7gvpml]GQF$ǁs HRx>X8kI/Lb Ao>w"! x 5DED!ÎnX䓨7QX --my|B)`08{ ;vy]ZTtNÆ  70J`:gyF"/R*+ >?y/}L FK__R>%>hS Pх 1N<&кZ<8P0 A5="&?0&; Kw9{U1|bНv\ΡZxcrWW\ K˲fJ!q`(r0ԅre%?ẃ/_(WH&$ #ajj@R)\㊟7_݂+UĦOGR E0Ĉ'Y*oDXj8mJs);<[.EwUU\ǙsmA@z{{?C ܷȃ$jb"q7=68}?v ݋xC=pz6lַ! =LEWW\(W\Wa`S ϨC߇ʾ jx  \sq7Ţ_rTCmm-cGΑ"8csqHu 01Q_S9@1\/Ӫ1<1|xRI@KҥȜ;|@W6 :08. +* 7p\[/ ijS m&)1z[`[=_GxuP<ߑr FƸӶ*q9|d_(CåVOEѹmZ 3@@1ꫡɂs>!k|(3 JUhM# ajE(aoJi fKD/Mp'@ co|p|[;Ӈϣ琼V_s@*zWDB ³;,̆ h%L?A}!SJ#.|(9p{P  xBb)WR csʽ%9mO|h\w,{Jd8WټӧOؔW~mm m'`vu!B)1)E2Alg8Ňa,_0MzUȋS8/^2lbQ? QB!aB&o J!;_2dFQȲX*̚BS]0kd6AqM ,ʭ߉$w>wݷ6alOg*׿Ŗ?"D"~^cb[>`(S{"!U"!}O`g!0(La{sjOr8Fsn$(@p'@>8 Ţ F";$aՋի^6H0RoK $Ƌ/Ɍ1zSJ. Rh RioSJM]);X8=fd'. Z9GuNPDB=h!Fg'wKSsLF$ˆk_# vދfmS JQ \qr㤃 T9/fEw W7>ƃa \AѐZQa5лm+8=Y9Ͱ{J 4z/#k'ToL>lLV / BrriY㌆WXt܁]??|<֋F@x"DNN> ~B@ ۶'~P6t?GY!5S89R)E8s!dd-<FiE‰N8م0Bo*Da{RZ;`Ysp/aR1Mp=/=}8w~ vD!PAR76'KY3h6p= @L4M؊R"UW625-8M|pb$!v r3B+V`X{'4]?gl߶,(DIY2sPC%lgY*Z=`h/{S{Wn2[J^]0Xڲ,w ˖-k9x /cG\Uhf2myPGSdi*:gQTT IX}V_^)j:SuPm_`{v.!)Ew% > v:mۆ?\.;֞4u$L˂mY%aw0={FK@}+hp) O|(H^v$ elB!~:B+VVB.tDm𺴂%\9YNqə 4"`izGMJ5ԏ;=z3'r ã/%nCޠ I麮 w  ЫF,=/2.]i=VYY:a 뺰,kLavano;i:t]%}a6/Z4载c!+3m`/h,[ a?7qa;ߏdeDI<+^`Z\uM}0lr'TW 1x;>e4 OQUUusW^=I0`b3gƒfӟ7s&(+dx1B1m;@0s.0Dw1mZy{=gL|筈? >M`D^y v҆Ֆm<{nƌvvtp(IGt] *1Aj"d<wP;C9F2ЧP!B/!ף_F, s'x}?̙5ş|ʼL"]w܂Ƈ>9RyS7< {]alOnkmsNA7޸4a@7F4`;6ȂyֆCwMÇpF .Cts_`gUK/~|sfA)W@PlGW&JQyF6 d[UW7s "w~iPcpE AX0@ B, *pM68ŋWqVL vO4=f 2Fr9)r9H 'a}#0B@U%EPj{ţg)Ak4 p'G6 <{ۆ=4K`uÀkۘ^S{-.,sB)t^ktUe (vԋE D,K9QH9w/l?cd2ІQB 3n Yko+3J!H^Å(>!# ~,P{۴KqMP {uO_bšrF)TU۷V2$Yef] W/@2 9sA̶801sy8U* {,#v Sᓧҝ2#tlq4TLMOv@ѷ ۆn(}aW˩S&!*Ep4Muh@:˖]t. 2!^T-Cuy!E)Ҕ2۷C\y1'Ƚ JC_|o‹/-m{ea+1gL/&{ Sx{\ǰP,X(􎹽aJeEn{{s-|70 "%u:r-Ch)o#3*Wnۗt巶Ɓ?Gu(5rJXq5/E # X԰n&t9"B='YPs±2Yht]GP@>"UWtKS(6B8:Ie>}ڽ׽K#a$ ӄlYNy⮋B>P[.mtRj8T췷w`AFF){yp#\q%BBC 6B%U!B NFSkV, BBPR vmxgmEvPouӟ@$y0?5t?P?t]G(Bf (-m僧!` ;.w1 „ N5,C&m!SU.*]5+.FQ}XD6ޛ&dEyJeYF< BB\UUه?iY^^(b̙0j.q̷_&>}8 {wy >˴``CӼauGc ɢ<P'kE@+@+՟#y[Yeqџ#H&AeYF2 vJțo~9+6֋~s2+'_y>p+_'ys'29}EQ@!RJ"!P(%tB)bt ۓ.f?͢7mm?Dq̘1 dhu[nQO"910u:h g ߉ chh;w jEG`$Smt$IB,PQ1>"oXI%K-QGgs9r9 +WGSS$qUUJgPȓtxpk,˛~ "xE57 #so[`Y,=hy #Ȝ<|>N??NA1 %rdhG8d( drн=/(rIx$Amm-6o #@+*D(|Ǜo: s毽o{s$If@# L@. ~USj穟x;Z[}9SQj{Z+ZGIw h}c=LHo=~&,yIDAT̬]Zd9QEH[F JMy~CD!ѻPDBU)pgI 储VW^heDt{pPX DC4hz=v;\.6mtul-/FQ6(Au u;1NgwР!^BlWLHwQhBO$y) 2;:O$EG!РeN<+^RGo>Y!]9S.}~\HRyF"'8H'W(1 #3:l4{L- 7o rR$iokåӦ `0v=M)<^Pi]T O_tr-ɰVuZF +BN+L.geK@JdD`d ڊ~}9z~oAa7_܌x͟C!8bc455e;vѢE0(.*nM&z=#7?.d2 5H$P A3ګ[\ r̀t.)XmƻTZHPh/2p. X ` ,Lr2 SŷNr6 kK) P:|:ᬊ# (˫Q6 J)Gy%(>cKgٵ?$I ;8WC`(h8D<A;l{eiI&N'OE 7vUT(߿_bɤWG^2PҞNǀ6 [zNYk+h"p * }W l`08P*od>In\ xFF7lu@~8~;>~l/Җ͸|j.Vƒ1r1 տ~ "ch|,! ! )ni}{zit:l4eݎ 'q`ӦM`t:p&IfYVڷwnZ_b\sL#Ji2Bz= U@8K$L}&;d;uZ\T!0U'F=S?g=r9Ch{os,  G:qWqx}9gJAĬu B`Jɳ0ngK#N 3fOuwuIV+<M6˕sBqw@dW%QD(xCC1RBM0Jz4E0}H0 G!S ȯd7@ŝk7:ǁMCj06>{810#EBS =猽}1lRb^x> ĢΫa(Du8~ϟ{Bئ¹x*+k9҉SsRT?4h C^z Wn|>iyݻcQ 䢢"̘1^8m۶+K.A"G2" #n-_;C B(^C5"( 0ͪFQHg4Ȅ> {tqXi?Oa'aPzrߖu!S6t|zxQȬ==B((f~ |E6?v"4-zl0 ^W_}y?&dYŧ~ K8#TP(_<ほEEEw8`2cl\V'F|9p?<}WTc#08sH9ppλ~r!PX˞yKGyUzw~YXwR(ר{˰MA;;zǐH$ *?"AÏnhgzjSLUι.455aY! (zO媪*~| U-iJ4 I/^toҽ}#-CO 7|פxE5RDcc/(@ՖGp"4zzۋ`(D"x2   ْ,lٲu,+]>ۍiӧn;k7|tCCՅA3jDңt(,DØWb} "!7$ pj U,-T;`F#lyySN筭uΔ l۶ /ƴiHExd*U5jP(3d,& |@ @<G2@,&xrT2)-[oEѨ0dP7xϗR>p94P$DQݿEӧ'Nvwu `PD&d8L?г͚nG6bY,^ ;n@0EP'IыEGQH%p\0, o8)De(n9Jv NEE"Cl6X 3f}8H&h|͛okkkk씴^myy(RS[ ~  `hhmm8i"U\\L_lO8tcVf!//v; a˖`J@QHi vHw@+( :T5晗A_RIVRfr8QDF}>lqTDx^ 9gΜ{W^s֭",fYX,*\ z璯oظq#L>x^pG$2"IuͲe4K$kj!O yyyJZK+ UKTG'}̐$!ҤJLNa@ s-/t--qdDz,iAPpqU qc1UsbÃ>e޽ޮ.(aeYltr!㩧ʔ|@mɤӔ(r,[Fܱc۷?jf3, V+l6lVkv htZ3ZGLB@k G +YR_#ˌh]5rOmW$ BF(;{65ы<8Wwfڵkﯮnٺu0RB,V+PYYv\y_ 6@ @i(I&$NQ3fPn_rÇeYvddR٬@բA-М\+0"hgH9k-e|l9Ymؓ$ϝkHJ(򉚚ǯXTwWDSSlϏ *k֖j!`IZ (kSɤ7K0S *f&&LF#z=X"8BrҖrg$Y"*>)^̍ʑH +Y>SOg4ܾߓ6 0qD'JMoذ> x$ɐL&CR3gΤR޺A2[àà*h4d2h0`0d+tK;*M,MiY5%MIu'3*5,-ϯwzzzb 3 #zl2,,Dii)***Y+f ׫XLd2dfu5]3{6sǎwqk*F0vmN#eYPfYv@An>!"ȲДX̼( U=4uMIHǯCzf_î]bggR0N Fl4aZt:1ydbƍ_ϕoCf͂UvB! "LdiJjSRBqWr,Isu:9 A:.- ;nԉ2#Kk{EQ}oҥR!3:tYnGAAƌ'xS&ˆ qFqeYΆT2IID2{zܹTCCCW[oaEH)EYMԩm}WfNBJԜN&@$C7pI'RfLђ8^MOt:Q^^"K 1P8],% ƤZ@rk٩'7/'^Nk!^y F7p۾LDL &@#Jx @`Ahn0qI'.=IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVclass.png.svn-base0000444000175000017500000000055711362261067024255 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxڝ E3H?;tGp (F8?=n ?,>%,N!s*B;*BpE MT&#HfAkCs ϴaM0UȂu@ o+d“+pD*2ͧ$M?ALzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKJHK2I632J4K0HHIL1HML45KM jIENDB`qdevelop-v0.28/resources/images/.svn/text-base/editclear.png.svn-base0000444000175000017500000000042511362261067024645 0ustar jlbrdjlbrdPNG  IHDR1_gAMA abKGD oFFsmT* pHYs  tIME "}IDATx= `g;ys ZXX8,[̻ʌڠR&oM{\ѼAhv A4 C>zWl\gxOKfd$3.ºc!ݐ LS~IENDB`qdevelop-v0.28/resources/images/.svn/text-base/hide2.png.svn-base0000444000175000017500000000024711362261067023706 0ustar jlbrdjlbrdPNG  IHDR 1ctIME(cj pHYs  gAMA a6IDATxc| ktbb3 ݍ2cn)IENDB`qdevelop-v0.28/resources/images/.svn/text-base/hide1.png.svn-base0000444000175000017500000000024711362261067023705 0ustar jlbrdjlbrdPNG  IHDR xD tIMEʓ ʽF wsON L9O^ˉ2 S`y]\9|4?{R(ro'O.ډaFr'sہ'<O,7sؘy%rsͮ3h8 L bRA]r)/k0L`0Cm(ROR0ٍ}TRXEbGj]%3(8kmc,&ϯ]erwkNn}L!/#$rztUHESN{]"}jmlͭyf.r"n)_[lzf6,]:qLE#;Zi͍țfwu4dW89 Ӄʒ_SLTtRdOJN@ROMnԮcX 3A8kHfObo)/^Ivr"a+ 6{F8O&fY/qBDs=("vܓu!rB3;슰ݹAz9G[F"?ņ{%X뼲"nMMA-U&^L[,V,v]xk@l!S383VҜĮ L;uCVTIZ{^Aۧvn$ф60,Fua?#;nf]/gMp"{Vb x FM:ys'j]U!wլ.fv :)9$caq8lho>Zwp0FrDÕ_8b#W9OZFzr^zVLy?wFؼ(8<J8 9`@uaUjTLjĆ^rg  >=k۷ N&jOI .re fPGbPz5ka_B$d&w{+wc9F Y)(]v.LIX^Ho'D_RrHcK]ƖM剸W2HO-]qiY 5qI+kIG&9*n8`q 7&}n>)D 2#wJa('qqE{ 7`7h_nnm/DʞNX0!=Fr'[+[+lc)<7H1z7:Wxޭnr9ژnj4&Vn4ՄOܽվJf dDF`ZY1^\Z1! (34L%wTΥRghnJ'g&BULf)xލnŎڌߙ F <1dTT<ͪ>VZjӾm:[;Wz7mʬ=3Ӏrn:bxf{7+i0WڤW dRf/ȝ ud,u_TY}| `D5-#Rvv]8f'AT=l+gx;XANz̀ͭ ɏ(C `e@/WreGHO'4h_jbff++ 6jn n{;[.Ud h{e޹vM9 kt{ ZF2@`nRU8`Il&-ڍY9BWtY~/" ݾhW{׾&C4/ dK;/<XPfw]Y+[Ŷ.'Onǘ9lgI}aQ7NM6_}q U2ioQ!7C ޭ*sxu2:xEYd:20W:9wd@(:Uceš""\=J5M#a/'2ްgc7*b NEP] FV}5_f\sg'<1'C޵rrL[=916=KEfi8RjA=c/v/j_lܻk_8Fb+`97LZc{ssݵ3CvN틫Իc/w̪nuԾ پY?P$Ujp6j0vV}zѫ#adcmbr;smoܲv_5s/B$4zFlz7΂Eg>ڌʫ~c2fVlw׹ԶcWVa ݻm_jwoW:{}|ݯ; ^n{USfwb3sb^}nzutsIh1y_fr!R.2S;T=WGRcߍvovҞTPpB^ND!Z}8Q QĒ"h i`0pN*wA01[7L 0f:{C 5 C h2/[._nj2G@qܯBbL1x~AEC` J۴pE"Q$KS8N8?b;t DQ4cwxоFP.gk0G"VKBbO; 3ALt-^-B'5~YIS)LWYx`\^s8NHs`ުiyh6OvATH۟\EB;xzGhAN=Jٌ(AN`I)yPEY7d C 0!r0{Nx {##$JynT[1)PGA- b1ʜbrZL@6:c"{mTMi",ry^|ٍ(N$$2"(F~B#9KRkhE1w!iqlhoˈycNq F.w\rb1ߍE.zHD2&%@N}v{"|J(.1!{Ic5&PiZV0E7ۂ4AV~?CXlIOrp8fpNBEKNd|NK_g&l(b_(K!x4{|6J=i/e i:)dJ# .y*(Wy>RcF6-* 3^`,;WL>Ox eA9#bDR^h|CȘu^LBx',H^؆ȇDAYwx**MF(sրO*$DEQ<4. q *ʁ(~%9_߯P Oazr&GWas6֧8|$LP0d f)2U$n8 GE/V ~1dߘP`0i&xNPViLH#*Öt@Y(q՚dCLU'Y 8 'qIi NJ#) Ky./ӇC*(2Y*DNߧY)3LP6/j`F2Ӥ`ZMFe,4D\#J3G'M|l߸xPتY+?ѥp&)Ybu`WFD&0^c#~RB~| 6Ъ*P Hh&PF7!퓋9ͅ'0o|~!6oaWOEe =x²\rq RPI+F9_?aY.*H+7q0٬ՉD1$i.)% #\!L2^hpx=p=O9/~<;an.̜ _ ($ YA)8)ظXHG?G}FQ0&(̎Sp$;4rxHQ|9$y1L>D.rzc4G 5/@ AB{_V.Yh ;mz<0kvPQQ;vILlZI^xwhwf6o7̸*'^FݽG{X`bѓقY4OK &f)̀Ho:|b=-sR&"8WdД1 "_ P˛)z~}9cegڟ#=GrLRpPЦQCBR3#%Rň6`:',<+zg;_8j=`/ d7H rWD{D\av qL"pRK',dP;J֓cK_zt~jbmWサqF2>ŵ濺ރG{n>/+qfYyɜ+'PdV'AqLXA{Dȥ(sĩI4l(؃#AQ +6uƓ tPpy!`m5hV)bS# ;5AqLa@}ϜsB>l1Pbg-r+ EwyC,&`U$R}0j9=$- Q?lx({OO"o/o}}XXc8YG333gig7+I<3iii=x(6q24gZgnT-r?Z9}x8Meխ9 - lsطXbA WNñ3d,FM" 7]]Čj̎?:H&Э-5,^Ze}0uH$ĉj9Ԅ+&9,:M8п1E si$:gS1[M.b$殱hj!ibM&tWIp_Y4bfFdK# R;Ĝ < {{}L$n\'#`]jCOMf-k*U+I|w;+41AwhyE i)H!yG)"#x3rfcN 2`rv!& ̶[)Zu\[5!ba8E9ArBU9UE:jzu@LBDĎR/zS.5=,nHX3`4|vYi/=ީlc!zQ ~vdѻ.}qlGZ ĀU;l ~XPH25~[ڵ| @&88X 2N%u<iOQRʒzšLGLa6GgCԖN+[pAJ;Ji2}KFʹjKEpL$U(@L8@0\@O9Kc 5Jpc-;ͥ)eVFqbLX @<|[^hMf$L99f%e*}ïchh% N)&8€8Ȧ:PA 7ȺHʼ;oW6:䕒֥_v?~PeHӲx J$$iB*^FI Yݏ,,'LChc!f$:hma8Ch`+LgȄS0kLJD Lb֔mh&j#Dź Ԍ$DE%ԫtj6 RS Ia6d@'KjD2wFczeiFY`4>iO@:[I҄8n;I4l>cf$jDGhTN*} B {,gjO'`9x_V\sg`? ⣟k<8Ç;`lp0$khx|X])Ŷl~TmͭV*wG;ñ$A iBVq@@Y&$(p İEKZxIRqgK\f)lA]#QIXtw?xhwG8303(8Wcrj8{GYtԡωcT{)ӬTG5JFEa'pE%WQ26 fy~?kTH.M=M0ri>|t8W/%SUfʉf<[O2SÂ}+tTGk+GR*SM@aʥ'7s;%$7,\w<@DAkh[*o|̽oϽI?9:ITn|B]˖3,A~V/Z)LJ4 Nl*u{ز,;M4*q֨1"E`dZ[=IeȨȢp4Hҭt&Ikp0MP)`@(Wx" \Hj. zZFK(d+o& D8m̝ƨֳP xٵ uа E}d9D`KlfQo~cw=t(:Y~e-3+gtp@3'$./#-2 6EםwhK# gsI’tm QJTub Y3& pYspp!:}~Y)˪2{C\Z@9ExQ6_NGGtFu#9Peu VhZe~imz?fg"Q\>5:\⅙ȴ:]wг X3C[N |-a` G653#rSg,Pɗ9OH.ްBJ4&Ei`;(ySC TRCIGHk>VyuTGFJJ|C$ӂC3 e[ԯH^jӤ9N!lz˵Q{~gH(:_ΛxKoʯ݂Aw#;3VG*s˾ȓ~dn_o:S! Xgzk+u~9U*U*IH_g8;@i6EWCۃS=cXJ( bfPM Cpd *G Sel13I cwQk,%9F̮A̜Gxe eřEuͿf̑$>52}>ٷӽoJ+3XgV)>:n̔Ǜʩ]}UM*%ɘyLJ)fMKUW E jEQ u1C"L HL)2"S~;d$V928Wbd\BcN'߳ 8c /C~緋(,cayuG[s_(*@"~hgn80ƺ,x(Ãw@x׾}b'z3lkrER]"nYkf !$Q:Os 43#ӞBP!n#/2, 7S+{Z8Zm aA.lZFY0/MZ̄ln7L:2vmO9rY;$/1m\e_y#`X) bLAa2SYl,Mk-Kgʿ{4ZQ dS8$!&3uF(pit!T!nL+ӿlQ @LvȤb&0O$*-MR(4F2hɓrkѶu0Z)Xni`̦J;J3a6A_TR&h/d>7d9ʹ|`4_Ь};(qRbpO˥إ֊RǨ-]9wꤖy>hTljʥt9QVIcxY!rœe!xU`H\Ĥp8ҥ8ʀ1#210չ`}yS HGL32ֶ/f n&b7sR`YVs<>,aJ)>nf@7+ r.8S/Aw(z2ʎ?:f=)6l8HjR6(%0L>+i駇Ol*߸t~}|Q=}6-IE%A!EDšE63Jsi(13Xc9Ʀvc@w֦#->M~/\8G,pZI7CEOv4m V)!JpNS/^̿.l?+W*TkJ,YzIixDęZZ.#FgJp6x̩c{L+_3W4˟9)Rs_{}k("K ZkʌpsO/®Q6K<-*ү^}l .ֲ>}ռl#B" f3ͩ֋.31f(pI,c$q46}rwzF} V8&eBƚZrV%Asnѡ IO9_~ũ'zL睻z81Ngϼ2LsxqN j});>|!\7o`~Y2 ,ށAaz.o3m\(/|S_t=3U6+,>{fn nMrFMЩevS5aZ~1:;ـ3欪 k4r^{ $o1n?>f3gL5ߖ*4EExwz 4ޒR014yUZZ~>y\p$q+FTQ{OXp6sE?tͅ 2V˗?Rz{FR$w 3R*%%*?/^y8QZu&JN%o=S[ L11g\!XX@.Dhwx8Mx-@)cX V3<_r͡]u'ʟmʦ'zV]٨0ljaХ&!9l(7[XIU?pasϿ婘YY_q``jm\Q5gҫCs,;⇯[(]݄>*ᘇ2=g /\x0јGY`>՚{V/GYH j|<=|.7}sW"Xe̵yNR8|,޶DӄxRh@ZMhbEKq16Uv}J)ۇg%1;s@Qͣw#lGTˤTsX=+$[h \BOWЋs ͖K1@8{,DxCssH1K!w]^srʘjTmpقSSgóMFD7PsR f{z2>D=q[©g3KD B36МvJS@>S75U+ϭ㙾fs~]R:^W Q ^]A$ Cu@uH8qPmy7R[Yϵ?}SˋUOc%SX/oFXucƔL+0l 8ܧ FDž䬽f#fHOr^7.~9C|³U"*зcw[s <P>r{)&6L_e7ccUYgJĥTv`|}zcْ5>с׷`wf7 S;G{X:!yvt}(ٵg+%1"0gO/Ɂ <_K_@212Y`T-R/g fT`'n3g?LvZ=@JJQߊegh7YX(7 ;d3xmGI}g]+:& UWyУYRR zpt9^vd#_N'^y¿TGTRA5 3?۪x7Vy Yx?+Tz,TB>ܨd8>_E8$&3S+ d0M"2~)R#n% R`8TE[׋K~7?S%&[˸G 9f/^+ryvY Yx~k?W7'];(: Fbs,I3?LRAmucey&S3Kh j9It1t{?~ar{ciDWӏ|TN4Gy ŏʥ:%Jͬln, @j2ya/WZrZtXc5=?RŹb9pboS^.\hcq6O&kq+Kuf:o|[ãCX\\NwybQxXhk䰵PI/zpTRm u?ȫ ML- fV6jyĭ{磃[DͭXHʴݱӻoV/rHĴ1d:c_Oϓb5fZk~l 321v`v5EMmq-'<9X*i^7(ϵ/|824A5͒Zg7]0?$TznhkRsqdλ4Lk?2lu 66.D?AXt@֜.C05xgZ '//85,;[ DoBQNh @!mw`yF7[S`sKF卵&5{ZX/z0a~On8bxhJjX3" @me]P3R@htR=o-:Kk"`6kw㫪T\ݝnsrst $050W6:(T^"sL;90q[AvQC&0VlhŬ,U >%I4J3,Ju嚙A=Fŗ'r Z|zﭯLa`wWfMa/.̶WYΏyOh|cƒ M};fO@wu_\oIO&ZƉiB92*b*h9` > !DgMh9G<-ϒ R1^#(IZ3BYiX>=!Q0oTNٙb+xoSՁ En[[v+$NapoW~͙TEW/ Hŧ%K?bЊ؃חb]a8+%9&U\߽6Pj/bKi1 RMYۑΟywOtl>R Gnew^m ;Ɓ;'Az߂qq@Q8~}y5U"Qt: eԸyÇVc.ȉ"` ,˸>,i|gfɍk:v^y*@dh2QͥdJ>(rጠ*~Lx8C=Gۍ{Hݺj=?h}LP߁WXzږPjMTv󭫛0 |@}}Nu7,bo-aӺi ^")Bf9PF9t OzTF^āoXo<]4wMQ?wJt{Rkk"z<﷾p`/E1b_)[SҴq*q68HT*n'Z(I( Xzv}UlY0:\%_VұHl{kKW,]=mv^6ԩ7*bk/_=}+Kw gPvz幩xGoeQR-m/2arcZ6%DvoR!d,'skB> .BwKQ0[QXAHpX~GK xt6-\4)}Tjk,Jw[*PETKj+g:Mhc6Yv~²3>պzƬεZ_܏oڸ  oTK^ܾ+g#R_k0WɄ(Qo])y"saCN6 *d] `Rsu<3+pm =[̊S]B{qԷ*"I$#BŁUm{!%ʥS˘\+fasU077~g? j}мZ%&~ r땋^~Z@9n| {rgfA}6wnE T+\±u5WW$[$'[h]=#@fʲX{~u'+xQY $O^_iSWΙG+36N`.8`~k.a⻅`${0/]/rk._KA9V7YrsɉfR CmɞREYS;2# rڹfs8hrf{h}"˟k*-o_{ϗ"^9[Wρz_~;޳1WΕ 3jwjr)ԼDR%F~)jk=-7fWy'Ea=@b#~d}PQqUsJՒVT'vmdٱgHBtBwp镥i`n' &Нf,fKNjlKC$$k.ٲ%=w;+9U!sDw99ysŭչ3,~/? P2%R+ZW-ZH*c3s_\|A- >u؝H@KU~jaU Of_T=<~#-} 9u'jlY^^zOH O 2.tK*HܷʺT8 KXb`E%NIu˒+A}+tҷ-LJKofzVՄHC_:;s8HtJ.E2؂}ھb4vJ9~,"GHBJn \8ܫ-|ȁuMWB( B_\Fkc[Mt CfIfu?*I_o[e89p;5OhW8e5+J _VU^weX(0AC%LFG@)SQe C>ExrL L\RJhB0Sk`2(5Ӧ]S烓aĬ(q!:]T 尝XQKJb+~9~0j/D82>Y"ủkV.-yt f[O~Ks9 ?QbuMh,Y]6UQm-]P. >IL8cpS{4XЮ+w~UTYTA-h^Nth`!K, S@CI_懳xV˪ʫ[cQ澕_e8%NCp)eAv=.|' lp.Rąwbę-C^l҂S C& pCiSD9e=` GD?~l/0TSvocQH #E W 0#XT)#HWVSEaN9WTd LΎ9UݼDelYjEQ|aS\;6r>Afz? VepM5V{p8n^6[tݘL)bc.m80.{gktg« |Ф)@U)e *RNWTNґ9+_dC0;u5Bb@HI8Tf1PYbJ 9ɃvI-*m2*DKto-۟3Sd Rk\Q SRE&5vՈ ^֮L1L.nyv!7R:Em0jwk2)ePٔM9ô8 2!I ;NJ6ܷG92BuoUrۦp6127?[Vd⦰&.K[ӻkݦo{5U+]䭕 8QY4,;=]0~ 8L2Ȣ<-s>RN)FDL՚^8䦘%!jo-IZvgeC~wTM$YȺ&: t c/QUCKN@&dx ?'NWS9X甔Kh*99rdpecSi #o}]bvo=*3 %[zz1 ¢%$G TJ ac4\jy3tڋ 9*I9{zL\O;u{qïvsْN520)b)>JՋ>{n.uZLߢ%A*c[`"%tO[I@5m%t<~W#K?7u]soS*j`藘UKL,nl)Bx܅,Ͱ;qciq7[/]PޘlJ:]RB>ݞ-hBWL,eulȗ~ou4fsu cƱ:CC1e)˖T.V* NRe-uf xe{[c]mQ,+20]V<\cx#+V׵Ԋ !=h\Ăp Ѿj޿oG&dUGZ`#޶2_(\]R" E%Z3c掫*׺wO⌟?dpFf{|osʴ5S1%n/^ g8S2Pg꫊ޏEo,\Nb! q,( y؃c1 Q} c^xz?ie)4,|D(__39r>|Uݹ9|}fn<VK^\+W/m/Ld\V[y#sss _Qb! #KF OfSK[_u^rl% 8mQzqn.m6 UAH7uCBz|g88yzy>hki* 28М[0?yW ^Ƹvik˯l(uw"lJ,YUMX|2H_{Ŋ,ek\v&EScżߩ "\,+ĩsr51M`X5CGw) IDAT+:2>qwfM%VzO WV$'@kXzi%[`_̈́8y\X ` ӮͪRp<>;jS JHc(XŧZFjL3\o )"ϝ9ce85m*S|_Ձ؋aLe 8Pkks^USF~]8q)fl80S=jI+]?vF"V&֖6J[vgj;k&,2Xl:U^e\e._8ϯW0xR^h~?I)oSRPqܾm3]g#I=_y^2+{$ZRw!ʣ?./k^uugmKZUZU-yYZķ¬ůX"3Oڡhņ*ߨ~=|Ty[|=d"Tr]K{1(jEmWd^q"T7XLB9!O5ʊC-ul 1UV!r%0xrEEj2KBaQ){2F̫[^{7j!{Jg_pnz}emꖝborVpc37]хkR}mgUtG9B`ZPI$sq65[^%/S 24{63A JTPG'(/=cWwK !ԗA@zRDdpuЯMPEK:̓SG:LX@A(F0qan|#[ Vê.ќV|=ʌ4JG >VYB}‰#)BU͢te{*V+pЫ5VWC+q MEG&::y:|=Diam Uvd"[Mfpth)d9~'n9\_Ojo6g3\re]p .p]$S^ɗnC/Ҿ8Z!B|4s..E¨Z彲M@^Kq+!{>c 5,|}|ys `M !V#k-8YL! :G'O(k̪Js:DZ-P$d0WVXCPW[1.}j/p؛M CDmrq+ Cv{X~HȖ\&%t,pWJZ\^[ߢU$2`sSϝ: fVjB+~c/P*5}<%4v$+EoD$0 z%$\f6g*+*ٱ}M:x0y?̪+cS'ǭ˸J,@].ty,wqmHG7 ]f~`˷ Ö9dD +^(UNd ycn<{~.E`çOO]ƥCqy~uH~ɲ4֫Vշi~+ʙkrW. !s?3A4[ƚ$(DAx1[z˯PȎ}Kٱ]šyhO9?s[KceVV+#Xac'OWZBD7Ž<3[fV%p1фghjzPQ$c>T[v2Tiԉ/\PYY_vo W%[粯xoƕ!.ܫ1PS^9S&P9ztfdt>[?2y-S?:y|\Ye%Qg|r^f`t~+ա"˓"<6z˟5^DS~dD-E4RG5jnvou|4=AƔ!_Qjg0ÐKGHrt[0$z[k-qKq e ߱EWPĖGٹ}UK{sG(%^T^TEum.u'XP:A)Uxv*-XO<ƇR!BugpIvb}H? 3i6'h\"IJ]Fv˯네Aj?s_YÏmNW)xB7,+ݱՖo>h\Y_ =vE=;M/h+V5 ͎F DDq: HEH=3JDm(V506|횞 xi;MKKRU;_qCjOSbT''_1s({wB>C(,3mpcW86zc_uMKnxv=?ݸ۹wΰ?T7c&w2Ex`گ CI?@lRsgb70P\4x ̲%OfH(~*o4`v:.mݰj?s;>>T\+nhҶIRŭ&0>NJ2B/Y+!{A9 :\٣;*mD­Yn\OfTئeI]PH` ϑZ !Eyͺ3;:slȳ,>WFiBA9A |ז{дf 30)B~=cHTe;olYnjsGg*tWm~5C#dgS'+c˨2淟a94_ fXyhA*c_ DmJXwGXuYbN2dOlԦ7}l}>2E ZmiIrHo|*Ee)ᬑ2+[WSHO״f3 0tejf|ztu0g/Nϡ05PJ*juwiwYfవ_P<:8Q)SWgc-imc'VIe]h}m;Sb 9,%sCt+n/gLBBD,v:nȐ)qrѭS@QUA Eu{{ nASVzD"qQpExc6EZxj0j}P46>樅V(؁sx*vYՑb x RUY^f55SL3.S"fvnGqX[쪿%6 Q5@87 s*f +8ۼ^E],B0 6~ 0C}]vwbو.ja0B*aFkz si/Uf<-Ip.\EւE- |2n.U<$x ɸhUԫrI׆CT*P}NW6SdwWt䮓%`R&%Y ^^DSe% )HD&o'f~(k㐍(xG!웚p2܅y62 ̞lb131 פH&"éxɊWl(Glh%DH@F~C^S7clB툓"(͑PA!LIп?_)qCt (IaNa8YlGa]* ]"'íXtX`u0eH S۶@C̷5=k؛5计{Cm 3k:h]'nQ4"n=*Ҧ5+">.+6 W% ?qɇYiD*1?IeOYz # E7! ($)` uc'EuU_H!U\f%HQME;)QK Tfy 0{Oe\Y jTB Shk@()E89r5yl*=[n7z_hIt5dʄ"eupx뢓"I[)W}3#C d}KM;cHH A*c,'jG}IJc<ѭ6qܫJgÑ}X"S S4c L'9<)?98\xi@]#) ~3L@AԩIZ;IL? ,:})%fEA(j|`%-?(;YP[f-ESy͐"68 # ֵ, -.cɄ-,"m~l`]lm $λR9҂A*I#SEl/0ݓǎ^\WaU. c;{wkutüg+Nݭ|فi=aX2j$uS,A*8, ,9i=|+ECU })ǀbe)PՈmEVЁETj*"G m"h8BF{9I.|Lx v _Q B\06t]W悋+c "Nj" uu |իn!LL&j)8H;jEDDH[>ťI| Vkv߰78w]!gln^v3GwOko̔xܪ8Q ;]Jpv)UG>ZCe APܣ&]M-cK6/'*dsqQ(H/Kh:,nĴD.0!dH CULHO:\hcش=_,E^&B;_.( IHY"}`FZ֞Zc&%Ⱦ:ųƛ~ y̵=bD]pku~q3\"'aN߈z;S!HN/}b] CH$z(&YDVs]Vŀl05,'QVA77"eLDF$EWO/Ϸ#E Xj/see\tMbާ2#]$)t'%()$[ IDAT$9ﭯ+xv  4P#O^ʋ2iWr5#=S Z0&w9 +FïWkIUcklHE+mߕ\H#/@)nEhG}Glى=(%QD",bQ%E ^M$KB sE÷TV1QKL̦M)|(0M 50:W %aY3UUueĸ)".AU&xXXY /@#$ڐCLIT.f\@ }ob$B5t?eWu.Z2>+O)#HCÂZ@8-W}[$8jJ ҈N(*$5b{%8UjkH#y`Me"p /sC\ļ@3,,=h3; H"%[xy+pBB;褑5N$ H۾?$~ ڱV;dyCaVd%+$(`BPUF(-!8YA<=DR"tuFv|ݼL&yKes*T 2RZ'' 6H`I_X(PBűRWLNҠ$+nN WK\%{ݺT^'bR.Reb5")I"J*B88q;TAU7dN07FpD !~W gKn(+<K1?}=sNUdWA9dq"$Yed NA;_@F*PD`"K&1@MW^Wz=gd~ΧeX"*#]O%m]鶨aOs=e@Qԋӂ`=[It -D"'D 8]O&8t 2]G$ֈ U({zd$!H PC{L9r;g+蚒 E#*Bxlẻ b)KI"*Bg^Q {|oON&!6 7v/G]CH$u*UMm_;b⅙'f-HHdeȯ{ʫD\#4kQnJ5_cb>7 D*kH AVP#)6Y.ۿSiiHkUPH|&1`HI!(:pPe!HNSRYɫѴSp ^5^(0O'-!:&]nZ.X/aEKNBY]WW&JFzǧ>I$Ib&wY؀I_@`)O4i((]1q KQY1}JUce LH(DW՚?5^BYS'T)t1MK#HRII$I`A_3R1/FkL &x؞*6lz!]U|PA#RlaX7F X|8E OKJc>2tHvl\2Q&Zskc]/Yܫda0sWWT­ :R%vN4\!J/ ^8pb.T( Wr9B BW)tglAt- c V )vnDF \X/ b"ЮuХSq@ +fNc@Hl*Yq +!!$+EXI"7S8MDr@ S:rE,)XLu jj2 s}1q=7BR$\9N%k{2_FҥbYID<\Ӱ WHN2N1k1/ІEqFTus26 yE\W~ u`NEt/QDN}![#F`DUaAMY04Awa(h?z̜p>c-kcȢȐm#ITwˈh dDìc e,ha tk+EdB3K2'MDڬ8J g/8&o<2';^/.tEJpbǷЕGvyxE4Y엀&YUE]G5~u.q!UbӸ,YQp,} ֆҮNSrFu&.!״F) kmI IL[Zsq7n"ŴoX;)d֞uڑndžv#`Ȭz ٞ~0 C@Cv3abg{g៊LJqڽNP}S}äWAqYHYPxl,FIRe4QPY .YAn8@I9qH!V :%Z9*'D@/`W Qt 5? y$B *F9- ׭v#YL$!zXHY24R ŮUg#,SlX$mE*;5:cG_"ii׫%if?i񉓹\cl$Nr %5!`|hg=;s=e046<鳟ϐOW`!`lh0Ǡ\wBx>;,cfq1 O6*G)CןhU }]r eDbҢ6`0>v+g`03'ąS<>48>48>Sͪ _dXە:^Yċ\wco& VI~& 0c|lA12+b >V] b>>WHY|3kdIf>H({0Jx|W;)A 1?6063EF,if~c¶`{|KlLJvd{}>`DmbK5 & jCp^B$HFџEH[QvR 3HVRַFT/R1Gmqo $p٫.jdqB($oq\&1C/砍0=/6*r,_o-C i8_7e(sVYg b1 xŻwhgf1>S,cY-3>sbl({ Enߜ4n/tz7ג H?4Mb1KUT 9#Ӈ9zGDlǜ#s Fb. RG/ۙߑSp嗃p)$7f< )CU0qpXxhlGZvKB{W Q51~,k\]')M'bZBŪhU0ٮuC;љ^71@?۵nbxGp= JgI 2T{)*g6" ;drU fta^2P5=. @{oDP&t `iS)"&TKV=+Co4ɮPu$M , R/Hf#EVuܕH1F`۟i0+Ȼv)Dmaʅ,ダՌaͭ 916 [71Hes!ƞsH6nbAd{l u;u3*Ÿ$Oe+ Ԅgָ|ہykBaDDB"]VB1du]wٮ ?O>!&v ߈ŝ fv(iOwFeu{YdG%A C'Fd3d1-p,n܀Y(g*{ 'f E?yX: I}װtr/`󟳹"ݖk`WxJ"%ժ[ԝm܅@!`f9G"<9z\&=)k1{B`u.w$ FMLY`lqVÅL/U~{%uX>ԣJ:6f4TJwNй0D*.@D 1q,UEqb {%:0a^s+JRQ$Ltm'KHq*GD9IЙsu3r벭&['s#2ᘌg)6$)&djMn<)Aщ8rtkOfFuضmS?^RwkM@\B^P}DoUptnVdGL*U]RJ+Kvk6'X5(vBE}9tLN.^[pp> ?J46gI]=!QRZ/$g!*QLr#3J^ ]u\:=g+f_:1׬0;ujNgmna=]*0!N}{<,ۛdp`p3BueضlzC`DZv{l1s6Dcg &'ƶŐ8ۺ><6A77ۺabt;qIM$&ƶ!ګF$19l'Nd[9FLb)kMzlfbd6q=P?I00w[s}+E^fQKbط=5 mE$gBl M*'ŏ r Eh1?yȪl->8A^>J9yG/,g߈ $UmZįWs-A#82!ɾeLaV2rdnV< {^XkH"3a" l2%l뀐Q] wD#6V~ʭW >(OaU"d[㞖&I66(.ycσ.c\?&vrNhe.("XBhZ BTKHtJ5-+FNh-+H# G\j!Pg^&`ը)Ւ }KIk)yE$Q+Hb%tVl'$HҪa'),ʖa?^,z,P("y i$'TX FR 520 X4Q0LIredReb6<&?lDzmvxr6r`xb]ibldž}Od;7@f;ܿMG;}O8LUAy]NPR(j%?2 ,܉0FXvRP_f)Ư wdeEU"9Lde-)^ *#S58inB+gHejL̓H; nՍ5s'7m;0Ap?)+DQh"bfwu_kS!dQM1=.&A >e˔Qq(!E\@A']Qc32w$s&Ǝgۚ2\(5ӱD{&ӱ>e;68oν']cg&:×XoW'; _spcJ
/Gaiˡuѫ/Fy}Y `8ٿfn6De7 UG0pǛ7}qKwdg}߰vCg~ovak>޷ݭs燃BKR#׮]\MOA͓L; ߼I IDATySW>Ѝ2`,j[f[Tz-Ar\bnk?%m{z⚊(MY{[xRh@mu;oџFs ՕB (%>Q[]ܱtm0@ܺȋ(G0YC,ڢ- 7*!%#}1KsۼeͲ5K0|KV3e89sq 7\[]u6|DY+[6ܲG1lH)m8;>X=ޘoPJ몫ykd-^@ +IԼyS}wYU:,(Cfz/6T-'KKx[6usk [5nKh"-z.͏ K٢_(dbLI:|KC{ղ <4x<2ZWS%Tkn@ߚelmei A3JZR9ڬ{G]MԕMS;YAIRF+aօYeS-7tR>K{]Bf]P)%elJߢ0H)e"==(I>O;" ]orv-C#O' 8tGI b0@~|ݷ>}ښ[np>3[ 侭&okާ'nS= Zu-j%/gppM}~''K c'?W}?_ gTC»~“?AÏ~S"X%%y_|q Nd-b3x; I?x#_yPlC ~w8CڇDh]y^f0?edKnM]zёSGm?,ῠ?Hc̅gqtc ?*(,Z? kV>;C3tۍg >-C 22kߺ|:>[֭]f=Jqq?I,Fo8xhl󖽼llH/B`kW<޷99|5k+%g@@s!h1wMLXk_!V]g. Wns3PZho<ӱAtlL +a̵*u2Y/E٥332[ݘؘvCxOk22n`!ӱ<+ӱS$TI+fiLoX4P&bT69bx~ 5Ksm5U c m\2)tK~U;yA޻onHUHvK`ׁ߲+m0p ]Gd%Q$ JŕCc:9i4$Ƞ v{7VqXBp"?hr gVriǽ@j]HgI8Oneɣ[S8ȷUe`>s| .WMw b,ΝG-+& ڏZGrAݿ }^ TasI 䒢\1{5N5.|oy-p$ h}Aq;!w6kYsJ(AKY{JxBA/&Y/&<P qGtݷrC7 ,׬ݼ[@";nv .HRg#,2TɅ@4YOv|ym7\ZZ$:˅T[]w3ny \k[ݰvH92#Ӷ1|Čt%*w=,'IThk@?8- |-$P i-5Qqg~*]pw#yCmuek~3om[KuGd:{_^\Qvue()XHlWh-.&yku latՕ?Ŀ0߻:P)^sSPK:{;n^5fq$C aV墒$ǰ^w?<r Gxs;&} _l afÏy7VWVWvcÏei9vz煢(2A9:~kV/LtÊLի,kՃF]V9/1sm_XCGF_w:7?[.yd~[?wfO~ꍛSL'GϴmC:̍?;˿ oȴ^`rdKXg654-o= +}%0 ՔCrLMc[)_֤遯;r1/궈U3w~ ? 6C5DVHb%RB>1j<'<ΈT6Ylgo~l {ǭ#Na! }_|䉷ݼ*RnnÏ!'j0kc%-V)au4*#~?o$`B'X[{,Yw77ӶQG'/͞)Xly|u*%,Χӿox_:gNP2m'G㧲ӅnWK- 2mȴmKPdoJZXW6F`^ܹ. e_EU:Gw^wLs(eJ.Z}p/};;zH uAD`d>Scm(eEzq">؃߉:~>N9~$8؝oi/>SJԇ+rl~l_d%+o|0 M;?ڬ[nYu!*xGP XN,mz)q`q5,G9?wΈ*{js3u{-a`}V^afgVirI뮱|>9roJI,3hρc?ّbbCff8dS?>ys:  6po095z=b[TuL_<5ϟ"WČmx=Ӻ{X*Q0.աoiN퉐|.N6HΧ^CW~W0!Uy˰5Xע*YTU4/pv2duح,N% dda۽eLufWl]ٖ\!ɖJv=RBk4W^GU33t &ݐB'$E7 I%iV^t2q+,+e[g;{/w9{K0k'>ɏʻng6QJL=,cmtӝ\✦N=%@^!WkV_OW0euREwbirsG~j41BDo7|9pΒT͞8އ_e$,2N~Ggգ?:?wqv>7|@_ݞ03G,16W$xH%~2QV_[quI3Hg?=/=!$.]tf(77^>{(‰׏, ΟʱťM@}#؋IMQh^M(\"j3!"YX׿|3ko,X,hK$[o'"N1|<Ǔ d`X v$K/#0\68W|?fէ@BR~.,[?/sYy/%W8" _>ćS#^>}磏3^k#DxA;#n7g/v"N~ǣ|}2;>$4{HGnξZ|_tSvG&ق6;p+_yP⵹w??yǠTނE)ɬ?pp$"ӷؓשlP8@'k{C |"+B/×}/ݻ˪"paqO}ڵ'Oŕ2PoK=}F.a!O辻w%9YxIg=}gQ}͎;uouE2 `{e2ѧ|-TopخCm;ݺx-hZ숳鮴 F@Gܦo[9$$Fo}ҵZt-BsjZ{eډggOM-G8r<jRճE\K-->bmxEnW'Fsf/ɏh&鷠)| 1&у1b)8 E ,~?Y%OӲ/x <^WO2'~K7Ky\gIY4~,.=O}?Kpٶp<}pu=Ά tO(䐐U:1_6P)RH*,[?K+k_wÏ{Vn@ĵz?Wo` !j O=zijs<޾ʎ?{[gI(C&`BY+-JS/-, {ɂmfZK S>uK?5  &ݳdA-S9EmLKmZqڂrqbF"}V^iC?D :YHB/g>gkֿ7?K]v^|EJ1O뚥Q L'']&49dE@U~B 9n7ȁ0u'C߷=^LGbKW1{y&~#o߹}#;f/^߾kyp3mll6[͎z66JUbl*jYV:5Ga8{=#P2{Ϟ|nGb5{j=ٓϡo{ϞxJ>!99;c h.v r.`bqKc˶¯5,˩,Ә%:Y$q1#*j)"DDfZtn~Zts~{VWזo,эr|?2ZNH^㹺&DAES?[UN3KQ&˙C %,|w#> k`XF\-Q*av(d"}6t./b[ź$JZJZ_;0m1~K8i?OعKgc-FRR4saq.`B~ #,r ! h)naވ.yn˕ 2'l>3]drۤ,dV' w=L2V IF26ԋk>fg\\YxI)2-F4ClX&rzm]T"eTzVsVQB"cי6iUܿboj28ٓڶ-nn&=t'-QGbbz_B]0^]b8'^} uWLphe ^D"^uΑ,-U&Dj"(oEґcaݷx if#g28٩lM|XMBB# c Iw)\F$7"wg㴶YK8f2Bɛ^TsjDT syq.l{1 2_e8iz:qݵiȤ9* +*WZBas^K\H8_?w"ma}Id۾ó-)AD*.L=r=8}x2J0_pphω7,a+e[v)`gO.` In̒} ~}1c@49J=-Cڥ- /۪҆08~vV0empyu*4b!fI2,%v? { qgG 8rcۦN&+N[237:8fs0 Lh"WlIp ֮ߠ۴b_Are,YxmY%TtsW]ZJt =4!m{! |H(KzWl~4q!ڶ\(>m7o+N>*}j'0@AJ ]Eer<\r6y%H('(-K9_b*Wa YE1䄎Q >쬳ۆDK>^(WJ_+ٯ6υ'!=%kb.CaH&}j,d^qgʓh(ʄҪO|+D8A&@vijV @d0Xzq锪&M Sp?5AYpCB pkp6 ˴n P+m_-B !#>RBq5_MfB]Cŝ:vP8ȯY KCf*?m¬ŏ$]Vm.\:oh!TUd$'K @|f ah/^zrjA&C7YK>;-N3 v lʢEx"dCdim^iG)X4 D,IV0$-K`U;2"!IhFq-F^)?}vߪE`âɪbhB5>!ON C[HHN+7!ϙOM2cDfA5P^Sk%Nt"hqC`= 3e3f(>ŒaE5+*+KNH*[ʧb[ `n>Fz; ' ΐ Nf ,t>'\ZNRGHVW7B "V^󨄓&.0aVSP:,>.7~ϵɝ߿ IDAToea`vpȃZުul!\7HqEm-j 6)753knI>&咔CBM+uaG'~EL٬0irSǷ;Ƕ=~:C0.3F !x3$M./>{* ^[ܗ[|/#{Jk~ *Q9\{Hr|_vvbWKGчxK׶ݱÑV\5R6R/Tp:Z"<8I$޾ pXLϞnu>*>\ʨ]WJVawKq,0{`"ѾQ`'yw+IsYaյlu`! 4im̃⑩d$:y2#8OfT/XYT~wj~xp)e3{.oqHRJ>qa`\" cZ5;&RxpU_qiZQT~r1:Rez&BWLXa\.v*74E0nC%*PN ؔƷ!#,3 UX` ױ. %UGÊcݡ S95R6 [,RpmyHx/$0BJ*eWѪSsmb53>ND{2٨DдbFWM޹ c˕L&!zG^jCS)5U ʼ@15!NW a]&);EK qAaDMYc:?z#)fsΡ7#D /§ :띃+@IRNac! 2H8 i ]oБ\#| nr4/qǘ$ hb+AFf;b7%5EcmQ[8sOƶɃ;}\ͺ ݬʇMiR$N$Fx,AJj" p쪢\1e΂gV-9iڰ~vFiJRjw 9߬e3Lh Z~@ TY{ nͺY3EؓaB,% l@-kXC :ֲ t035ڃe0hF$> Lru?Mvl^[bCgS g$GH[ZWX&-)6@Z* 6,$huDuF,Q@pf2'33CN'|z"ϱvs. 41-9n KJGPDhL@GCg8%>=#ÖJiOE`|ڊ5ypcM4!Ϗ,E4\ەJp zHL8LόO 1oUcJI|)|2xyz؃K_* @l lX҂I+nذ9|ٱщ(DuQ_q;rk #qZx /.!d:2EZRIJ1[R;/+ iMPCLCؿW"aYik"*xG .r#C{$\Qgϼvpg/hɇ⇝_͝9hCD4w(?bjq!!ɥ7^ت»O2U#%ٹ/XsםXIN)I{Ge*Ic)o :!!6`Nm}>;/kV4^;_Ao<$B&g{*-3V|d|oSxG\骲ξ Jj$v0_Tx"!B0X3'LNlЉY&zQp t`&5OC]֋/("b@oFLfј|3tHSFVTϱ/5db&1o2O㒥aG KMAdd_D(0K A^$3* $3 k,ŋׄ!h^iT$\GgHūBr MϰU Aј|pQ;bcA85JN ipx;{HwhALjy`s N>*W D4/`JV0IV_P:*DŇP(L9乄A|.ImxhCbH8i(3;DX}Q}j,wD3˄asB‚r]} 88~L!I U6_HE˜KoDQFb@!3,fAWjvG]8dx 0IȎr→Hb~ LRlLD@Fck/5/`Zkίz;si.Ђ4W D8x:3L@Ϯ#-9y_F3$3 :X ۨc9rD"\#sGb &¬L f 2Zc38`dGn%Rzt@ ˜VHUuvbg9֤ȩ!䡅4+D;0 0T Ç'Va#ѱpcHɷ,QWPfC˦gt}K/L\76waj76?6X{[g|?"e(7)VS/g$'G뽝Y3f/j j)zojCUm ^K>.KEhتy`igFe"ƮP6\$.&Xt:~V?5v?І 4vߏ< aiy 9N* Scp?c*fPS@f1as$-`vVco+/K' `JW肕{zoƳc~<ҵw=O'4*\u+lFv̠6(0U @T NS!>JLo*[ä($/L&iD.\ⒿRN+$'h[N0{5JY8 Dn\Vj5IF@YG;pƨvZUv`?@.XKlIʕYg/2k.8] `gd`~B @8#!AHJY,%rloOlcOlWVxqqq2P> $P&(ri}1>? Ō-C$|rįC 5wLNV#c i䳊PhREInlF.tU0IbCH'*^PCJ'-8(e&2/=YD#;pe4.eс$ęYvlc*S)zͬN\ FD'kTײg-au0t}ǿ90ГsD?=߷T(BD$W~{Ym1ř{?uaekZn}p7W^x [624XSu!fD^BdKoS?.]N&1%?=Sw<='_羮w|#~ =l'҅d_),\ ?$+mJMSX.䊊*$8E- K\D`9bh  rϟ}QZefLOt)]wBv0>m̝gvc+EKArC.͊ZO0Ǿ`) xTp7 =dhQ~%"/}.ʡV;Rb]6,@ m;Ӥ6&XD4p~;.cg_xٗ?RCzϾT ?57?CDI"S/4=ks+T*͝=`L;q$j=6i^^QD9}!sfwB`F;C$Y3CSq 4tEķ4&O 4i_< }X;0`ajvt-']e/>/qcsb&"S/5&qcvb{ѩG+Rgq:cDԘ8T ]&?V(v֘iL6:;`h2%VÍD榎ǟkL?֡(ܘ:!Wnqe}5sNj84?u\CtqET8,h_?^ .~r߇߼g-,|K.0l2&6LqR K5Sah9n.EqdBO%O?okAKŞҔ`. Lٛř:ݸx`v$Jx)NBʦ 'mJjC$fbC%y!CƂ!cRjLJ_{X!" #9v:+a1!AB2?=݉|b~D20q?ݘ:WId``msg7i9? \܎+-v *~E_dlDΛɟ\1ӎRbjNyu!-ٓQC #x7?ҡzCy?}?8&.p ϬKi~H̤(go/<>LhZm /,eOGb d!]BF&ǽ~~rgb3;-LP$9JcԱC7?L\;$w:V, Uq OG!GK~ęK[L|PZn G1o,.6$LBWi~O_p8(3͊}ݓ!T%˂wc~ŻX 09VBav:@2;6$"iGb+Gtv uxӿ}co?|1T`Eo|giKco;V; 1 p. aUjURL-١|=Nj7$1~h~꘾Աp4?u\C槎 3KBvO3ܹĹ)sH[GKO?㝅řp&.@PI|; Hcװ4F)Pc0ݢmI&^n9e*Ɏ!)dn;\MR)}-@yMW>; Cӿ޿.,ȕ`)-(Exm>XX^ɴ}kFqxE^޷W>Ï1KoHȋ?R. oq2'B,*ј` ͟;N,xD71v0D40qPs/x#;^nz^?l>2*w_:v0~10~(ʳm\/>nr!;CTJ#CFbcd z9@0oxoG"͈sѺޤZ>?`֦eq^bzq&o9r."J%/]%Ieݠ[mz]=A"]sAz?#B>V1xkV,yOrGc۵v#C1TtUIQc|/)sNCء$JuԬL'Q͍s/Ic,&40vkfEc>pc`W30~Y?PGTz*0cbS]sR}@н%i 2٩LctYK){*ޘrK20v nX,a= _݀߀Dsv'> FA Ia)p6#* cE IDAT$9#jsO|'>w4m>>+3x8GCWI J̀m9VYJOoY,ɜ%93dmg%a>m0HL01.Z.y} ؁,ኟqx\pWaHS,['\%F^; 2ɢϖJb#CŔY}`@x@;'|`@|rw|4 lJD˫<7 (,TrZ?ͥ?w6}:3ߢѺU\mΌO} ٩+kƇGi|fݼ }`d0#'Ɗ$m#CeՈ;`ݚ8bTWdym:svdE#,9B)h|]o,6$R4]e$?>l[>(+,{us(ꭣm4oa6 bbh-xh 6Mmj՟f|+7֗WU+gԇ~~2.(O? R[0_=~?+_{E_vzSʪ;R-s@JmB%` AEs$@|ܿf$d $<3%`2)њdZ;r\SHm*GktsRF fzp>,!(KѲ(K9IP>N\9M #R rI03e!wx2 avx xCxl [܆,E@h -pp؉_ ?JD4]g?gy[~V?̗ 1yL%F=@^U$v0'@DU;.Ae${ j` @/oWK/xBΥD,4X*~3nT[>B!,YR`w A̶"3402'{ݘDu4MЛ]j:}(@Joiwث֪ 1g1LAXZ;nL_فVVl\Iف{޼q5g$o'eAe'$w0߽oP /HKB9ෂmagIpY 鏑 P6D&fQMBqapXg2Gh?MFl!1}̓%v0_ [wcZK\ExLAs0CvQDB0@-`j8b\|zTZDЖ@g %L.~a3 Fz+RTog %s |`fF H/~P9M |4 .4V;f@ ,,pOE . +E#1sQ=~3XHHG>V(zXJX&TX ''_&@*xET0m5U'j!E(:0 ,Fy,34΋;&`m6[DW[o^9K;'hcl}x"asl}x3gI( ~ML Լz><_B3SwN_ߜY^eW͙)}eӗ﹫okZ][]^[YҬ'fHH3.FS bڸ'PZE>4}}xXw 敩V3;TՆcUܼr>{clmx"Tzbҿ6 OHD+SWkFZY][^[Z$f-wٴ ,G'Ctv6C/\7bW%$`4X|,5>fo!A LќqRYl`MexƉ%ن=\J|j^b-1A,E`ED%bǥglw؈b5 \!c#D(@ed'#.S ѝaiZ,^ݻruNܘD"7/\2_S|Ʊ>4޼2EB+gkiOpN'->m\jLmLټ2ռ2՜9?$4Ӡv͋H* uwm c$ҌbrVA(hx;7Jt8~L@}A"o{Ƞ"6ʁ(< E$#;HpеȜL6fKWi0M,D<8I9o<7-s $$W(|LqȤ (. *DvAG\`T\`[Tošʰ@Z2B34*`Otgznr<ֻw'Ob:P|㕭w\E]̙cjKvɁ|ٍ̳}41B" ٬lTcV-i{ ?H'/N;o?K q\+Ni!7Rufv۸:ձc\Xh1" Dy\}h \w/ۍSqxA*7u`e2G:'!$#rf(x ֐FkRE֏`"l+#ᆻA| ( /(EBr:#0&/xj`_\5R $CJ*2JB̥2ʂZHQ_>XV!+ a `P3_2:i$\V`H^sL @j|]x-W2~[#td R9 Py3< }U|cOt5gS}8!]HD+k^-@w7 s}h|9XRQ.GTx ՊMo"4IgfI. S+qC 76]LjkƟ*%JrZ`T4k)!vHg_z+!l.pm,BY*) ٭wv=v~\4 A\fHhH4!얼)RS˹RCYbu&zgJҪWvgIBD[܉QurS)CcxŎxD͙Cci\j}ǘ.1"UkzGgd]w9͙=A=ofՕoKTú645ԇrEK,KY2uvIez'a./!gbPfpMTmU)K- TR6tH5>jR)#>#e\ֻ'nqp(kZ:h65n5`x $+{WPSյi؎0] LE\!BKۻXA)h|r.0}y.2cx*lH9 3N yU:pa^mi7 =M;W V* e+($kKϑ8h\VLz2bY L3yEB ck1̰)!g%%Za`*ͻ-ʵiPf9Fʩ`FOgRM(*yZ}m>s.ʌ,ٽϖ;1!,DL{oꖻk S# =aXlKG N ƌ &5AL2#5L!_Z9,ϙ-*ي1і;LPeW-I6_ӻY>T2<8}<ڎ{DB~*ks;wvt//~/N\1 wXnM-ZBYX;'ޫZwO/oBT8TˎxLU4r[xf>n vr|7~%z!{qf1+@ G 2B)$jKbl-w퇎E"{óY`%nrKD0IQ!8O?B{%j^Rvл.\@²xᛗyȰ#Bh-]9MDuhT==}U RH3 1tws&ALH;pHr6X%8H~k*Za&L5 /P.}JfXXyʮ NB*gh83x dL_Fbgeup\(ō W)tf { W@@o"SҎb3}'lM(e> ٪ B)qAaiE'U0( p@*K;=sܹvYMnt^i̴6im{D-TwHP.K"ۥl80ﲍpVIg !H_Dj$} qrAp}jl<.$,XrsSASusd_͙#a&;PLbߴ47n3m3bAƈK2~`J80ï+ZbHgBO$xǡꕬƝ.OX7X= ~%̷216 |v kqZGgwGW7Sҕ};PN[M&7zi͑ U[)rrkeumuY$ 5BO_*je~g8.!UAWu2e"jGGwW+bήZQHz.V3.=[::zpO s,\Ʌ`qVp#HzzttŪ8Z-LYC)[]K7C*G]#rPuJ6VWזr>L` $W@R C@*n(:5Z_cdfVˑ7ysb(rz*{X,E +)JF!ZtLmyR@s)s=Q_<;;VMb ՘Yњ uU*T x+K7(<"7Oms6=n::)A?zsu"gK%@׷U?3Br_wx&.ZGmTRk²Q%@L@+TmQHnl_.ϼڹe!$ <}цq %hm6ac| vE-ВĴ^'5| h !%XmժJj6kzPZ%b%[(T$TjUGGr/DA&:'JIHHF}.!e&bZmm,_ ӜHi'싨8vPCA/[lo~s2I u 6mX 6 K<#_!nI{ {@AҔie 4@1[Bi#w}[5wxGGnYٰ T*ՠ TMn1*\-펜e}|1"r^G( R[ ;9Wv"*MU\8_6ZKIzVv(j!~];{-e0(w i&ر9ys+Do`ZQ"p$pk=^b$a0bf]03Cr9[r}W.N㸝OA6@N/w}]g1S-ijKPeC" EfޭfB5 wvw:لPM 34ZaVZ;{iSٛeE<}w?;-^8νBxTC 7|olw Nǿ߹%y;7,e S iLm%*YZYP4!U8$1)Y0q pI,5~2l6N>q[aIPfT"@WF;;{V+ iphTc.k濜CAX6=e:^N+.Jצ(YTD@IG!E\J@Gea8~F̪̀hɟ萞"P~&Y+`.WPMbLERhx,-PsmBR@ID$DDA-ujIKIsRuty=fksDD[FpԖѽgOȟ IDAT߹78 NoZnx+Wy;gX6[7qClvU*^˸J&E&)6aI"Vgg!`ǴF34]&Tvozj:DfEXVWzVa/ ,_WetpERVjfӮ d5J Ղq|$37Yp;mK)ĥ ##p1(蠊& ȨOWפ ,LbtaQ ߵp H~BBle]J_)\Iw۽=o~ssJAʍݽA$BLTjFkŚjn\Xܬ7a!"j576dee …uҚ{aNG'N I35m}e*6C..ԶնSX3:,aism~Q:Iw֞F-&VzjY+ҽQe\>?7Cb`|aG3l,F MB+WS=t &*:Hz*L9T`隤yZk$'>Rx#6ЎV׮~U솲4zFX_#\ Kz2k֖WodAf$Z!ņz;6]ⴋU6\Vv:0ʺ|qѻB\B?;`EtĒ'{$jqNƕhqQ,\<]@.,D?7`)b$ Z>EL[F.L$ѽ@$t\YVk]膸 \P"yGh$[!-oND$* W7iZ];4c/+fqF%K=cJiI3|W-ź ڬ`jCjٜ.PRї&VI+K7[MI\؇`fsV;ol9)59֣ŵ%e0B>Uշ5k-";8PX"$pt|-Ha{.to7t,+3;gxLq+AscM!Ƅ"M$I:c 7='18vi]}8t4V677|j3.,jumĂF b+jK|kNrwL"]9SvM-"z46A$EQa*O+pJt믁Is$7zWf3j<Ԟ1J9!* EZ@\ʘdiƷnq,Q+H=QU%x7PlvRݺ8 HX0T[hBkXl,EeR諴6i}w{3("CqGet2uL"#3N*j67VcG2sHz'Zž DFqZ,?0@c i׸ܖc"%s]х66KIBI,BI\5D, 'f%3呵K,]EJ'*]JEM#ki pI|vl8Ċ\+Ph e(#h/gC~!\Lf,.ǡ& a K6 0!Tx-ilNja8zldv_DWA5-lsyVO]]=]=P ]\wXL-4(/޽ZH8 uZع_P:O2'pg]fKOL* |0*QZ~dx^i#zr6˳|:,CdD@ً_ɇ q31ֿ̦ZB]U:;]=RwHXYmuk<´ %?MMM٦D0JM% ki_R7DIHP?%'nQUqREG4p_6Z%"p(˼ B6TQ o ŰkԩU6VqoJt6dI'f ~R}#w-NFSɲȡ ɮ<8;`F{൉9۴[.?'{i\cEΤOQ?~ LѷԪdON]&BX$z|IHa4rp} z!Bx i<2gD.` FGv>~s#lܙKF'Wz7 ߮PRPlPckRඓ@qb$EY96e\0 aeiY`-(iѧn"U9 C};l"]G(ɊXks3 e N(}$B‡)RWq^,]zn|@M.e%^M٪04c/<Aҏ^R%v+H9s vB b@$ Y W$NmNVhSɵe6JuY]YX[0HhTe}٬$y)uvvmn1a}@qRuPWf!˷+)ȓ0ښM);$unM>p)# BUsH`KSm=eF{,QKuAf'!Q"h˂"OS .5 Og xQOxH~謪 Vu$KJWOʒ̂.37vlnTk5Օo_ʳyU[F~)Z-Їv*B-0#v*vU *H-vfp -iEJY>g&Fz֧{sg~]%QD3([/1.bXEĀE}A /EǗ E`dLoHے_h0=8Cfqiy1t{$QO3ΎޞJF(]]rҹE-#bVHOg^;qdF2 B&JtQp|tQyXU]󁐮!uk Ƨ h`GTL%}2M.O54 t@]f,%E'My ±/(RPTL#lCEcbK]E&1 4ԓ*,3]qyV]ΓeRMNc4qHZ`a&ACYD@[@{FdutՑbOE/"U^%ڮW@GܣR6v;ގONNnIZ~TN.G%}ic w0aw9BG0D NA)c8nEmրY P%J U|#\(00  @ t%6Dxл5Y-͢Щ+$y=npI@DssuQXQ 9*᜔u);"ֆ̗Gmݿxd6B +5^Z!#'HkC]xQDɨ LҰ˕oGTÜŰaWɨwlAlitwvR*"uJ r.6?݉itn^nD`]b AJQ\? z2R:7ww sNAa )pRd2&tuZNʎzg{kwKE.@xHu[c O2Ц(dFcAFtͱgUD6?^2rԨM*OUV DU+rwVV-J*&"c((ʤiLsyK#aMf@0ֆ%t_P_XB8ζ:'KFw2tQo6E+x{!# QɈfmkU!>4Wm3$(TguBt:/@3]Q|mji]m>2X4FU @Ĥs%$"11`IE+QI㱝u{ZDēN5+tqs@% #\Fx'$pv`z(q0ṈZT /$nq & Hޚh ~Kѓ޲5Hbu]:5)TP\͢iUX+V u4Bu5KFra =# ۆlg76/[I_FDm$V0 4K6bRpb0Cx=! z{;ZAXԾBH^NANV0C`u:j-;A[ZCX=9^Q0PIw:Zҹyv"] c9եlꠞ-d8=Q!W3 Da xN8?E1IipPCh9ì&*+k {Ev)g!3-caȐiGii.)W!LMwp xJTU.uus ,ˁ%$*㹶DTlĽ2Ack绽 ~n}Pk-˲0ғAjض/!`:g tf ?, ݕo,`m*1#ƵG*&Ug&tB2ՒB\ ݇Z)d uw'Zm@%(ͦ"=n"tH0]n+~`(D /q6\ZWgHP89ŀ}`$=N lOss]"tE'my¢r&(=w/f2T OK3\̅XXG;i஺RD\s#Cd(/Eaֲc A؂4Vzu=8vm5iWJ/SOwg㫝Źʲn=JR9&gedYP)k rhk*,b~GcHg[sc͵B^9e6Tn\r)]A U \&RĮI9ACZ9bO[# B鞥?J'!Ocwuuu"TWϪίRt3)Ism{RdZU'cނ,g*,K@07]J œT3}ɴ5٫{ii̍67` 68-ө892mMmM/kI͍VeL5͚= EQB(EyD&S\WpќzxĨh(cW~'gcC( #14{WU(\C^ =ڧ5chk9ٙ`ɼjǥ:G:0/> jR*1.}Nb[1hvPQVLJůċM(䜊8QtLJDt,r$GD: PfGR^09RVyqĶE%{ս= j6@`UݗM[ؒː N7Q0>xs PeEAiS/A% e%E L#g`7 U&!&+5< dLiG&wE+-%2 b*pDD@WE`ѨUQ%en|AZ IDAT6A5!Ǫx~&V2ZRpOJ8MkEK@UDWi߆^X 3BOZ BQ {]tDi I@E`"䈙1bbEZu9Q8[ gDQBDm/\4b$/`sV*b#hKTv!`.JOJu6`ێrLʇ+q's4GA s#H)ũ!T*ܼ Fg@WV&@%CJJI3iP} z=ũ@WML1ċ?jՁl43!1 iz<1)P eqAX% k4$&kP] ڛ*zk1nbk^$p w*'HV{k`9FIb n6kU2݉UjeGC r4I*''''-B$ Z%0*ie?ʆL\:ҡl/ +vlUREv Yf=;G+|$ܯ]$X`{m-!wf91=ұ6ф6+@͍l.{FROnU%X(')D );sxIG(Xہ$_>@ڃ#c$fQ,߹yͬd%Nҧ^dm9q2Ҋΰ*M=vAQIg{3a*̐ǁ).}l$6O)9&Zq)Wx@V Y0R0ytȬDM!b P. tϪā.)+¥5 2vzF0b-YTR>. },1] P5Tw16P=Sbp=i^U5ܠh+׃2KZBzD) 8H 1ndNjDw)!u̯L'6[JER,[؞ H {eq&*"zEp@] UUv9f-Bo ϭqb˧; f$Icm+"[y'$!b;K"@E &0*:!o~aX8U{a|γXIKZ^ynQlUymeQgsRtWoؖ~۶Ĥr$q$vCp׀tFiotеi,d$0al- 9FY@%͊v źOJUY8$B;d@U54$\18ܶI qYVlāk7f-rG^{ @̌* CP(,uC3դa1Ѯ":Y."@u{f/°'EH0}) zee(5촨J7XPDtnEʯPO4"<^2DNUQNjr1;Z*sˁ-PF\vN3") p~Jru e=M7s,fN?ɀ!us!a N+7/5K{ ZW{,>.l9HU+/Ӌw(q} 5vA9# ATÜ@pՄҨuĔ8zIXguAV"(Lc}Е  @\I\Y42}5Gh֝[ @IS{#!puA?}1/P&26mQ~HJMv=.WvՀ<`!u͋~8@#up.NLY0Qk_ yysJnLgg{ ; 8?D` R$!dUEZ^Ð8!%FV6- K:(,,bܐ=قc_i"NݛAVz[4t+ψ/@F6 6`ѺU)E##KFٓ~ 3@S@&y @nuTaÆuAk0)0M.J (:V p+vGVC0SQsEgV? Umv%J P=S(I{T s(IxըGn) #M^GRKԄ࢒ͱ/l?{xA  RhH+`H"% 9(c'.(͍EE%j"Q꽘m$'"($vaͱ`ZZ0$ ldQ+0T: E_\9QxGa,XhXù $q.E*+huur“'+";@YUqÌH5+jXц\Z|yt9fF" ;g!e~qѶDzUBu^1+*꣈5 y(PaW\q3+7XA dFHDP+՚Z\ 2gma' 0NgY^τamR6vvK-,bl#TK^p';Z"uulI d1*8Slf"+9ҧBR~Ul,Bʁ#d0" OwOOp eɗ6=emT-8 zq*JD"[p3ЁzV;ԒVi h4  "()#V_b@`~?8E=m\(2x@E7*@oB, 3QLU=S>cfZ-Û:zHgL B@hc?c<]hdQ vcJ pm̺a48jZl?xhPszm joA(}DJPWxWxĞa2>P/*ͨ/Ұ ڮ"d< "Z*,;~&](uh:bkUO4dK{0LVj gsKf0}+ѐf]:QKs3C'$Z1tv,oAXOdVbPen'y]5q>s8%Y X>ewYkf:`` )0e7CM=8)pPZjGnWRgnli A>\":OF% 7<İ :XvzSд5ה 15T=Nť`|,-NHEmQuP$l$Xbt_ [[(֊ la(5Uiq"FF(8Z0Kuԩ6ND|2jRcXc*-E^JhqhWXMW*t_<$+pIT7li~ P.vУ!aѰ 2s+uqNjzYGيƩ܅@= )&DZ*'qAsz MBt 0B$:P6?+lAbrEki?LY]&LDtk^l8#0+ݡG/LFޭ\%vx$V=FH,¢4;P οAC2eE@1Ŝ;x`Y?M9鈫PPnQlQ 5sF|ҠĖp7nyb(kW-jD@Ʌ|'HDŽҦ]* X6БNl;pxk;px9vI({%0Oeu'"%$U `gFe3Vꬲ2f m֝pvȥkvUZAySb%;R$XbɂXb%,X%X`%XbN/[xɓ'y5seL4buoYu6nzdiή6ݲm5o/jR;v>eйΩrfԪJ"jljް+oeO^ .7J|gOO?^Y^Vw-w'YI6s1OC^~q9W]6{*~xӚLv3OYނ_Sɓ˟ZUykk_t6sU˗q5z*J9g}fncSs?4\V /ܾcg&N<,+fjaKW"zmz |˞ƾ.vNM T]!k/SSez+'ٗcۍ& Vb9cZׇ@d}ZޮX5 ]qR`y5K_qb4<=V& VbVXbyG{ҽBMɩUv2,~zM͘ZU>{ΐZ/=bIҽ?j+̆6J/KL>f9}ɉ%JM #^("zt˶0b؊cOOy5b gzfS6alLӧjljux&ި d͙=t圚K̞iӧW3Yu9+ Q^Vji_H\7{ʠ?J9,Xx@o,[6\^V5jW3s4\1o5vr۵Ne/j'!/[pM+W1o69µ۵f+9ԎɉUJ+&ګ>{}]סY-KmΚ> SA';v]n)p-]1.+S*-^hϹya\Y Zz񨰿LGY%ׯX[~cBf mgLaW޴Ƹ<ݵpݬ&+/+slxy5sf2؊cz]T޼u۠qv}֮;d޵kvmj6%G`~<,w4oΜ~ 6Ә՛i mr)ت4 ƒo'wZUK+gVϫ;( |I|mnv_Y^V`-gM5X 1]hi^OBAgN\}\914pAX*@7;vf^{i;BRL؏ۿ%/esfHuozU΁Y$Yx<[5~_قQ="~޼u0r%+زټ>BtLNmXx+͋4S`"CK7Ra7pVO4KU+umIMưݦ-^y7dzV^MKgWr8G͞&N}"m#ey;{g{۠ԪJoл,m̞@&גWɓ'ͩyv5IHx޵Xn՟ZUc*F߾z%Q!Bcv 0Oi _wӰ`,/+]p\Zu6lt 7 !^kSvO(l̕Ny$[D@BkoԌU˗ZgjU%aS1:UVjW-_H7y/ 0>l:M-aʙ6nBWR[]o M*K5~m 0)/۰ kWRnϋYi={͟V-_m vS W-+<389ϩZU~)'% ?:h5 Amy%&0\pż 7yɓ'y-5+f ${4^.O<lL13u8boi u.{!M_|iЛZUi.d]H;g_W_1,>M8{le /ZD]EK9~i4L7R`| ?Yf0l|x|N/Zb?po30"ڰx@2̋ wq޾cgO\fOV^cGc=f տKW >q眳p 7yd~xn^|l8_ټuy5sN~k(h: {SȱDpmjUe?@Kr>C#F'O4ԪJqxsy?·3b;&dJM1 J0NA2 %!abG䴍JI,Y;BmL$Ē0K,K,dJ,KK,A5gpYbޚ~|bɂػT%?rcsssS<{Gy`cw&Obɂa 2t:Ǿ9rÇ)ߜڞ TbɂζA>ޮ@ ?o>3==ծ_Ƨw}am¸1rK߿ûr;-IYՆ z*u<󝫯*,(P;owٽw}aǞ~/nu'PXXpòov0*,(7#wm_/eY`5gqz˯L1EKl{wK3ծ/Ͽ'7U^fUXPp?^woSOW~yN*_}'v=x@k]w=e͞5~O>uӿqc*y=ZUcuO{o'І ]Wbl pt,oj_Z1>?ĿJn =7 oGrq'N?v%3r q}Ww>ٟo?nغ/.f٦{43_&B>P{KOxz>Ϝw~λdanXuÏj^߼5;߻֩~/u/ |ڿ\w.e{+z''N?ofT=3?v@DU?s.]hv5}O:kvg=gEz?n3,sy<"Z=3?9P|QIDATg|T[]T?瞟ZU[u&;~~Ɵ{vd~yEfsҔsϪ<4Ynz E7z'W9,Cqǜtu7"!%%W_ü_xY/7>0cÏ /}?6ڰJ,YI[tg2O=ׯμyhom߱;پcoy?OD3yQkfYwF"UWR;bǜt<~ɧwфStg2O<ѮGM-=ˏ[y`cFʫkﹿWzzzZ㊈üs/yqahG-qmA_WbɂnͯUIPTʹg|D$~ޞW _˲#/=J, avGNK~\ܮ/vuk^ODOGDw>~)2J?}b:Xe^|jʙoư',X>鄉I>|wm\ᡬk_v7/V|;'MukDT} "n/~c/>0nE`8C)'{?'t;z2=Tv8ֻ6/V~g= ?rgTa8aO, =?m=y[5wO`O};~>YyG0n7o]o)\gϚ9߹n֚/~[_q~qƦy!'o5c'?q>nևej}'_`݂;#'Mlv*_}Krmw"(c⦟-&#d: ԰;o˯<#̪i#d2 /?=y]Ē+{O[R%L,Ē+K,YK,dJ,KK,A[[5xIENDB`qdevelop-v0.28/resources/images/.svn/text-base/error.png.svn-base0000444000175000017500000000141511362261067024042 0ustar jlbrdjlbrdPNG  IHDRasRGBbKGD pHYs  tIME k/IDAT8˅]kTW>{3d01&m%҄`T"*FiEK/J x#A O魠^AP1#&Nd3ٻS?B7˳ֻ# Fo7CN?9v(~cty:0Zd,g'BH'5X Ld}W.[__/ Bc Fr=#|j`X=:ÁbI.~ݶ BPꔄpw K.gO&}; Nn68W&ϊIK eH"&lnzAbЧIޡ~2 ԱV1SSu<ΕqKtG8XʡxdՕU}9;Y &?EKW~~iW$}"fgAB@t2zW[mP@P ƦkۭU}e| J]@ڍ#-ÌQ %}wg-17Z_Ҙ_ 5UpdY;bXa cRvyzOR[05ev٘{ȠB5DRm˻,զ]l)OF#2Aտw/^[W=T!C LeY_M<IENDB`qdevelop-v0.28/resources/images/.svn/text-base/compile.png.svn-base0000444000175000017500000000152511362261067024343 0ustar jlbrdjlbrdPNG  IHDR\tIME _ pHYsN N }gAMA aIDATxڕT=hA~s,2Nr+#`s`e: H*i,X C3 ,wZHvQ]sޛ ɃaD/#]G)8N.|n7z=cس<| ٭7CiBՎP8ƭhxRsɢHamDJd( J|g^Ȓu7w (= Y %ecx ү`^OP.r\)0t\)cW1CEqsf}ŒEydnvHR ׮\Jˆ am:^Q.MEHPE[?:f K?f8Ū7 [jꖳԋe6a;BB 6%D,Ac A(=R`cEz{ ceHchhb7\qsj[s͹ABSUq!8@3}z۞&TrA03ţY;>~( I~Vt!pp4fPn nZ~nc}1" Np8LLx**kE2[O!kߒd!ԗnOo 6zDbAI/C~xe~20}jKGP"9\iY(OTH3QlKtޭ01K?gaq  hA}@}/>?z. j(ˊۏ \SkU=.n*xU K]5wQQQS~H3RhQe3>CwWb6ী#@0:K״ "@H%|`M;y](mӋ><(y}8/|0egUYIENDB`qdevelop-v0.28/resources/images/.svn/text-base/indente.png.svn-base0000444000175000017500000000151011362261067024333 0ustar jlbrdjlbrdPNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe< PLTEȌ̧~x_BeGТڲ߳gnjʥ}kyW^ҬУ]fHy_Cʦ}ө{ܶoO컆ޭӢϩڭ{֞ᲀ淃ʕ{aDĠxȟs]qQۣċjK]轎dۤiƟt߷—z`CҨ{]oONJmMڭ|mMšyرʐۦȒjϞ}Yױ渆Р칃gIh؎pPo`tRNSsmCBIDATxb'!>/ B&A D"h@!A<@0 4Ⱋ@pa 8l&. *``cbaWa4 $\T|1 &>M'wk+.~o8t%*܏DK?R *PV60 C m"X1@@v n2fX|@p rIeOI! @p p&@LD0E4 @S5@4 @M &YcOf׍IENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgmemview.png.svn-base0000444000175000017500000000023211362261067025033 0ustar jlbrdjlbrdPNG  IHDRnbKGD]SIDATxA  ~r!Eh=8fO`aR3׃*ԃLdD0 k'IrDeo~l+N-Nwr9P+IENDB`qdevelop-v0.28/resources/images/.svn/text-base/window_nofullscreen.png.svn-base0000444000175000017500000000163711362261067027005 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<1IDATxb?-@XM{69 ~ 4 R? ~}Z@, Cݍ~b`O ߡ ~= 4?ĥ'а_ 7? FbC(@,|%@ FfFпȂ@/,^@, rGa0ϰ@1!_r6?g1G-D~@ g%P?`i _b-÷@o5ZW1Y(R@(A}Go ?k(JJϲ[Hrb}dhhG$aTE X]̵ pi<,."PYM#:bA HU1 ̯3pU#d(sxPf`c`dl(X-T {B$Eyذx5102010 s0B & (%!7CP\(ucF1/0B `NVl#Xy#43/0,A 3Pb?`X0 +Ɔ{?~3`b4_IXK?!4"8HCÙDo=@F BIENDB`qdevelop-v0.28/resources/images/.svn/text-base/qrc.png.svn-base0000444000175000017500000000247111362261067023501 0ustar jlbrdjlbrdPNG  IHDRĴl; pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?Ì33Pddd0 ;× _/Ɠ1| _@ ~/ϳl@ `,Bi.K" p4 MBxa+,>Sܹ,y 6* aFf& f16\`6(@j_`0ÿ@ ^^3! r0?|gx=ϟf`eegdd``eXL }0 XgN: ~G_~11XXX0 4n@a|-3+0\ KgqM) B `1033 @(32S0b6bxpv_ 3:cxUFOALTgҋ 3@ip2ÛS _0 "/! $pjgKA211@.FYČAKAlUPbܹ ?d`&A^d@ʊ +ee_0W g] @("ߟ>1|b``x Ͱ&aC%I>1×.1˭g$uk aȷG1 P 97'6LddHpf)lй92'CͅI' @(.4yyyo3͛ W30 s<Â8s00Lf`8papTOݛ7?T_*!Y@nz@$4Sd&@1a++XXkkKI1d00ћA}w됔ۀCff: .F]-8O}v#R P BՌ е@@A.zY@4׃ 2 0" X ϱ~jIENDB`qdevelop-v0.28/resources/images/.svn/text-base/stop.png.svn-base0000444000175000017500000000213111362261067023672 0ustar jlbrdjlbrdPNG  IHDRw=gAMA abKGD pHYs ?@"tIME ,3J`IDATxoE?;k;6P@ zIQR5"URrRA!!RKisz Tш&;OWY{;;awu'ֻ;}o<n>tӽ0g_`I& (P">&>8XiP{ev#`&zhhͫW96>qr83rivx^)C?HD) B1߸Gz.ZE #I]rt[ $H?J2D6N ,CS0}ݗ!0O^o. *$:&'+//.!σpwMU*lS *P$^"% Őwo$q 7o.IwlHtq!7vl6/~8] 'k͹2%:%۵(`l%xItiy޺xS0.0pѢEf4vK/%WgשϦfD/VR2D ARR,ُ?@ö;o"KEd 2]sӟ~ Qq8*xnf#qg?j8ЎCv4( Z -qvy_,BsN<5kw,U/ !~=ӏ\fE*JL3 L /Z=am\]S)#Vb2ͽt|\, VyS@0M Jspj\X]|(ѵLbO r +* ˽L:ށWo.? HV`r eZ!˜oй' Axom~"wm:ZKܯ ?Mx*&#@8@] @.NgnBF⏕Cv}IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVpublic_meth.png.svn-base0000444000175000017500000000050011362261067025427 0ustar jlbrdjlbrdPNG  IHDRabKGDiBը^IDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~% 1~z3MaLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK4LII430NN3HNKLL3KJ347H31L _L3IENDB`qdevelop-v0.28/resources/images/.svn/text-base/debugger.png.svn-base0000444000175000017500000000230011362261067024467 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGDC pHYs  ~tIME=!=IDATxݓmLWS*i-t8f)(-/NA;42d@ Y\nܖ{MLdfɆ[%sLA8TGPP; ɶ'7߹fMfMYyt+%3*djؾ};.L"D$;\ҥO.jI:;vphkk`0WIJNb{xl<<)))`0$iV9ًEfQ5O ,R#q,d2ى(F6fffr废=gC?mq]F#N3tMśwCkf OyZOu~?nj2<%99pUUn`*zx[sF Y%hK;i?sH@MM GvFAA 466b6x0 AI${j01}Y;d⫔ZDY]qDPaz mjq2@4*n=Z'4RX)'\B41 2ce!/% XK<ta@3HNvqbКLtjZsuq_޲S"K78b`_Q|bPUޜ./ҁdAI9A)=/. ͇t¡IENDB`qdevelop-v0.28/resources/images/.svn/text-base/configure.png.svn-base0000444000175000017500000000251411362261067024673 0ustar jlbrdjlbrdPNG  IHDR!-bKGDC pHYs  tIME5IDATx]LW`qHFs1`q\f&bev3f1:@La&& 4)_VhEJ;lم-Qܞ>sVv{`$ݳ. 0[M+Uw+V,\PZ1O"`$ˊA@UU p"tnMHJJ>/RJ}v[1_22i&,ˣe+DLLLPg4(U꺎j~w:꘰Z =Ϭ^=zT !x(+$6m[>n HPb=#YQbuioڊtQV~?=,$dKKH%NKq5MR_F Q1\sgӑtA(ŝz =%-'DR_ꨩ\(I/hmm'==q'򷥡SA(c|`_/MvV3@ϝ-aC@mEaa!v'Oܹc"NvP(^?H2k4ur|WɭFccHQsnn?t_pEvJKK)** @.LmxkVn'Py`NpյH1[Ŵ9Dۏ$&&~͆ {O__ok39Nt[-unA#&奿PPP VZ+oϛ\G2#E.C8 oġɼ,Ex) xfxRvT݁1,uA59L^ L k*UjGM5#蛛ӨЉ˲X%qȐGxu yNL|$P  Ђ/4ǖjY,@K r0\r-pLCq#> X0.0KAEN5A\ `L84\ZP|* )7T > &6Հ@d0T-)md8 X1P rV?IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprivate_meth.png.svn-base0000444000175000017500000000053311362261067025631 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըzIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW 9W "V1smLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ2zTXtSignaturex3K2NHMN121KIH54K324J2NM6L26J ՛IENDB`qdevelop-v0.28/resources/images/.svn/text-base/next.png.svn-base0000444000175000017500000000243711362261067023674 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs ,tIME 'VnIDATxڍk\E?4IhMZ[FRPQUA "*U" W b5X4mif{􇶶/3g>s93l^MlkSvnVt<~E<0"Ltd?GO/j$[CW_|fGxw*"A+A&wݞ;ٶa]Dv|\H](2^PA<=:Vd ¶6$Rpo1?-ӡr\_un@ў!Tw擃%)hJ:ܻ1ɑ5rkFKsn&웉7̄*6rψ,DZHgV:woH%%CZOGG55$Z˲s"$]ޝ|vloRkŭ5Q,j!9AeH'$J),R P>0S*0R VAAQ:X)X0餵L27L27sdZa9"{`DtM{<A=z@QU46^\?]ifexa4 G)>OWvEg1f \\!* $z׼ڣjg~Vo_hEibҝ-Ss&2Ik81O&8g6לry&֥˸rYM\&MsE*%84VY'5ydž y*dQ01d0[K?"MBgge:YJT7ΒHwb$z'u6G7ؽ 6.Ϩ[&g{\~g܃"f(Sf~4W@_~)~嗔'XYwWYn_)核X8cs|s$] {j'm^@DсUA9YJiq{c@i]&OMQMCu?bUTE~ާkA 5kL>'K`z`G} "f0Ÿ006@X} #[n{OQ=z  b}sYf~O"zUUj mmvnoGFEQ|m nl[~w<>xЙpaVZTePmx8\G]m\nΙ7w_>yhᑙȽEA] em:T BdZvnsf~amOGIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVpublic_slot.png.svn-base0000444000175000017500000000051111362261067025455 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըgIDATxc`Q?ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~%<&(gxl aE7LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex35L3546IKIN17663L50I43502547J53Gf%IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVglobal_meth.png.svn-base0000444000175000017500000000052611362261067025421 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըtIDATxc`0>@P!5@3a.ϟ0& fdL!X5?cdĀ1f|`f42_ Z3b8N_)~% 1~% b=]XLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK442K6320NMH6J2H202M36L107LRe:IENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgvar.png.svn-base0000444000175000017500000000021511362261067024153 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըBIDATxc``PL8E%D+`rTu+d : Bޥ(0kIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprivate_slot.png.svn-base0000444000175000017500000000054411362261067025657 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxc`0>RB5byfTBicr kFU=x @N #kg_a0L3.p5#)DW k"ʯHjpΆ!ltLzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK4HHM23JM5704MJK1K23NIM5L3NN2& lDhIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVglobal_var.png.svn-base0000444000175000017500000000047111362261067025253 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըWIDATxc`0>@P!5 < E^f0& fdL!X5o)KY3Y0L30Lta+LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexK6J43N162OMLN1503MNNH20475I3145lWIENDB`qdevelop-v0.28/resources/images/.svn/text-base/designer.png.svn-base0000444000175000017500000000437611362261067024522 0ustar jlbrdjlbrdPNG  IHDR szzgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATXíiUtfR(  $(1O %@PѸ K֦vZh ]2̽w]B-==<9JDPJd{|w^n|'.Lhy ( ?dj5+R떯Nq%+5*R(Mg-ьRjM1}{+8-w0h*:ʧowZΔ'숞fGt])DED>3.l.Q#Be֧hՎtoke.j5ӨUL:c?;3'MO쎫JaE_z9/e8P (a%)ǂzN ƙDf7ṍk4~3y/M☝9#RJTDO*@X P(2X9X%x@:Ȧ<$0>ƙXbES,VHf[Rc2⟿q`B!ς 4,"i]X6V>KDCŠFDL4JjtQ7QEoc:Cf .m(Wpaa>]_=q(*ZX|٪yY 9S|/*;ygr=E!ͺD6[2^uhM7Av| Dh gJZ9ALokns,YY07òZ,vԊ8p7 ,ZؽhzW=WsАpP)WIF(pxg/:pK^n |j%?o pZ345z~}?DuJ=[سg"Oҿ#?V.C*^ Y:Cf2y򶡋=\74*%jF)Lϰ,1qD̢~˓xٿX, G#_P4}15W1:x:JLu8 `q7>[ളR\vMgI3?#=Fl!a(6jE&ne[!fZkv%O$D|%ɯnaCB2~gb__[_KX؄#͘u_oPn]."Rx;ߎh1ION9$ IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprotected_meth.png.svn-base0000444000175000017500000000053211362261067026147 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըxIDATxc`0>R`^ 1kV͠pgwbY3>0 3c8nњ t"?H+`+Ɍ2H'LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturexKL670HI4LL4JLI3635L6J2ML1~>IENDB`qdevelop-v0.28/resources/images/.svn/text-base/build.png.svn-base0000444000175000017500000000177211362261067024016 0ustar jlbrdjlbrdPNG  IHDR\tIME  #k pHYs  d_gAMA aIDATxڥUK\E=g> FL`Du!&@ЍAQHp'&$ ~vYea!B\8Z%DD WW{_OGX݇]uV7Դ?.zOo D_'߹N2,PZpW>"t"91RKSITT }z~zZf@0N9ca0b8COuYq$'0zf0ZG݈f7uVy Dr!qp"!$|K)܄-\IJR#m 'zdP1P,:x %*26 b! " u3:F+g*6#Y9nwKj`~I4t#͑8y/iJs} å IҋM_ B1+rldP*l~RjύjۜG1N22`~89fmf (`GYXdOIb;ek3xu<ңlq2˞j-)Pu\ر P9c!^27n-t@V,{"kʔAPᮯpb9C@+0˱=2GVQDYKTp7VL6Fn"$2GK_<5kREV6&GO MV Iצ> *[X*UnjAAE`ׂ8<έ,@Nnji 4PZ(IhxˑHO1a x16N^]˙1:ۉjxٴY7}@A膙51<z*-çG;isןw)[g-3{='&>iW hlJE@?5ӣNrRi#L} N KZFw7['Y6{{2`;uО4I5Ij^)J}CW<[@8fѝ^ѹQ&+fg)~Xx2:0kNJ9DpfZ(ef h"6El.P2 r Mvݡt|+Rd7r#qi(Ie4Eu03_x05 􈡉r(Hbءw]ߖRiY>(|]K&^ xW7˯ T|NcUļvOW]|;aIpjqvŰ"Ր`=b@ߓxJ{]UXY0a Uk',l &}OmPLUIENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgnextinst.png.svn-base0000444000175000017500000000031711362261067025242 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըIDATxRA0+/=O@1FnmW耯dXSL+z C \2S@BQL:qf2Ǘko`ozV¡!c" "N'{W" u&-sCSIENDB`qdevelop-v0.28/resources/images/.svn/text-base/window_fullscreen.png.svn-base0000444000175000017500000000162011362261067026440 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<"IDATxb?-@XM{69 ~ 4 R? ~}Z@, Cݍ~b`O ߡ ~= 4?ĥ'а_ 47? FbC(@,|%@ FfFпȂ@/,^@, rGa0ϰ@Rw7i.vV2W`-ri(3Ϳ(( fef`a`cQ@ `$) (R@L`e\~ALQL׼ ,30H+00JI2YzI* .XtB7,4H6~4еJ ?sV,  &lY-v f ,ab3JDD4@!" Z(rm*b @1 _=g n .r/awϛms(@c_ L!X\>u߫ z |1 0(q XGo2 a_K2`/Z  },S? b? d؏_( ۤ`@E/hZ忒3BhEp6,3z iU@!1IENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprivate_enum.png.svn-base0000444000175000017500000000050711362261067025641 0ustar jlbrdjlbrdPNG  IHDRhtIME  vA pHYsN N }gAMA aIDATxڍR0'aC;Suxև&}3d 'ЗHʺ#ܨIY_1P6֋,G˲Ku8>t|e>CY\#>آʐl"-$5p-\UMqfQ)vc>1lBp (\z$%8 v&_`_;jcq&%RG/ OCd.oK- nPe;).lQLy(6ߏLO@Y ۽F0E8Pi~|s[гVͲ"I_ӌPWApJkҶ:!.qZŠ;fx~|s^~8F|2uY0ag'`u ğȚ0,$g{vp?@>_r宎n|=~?psnyl7é$vEK(2⍧'&2mH,cQT\ OL"VS -al9m0?oT2a,',i&Jp Z}~)r=c"d j(,/X.l$@D0Ⱦ(W8 mAt\G"f kIgUus~snݪުO>ܪ[K{>K0˒Rv##<iHўOd1~;BȰ}k߬9&Wj:m=#m|'mc=0) {&>G};1{pppF38>DFTIX )YRdO%$@L'2!D)B cnfYMfz׻ݍ*? .Ƥ05)`!}k5X,U)R.0!\),F)rH J@J!B)A[IR=2ql Џ!!t'(N 98N{KsSN=ŷyj_c<4&I05}`˗-˭Xlaa``~ R+YPJB!Rd(SD F)R*!!D" L&B)!K tP6RJ70ƞkiiyg,PhXL ID@?*7Ӟ~晓œ(:QBd-9 M )0 ܠ8!(M &!R[ROh+B1 %b-@g##,h?(]矜`_ye„ hlM 1(χG ) ~ D_> (B7BRYc mq\ AR""ZZ0QC ,z)7L&cl`¤ U-&a@ym v޽3E/1sw98, 18 g,Ɣ{`}F Ba_ !$Бl@:+mH6#-@(R~"Ҡ2 iAA,D!"i@{3g?g1\& YJ0Ӻr˹š(Z*COϵZsǶ S1%?(_@̲|iЫY{KDJHAamxN@ k5 iJ8 dϦ.HO@lEW D5=f &, `ЅwA !IP 0 1߇cQ%_Sc%HB^3g?g05s ^q`ws+JRro6˂d@>c,RPۮ$ ԩM5haWZ$<@kjJ`SBkzhU4ꁞϚ؁I j0 8/nd[`aX+ن!{ ̛7W܌:A#~{b++, N ,X(@'^%PNhFzL pv%@F@5O4"$˔FT8IJ@ G ǡS@E՘a,"C2VJ3Q!ca}_ C_⪫Ek0^'^1 v-\Q(R=ZqXq]mX46,K1pBR=sDU<?+Ԧ<|Mn" sx2a )02R%W7%̗B"JI% )! ;u&B# Ub!'nA X^Ph1=~E~^nݻ{0Q|;GL&gkk2ZۓTPT!RqC2F:5vjL" c-*cPǶ9e Sh!Do)@MLA B(Kj^P>RhxHBƑ:]lIL"8euJ9P4=x]xY/K@oD-\R(-,KkrM|۲.lۆp'8J=K"V%U| D),V?с;2+CA f #" Q`Qn10@ {zwv"nD={{ C DC5hM@ !0 -t]P 8-e̦L}78 87?<(&3taaZe% ʨTJB >{y۷Cj3f@t)h:}1d[[AHYY" PqPBMq- q FKC| x2;Pu ^1.A/g_|@9\f9(ǖm2R9:_|Θ,'0%F|r"JC% QT`߾[ /"wȝ.yC,TTT*T&U&I м'=HEu@zJ { 47nϨ A-FG2TS~>aR$d >8ȸ.lE6UV&up/ +Ѡw46Jbi" eQ F?u'ףZ6%W"9Ȟr Zz& s?ցBJ 2B})!@\+xAPTP<<qo۾;r|Zk`LA/Zk}17nP4t܌9)&6I~&Q{uhZ*mE^*Q <un=kaë-Bq8/FۖqD#f&T!4>]85`&6vrT~ET*`}#}nN``߰@߿z뙽)ߖۙ r'Ifv):ŗN ?f K@o?jK瞇z5'(} `>Z:72Ajtj0aFa깩g0ۤAI5YC J(>*J7u7/;@=XA'&~}ӟ~w\R:֦2,F&Mrg:?R>Kmd(bq}A4Ttzx+V"hr+uY3g"ףs; Q&BӁQ J֏㸦$:C#%]ʾR _ P]=q~#48A# _.;X>b[VI;YI|L&6 ֹt73F6eH7+ ۋn gnyqTVF\Za55󰚛,s])ᴵ|"BFI d *k~0!z^@9^Z^x"$R@ +L[s &ŦHp}CXD%%< mguVg %8(@?{j cfpp]8:ؗmpݡJ'& ;L dS0D0>tvFa`A3MVz mXͰi`75jm1s0_wԖ~0P@44~wbq؋X29 -$itsQ0YV\=T A :irP(Jty|,Zmeok_*?BwD}m#{b^qG>&C&~>z@,TrSDT.\FRA\VLB>,qhK[~܋8./ ~Q:ME3_7B )qpOfm#˩ W\F.l߹=x>È5`G`O2Vfw?YT^Wz_=TR.ݘٯLl֭(nڼ_]&܌ܙKz%--@,A"$3Ma*TLt!zc eJ%T*T|_ }q>mn/~Ѐx 3* }q>5TLA6WBq6]L *77DŮ]sN @Eg!~ss'#w\>sm#t\x{?mi8Z/%JOC s|.] )H\f$R ]!m+84/e T*x 8ܜwu'b!pDO}꽕J׶w]dsn&RFr[q7EsSTNغu+z2]ݰV_U^.w 4{ GU~P>)mzfI*AUAw8 AHmտ _owoo!ȜZ䯺 #%"K>+nYVa+1T4JjKTanf2_~8Hc||>O]W.o-kz&ҟdfH&R9,ES6f=ìv؎m[a8*$r? ڹs9?x"R!`,Kמy~'I@2pd'3،=/l^J'!0)xЭm6;K.BL H&U@'CMt@\`e%TFѮ\6?!%|5A\m{x~&A.im&žL&\SrMM5&EƶرsGֲlΕPCI a55O=S_ 5? ~蛒1'kҙA~ -'.|r^c?3hz;@>R92)t2˶!ku/Yy&,岋/H/HⶒH!p@@]Rr,w4s٬2YU+O7fkxR;Ѿ}h^W?SO9,@]CjNE?l V#PQnJ)釠m @!4>A~P֓g);v ?RH"W>ei·f1Tg m g`q>{phK.(g!zp~cT M奡OX5Ƕ,s]egI?֫Kxil6? `mغe ӂ IDAT2+k>XL9d7eѩ9MGmh]tv&7q_놶OR}R}jynkE{jMF ," Inкg?Mct1X~w%1;<wd IPV˓%몹B IšBU 144tÕ_׿R{`s0vI/}` nY2Zg Okc;d~{oS.:bO.oimQ+hڲ?Tf,2,i/NRu;0߉VMK1}S ?u"Hj#fq AQLS . [3Fl_=|S2b^x.dOcDnST-9,+n`vd}B #>y嗗1Gᱸ߲U}I__57~.h~ ~"FiRۜϣ"ضu~i|}!f|R̹|Sy|,ԍ8׃0C;5m_֓_XŪ>lMG% ~9(LjT3du*Ofefjm߁w _LqkڜTeMvS-MA"O\s5KPz:,~ ϔ\sϟ&Ry2z\x3}u]䛛R ۶mæ_DOo/x+O{dJzk0唓A5Чtzɍ#Hq+aE)\Yud=!%VKJpq%D>f.j! SI2J!r~L&iHa=w'Sr5vlOxk*RfVo]ݽ7UcQ5ͭ5/*xϠNgrw ?C.NEs񅉯^_lbfRt{1sɛ!(D5C;Ӧe|*<>vYuYl͡~]Dl*߸ر3g.{@s RQ\fnX"0ϿnݺO=BK /?"ɘ.ݻ/أz3}Alڼ 188;&~cEh[xBOJ ~ 2ڜR- CkqU#3w\WiD$=S1a- -=e*$$ <˓%ID^~ 5 L zVa#7 '6A'S(:vpDEQu y?}Ϝs% !%}\;EQ›jݕ LcL#N77@6oBM(=nx>vM|>l--sĔŋ@uNx~@Y3#jK u:myj!l@շ"VT'L~ ߃u% o5WNUs8!1V#e% MK  :;_;xUW&}"F1k~/!"Lw޴oeթ}R*~ !(*N*0s pJ( נeAkxZ_k]H[DHKbLhke\]2JQ,K/]L}J4ɏ~tX(cofptQ]n~̲f75NUcҾaeي k~8sۑ? \ C;v$Q/ӯ(wx:SN\ V0B-&~GڅOP޾CM}.j ]@5"HXeM UWF)r,P! 9o'`?[{,?~$#\7kv;Kuql\%600-زEy\|!ܙ3 P`*$^կ ^7yBR;ue#?Cнl7l-W}OB\2}'EUl=V.AvڿDK`XncN vC q&748m[a}-OGۉE̽b}wo(Зڷ`c ;~0?0<$bC/nBr%[R? 5.Alz a}Od ^mP-$/+]=}`xmY-f4C;sh.e6ߙ nU*]7* =<;}:^r" ͉;-WR/[m R6"Ų&){6oF](J۶A$WcX= {c5@!HJ*rjmX)rc1OVޤLm޼ZBM40}]sd6cjd =* :::iS; wbgC;=%:K Aee܀?dpbZ879X.lYBBꁚa`W®.gYb-> HXqd"= ΄R0m 8-c8cM#Ir 4a `O͗DQunyٜzxv&~g-}tw`K"O۟5sߜwt>} Gy''~J8W֏Y]]ظl9<vue ̞?Ǽŋ% #T<Q3 o},#Ej_ٻEt͕5ZgH)U(Rq sC-1Aoy-ܲU͟ A =令ggWm+uUUޫ~Y( 18XĎ;!julOC?Oꉙv%I[JL=}1 cwn.!@P_{Co{;igNVֳpi!<|Pi/0uJ$=V|{"\BEA512^l6/A uT1J8R*ͯcs5RJaX. å˗-{7/Hn=aN7`t/~]]3Ǝ0&ds975їj8ESs3<(!(}NJ%}?k\r-5:3gcL"e[3|QpOWkgTƪO>2U!ꓐR pUW5_RG(? m-?އ_zr8pA 8"zPCīhҒ7aMgBQ؂@roD Aa Cxz@Rϙ3_W0|Ј '* Rz!8h2ත:SlV硧;oCTB} 񢶅C?O3zfK)UアZw-}(Ś{TW72mhjʣPZZp> MI菶Dv3g4p@5I@dt0uuu J#+`A,ٛnBqus6i#M#OS~qP(`;4 i )sΩNwR֓_ߴiQT ~{P6p982m#gY[6,-myBζ,x۶عe!O M- {?}uAF+o0F^C *CAFtQ@7u$fQ&-hZ WOs'G'B{VsΙ;K2<)q]X:0RTѱ;A(GfJO?IM_j `9gnׂ*QoY6(|E_"pڛ9YBRq YBF e%"2܂DzUDAUFJ)}` 0NA' 8Nƌ 4qM3]#+_Td&"F/_JHV7<۶u]?D ߸ xܹa" xl9aUt&~6HYeկ!B9w/O2 ZY˂9-l`SUTPײGs;v: _j-Rb6WHռ PʰPM(!i!`zb$3Fj gNWη}yWyN*oD7 QE::,> صsJC%{~w ŕןǘW;\R 3;:Tgcp-d c :3b|rb:p·¶*_<4k&(Q!?VkRqLeYTl, HP*G>r$Шc7mD8lmһ[ۧ}~s4E1ήn_5<.fTI1_w֬wHPk`/i>cYpzl@LI Ruc({:^3 DEwߜ'h[ ܠ~y)hHqBq| BR&hSn[i'=t]?׃;. ƶK]ǟ^B)fmO4y %i07ৠcF:v+-oSfC[CD)M)zW?(`[VHUπԩ;xbPJrrmǴ֪"U&Me47U4t\]wh hD sǎK(`e`RG Q'874TBGG22=݈|CSą*tFIuO/eJpۺu.ИV5NzxRE4OS Q,wzHFD_ 3O~ ~x'p9-j Gn?^OGOY馢^CL4a8<-Hlj(#t5'vۂ0.NfcYc 8ϱ=g| D;;ӦaE{ ~)eO>{fIk~҄X3CH?.oڌ+1q# Fbή MM8K~o1̿fXs l eO3Rʘ|rt"ZYLW\[=g$U{׮ui8IcY(:agW' Dg=.*5DoVquQ(ݧ*TJU 5ᇦR"(wJ7"N@І_}.Q*wP`Myu{qB(&ݲSېRt̤c ãQTc*+h Q#/HAmnY?kN1(!zQ,|nǴjnvRJψ}_3UJlV?:~]Qнb%jᩞ~`BGrjx`ݽ݅2(I̿_K9)[R'V<uk\R\w`BXVXm[^H(opꚨN鉾ܲ ^Ba}ݐR~|-oZ3f5^w7w $Rֲx"uo \.?%@uCүKH^C6'ǔX I&௾GCGOw/EKĤh`~L{b]gO031Y9Y"!ĂM/x8L_'$_|@$#axARA_n"J1-o?9['?E֭ kѲ,8:ũEO C⣁?eHH mnG򕈆_yG)C{T*(@K _"ۀ|_(҃i IDATHhxej;7<F+ Ժu烐L>6aAOuT:" P(jU7픓G֙:] ~e$ bia}IrUG *aYt"X6B?} [?n/A =rMMr|x# R&$ahE+L]矫j8WZV&0 a sB*E+WP0 F5`?zwgn[kE0_ д_ Y-͘\ck_S5RNjދg1<0uCԄaBE!w|+z }Hc #1Q͝K>Ejuf ɡICxԎO*Ll2kB[ё8rR} iDDH|[R]8UR"j^*4TRـe+!.ܴ׿C ͳll.H1eUI )T }LR <z<:.`Wp*)%2")J30HmͣҬӁJP0ν ގ/g3 /hƤ6 ("xA^a̋\Esg@['̺),JR 7e.q-x: مg"8颋 $t})?S=8 гr 5X.#w- r/%R0];#ݙBg&вnGۖm ͛q`:.@$LVs0aӨ ݶ 53RL$_3_ԝOJJ;6 L!b0Ǻ(Fˠ m.yyG $9F/o= S8Va3kAtm9qYG]!XS |x/8|`؁kK>l6I1beD T  AA}^ Gsv޽ۚg,$M e Aa``༰5 ]c3u~GD5,=Z/kY8a75U{~@ }?g Hu8)zVV *>жx59!U1ċ?>ɵo߁ےTsðCS9۷oF_`Dy3ͯ?,EP0} `jʹ(1JJ28XpHB)r~lr#_;ҋ&߀T*! #z(ɏ#&Pw0 Ygf r1͈q˶eeєcʔVضǶe˵ 5' T j4X f=﭅BjZ_=KJ O"0ONHu:*32 B( Չ56t;)@_a cH0(3^:rkkFoY* ͟BO?cwMws8?3siTZʕɤ$[~<σ̲abMK)!BaOJؖ-, RJQzG5%lHOtWWWWS.IZi)%]^Yx/]yu)7׃?RI&'(tԵ/5/prC߿hb͛JQX5t_z _ dzz |⛿A{x" Is;2se )cf:2uVZz@ljny)$&.N0=}8I0t1u}>AG3M#*ʋf#&?u5y15(bge{S ~] U+UJ"~>Gwǣf ÐjF=`u(:t)dU Pf5"QI]>;&gh{繒2Œ|Ӧ〔Z"ϓ$IS􋁯Ҍ馇zuRwOkDak cE+b3DtA6m23d.+Xᵷy(+LG,Y)2!c(& 3:q"Iʕa!@t]BV6Wq\\wرt)/'/>ͲcrpJxVߠT3aH=+sxQJY~v )2LȜ~qZvp*ʵV,iaO6A: 4RIrԟx q73Xqv5z,7vfRku@7FԦcv`q܂jC 3<2Tuv.(]u%!<;.r>r#K%|Sh'ɺ}}oi㤉B }R!fu'S"Ѯ.ˀRFQPUq|IT E?NΧ|9&ϐyJ'ȴj:z%}\{P>\'I=aZE8{ c391yllj E4ja9c%qqJ??oR2}{d#)J4gVp8M[e.I% PJw׉0 ?ykP>GWgJEV۷|brl_%R#L$a"eKyLKo0<2B~'g:.-YBoAv4RLCCHyO#5D(bI].FXLg}?Ssj4*gy96`>q\̶Wj[lyRj@ MTH=a&[$(oؠ_&{ع u)dv:x؁|Oos{y?(:: JAeBEtlXOqZ"61I'Deϭ_LLNF3tE?RoȜ~jNb~ݶ ^ *g.?xpvT(<෵82~C0y2V+X-?L=/;RQy->r~R<7G09I.Ly:) _Wr?~w]CGby&ioku=}ߠzR&&$1I~)RIGP }kQzFܮ.V}죐3<<ǡC ㄞof'?Iv60ǓpR$>DPqr XMTpaۨ3MU* 8ĝ8 7e|dBhJcUDaH$|j֯;9hW~{:^_|pz\.GggbB!Ov\e/>O0:.Ny_xygz̭P,t:;)tvvl2Ni$fdb VHdR߂_IEZejj Tb/AܮFػw1vnEZpF~cʤ!@(i$. rZNAӖ/eC$q|fxG?jJ]jasShjjLs)W*);Z:ի̎NY@7}7Y 1};G߳'>A7~ɽpMLU3 R1c(|݅R_M6?qL{[%K4Q)_ݝ(xk`j`qFk'Ie[sdhh͸-hz%m\CɎQ(nW;#gNW  RjkCge|\sT1h+f8Bx/lfDA,hL۞CjYz8xQ7A0$IDqDUW]t̐ED?y P(P, \K?u E_u&@LLN^dKza))($"p!"<#ܲ-]puOg-~Fʴv4=OC+82Bwfƶo'm @[{˖-X,Poycm5EA up\MqW 0`ph?GhJ"c15LNNw"q|B7MmB5 I.w B?amg%i&Ef 1q|~6򍧠L2$qD LjC}o'45WA03r|)-_Sq\'HSSO_ѥj*y]XH)SPm=p:׮@)Ơg07[jEB05I 44Lq*Lc:_*V*)eIAE([. ]ZJy?wvM@q<'Zgz +sQ5J)@È+Aɝ+YPflf=({/{v!T:)H@ '\z0oK.,|C<28] $CƬI{r c ua `#sh"u!Le/6ظ.R>a1O-Oo%LWsߡ+( A ~tJ{S.Mi˖8rCw;@c@c?-/sڙ VkL>>7'g$ю.8( q=NS* ( קM{m21ERn()?w-sS$Ѭ?u]ݭ 2+OWҹ%Ou]zz馭L(=(  ۿ·cW IDAT݆јe/VSԈIqrֽ Ƶ/k)vu5d~& =wbr+SԨg$qBGMkgZ'ɟ<,M:Kx|_ԗ'4OZ(8~cNDx!:(ڽ;ק;Z6t^!9}o mmGh0$IџPNm~ϿK?qgzH Dho%^Bׅp32V7Q u>3ptYc}0L0_8I g|BZڈ)_R l'ˁ0 ^0:}[:|Owr O![heފD[>glw ,t]pn5<36a z#(#cT+ƌпG#cwa!P墫n7BPݹO )Zt SS /]Lmf􇾖})("r]u=ĴF /Vxٟ| sm+VmCv*!2E) %?҉廻WeΩU|$ v|:MU4O^R߀:qQVӾ R Tu* hk+R,(t^x!hc0ASS8Ƃ_8|8OרS>ifX=[9,w޽H驩eg9R_w%mQz"'XK'v,:Qǵ:[i|ZYjZj)esյ>G(vuS6kfe{RLNL2>>R\ΧPkJE^'B(<]$#bG?J9S4hb$,"(JޔG=Qc摘:QJ(n 0MmOC'A8VgCQR)3ٿWm=@s. 3 ~*sQJP=x(XܬsƨV;wc z-]ezCu3Ĭ3DqTwŌG܆HI.`kVJ}`rs& M@_4W(Fgy[ovwDj7W*3gJu~ dsnXRSL@ePJuVM샂p@*+HFFZ:!P8mNLRm1d%;EW5/r/qø|_Ab;.8\f٣^,TN%?m() (Fc/9ԥ${#Q*m"md&$H5&ƽJtfBIY_v;pHZp#{:zaة\_ z={nzx" n6RAB>j~_on9n30)sNJ)1w#)kmfLw*@9~. <ݖFqsMS @)զԉ>М0CJnd#Zi鄜4u~Ov{q3јjQ~! 5W (:=tD5Լ?v㦓!2]_UC |ZhRn#t)ѿ+breJYȁ T4)o H  f eNSe.yio\FR֎邀?'G~f3S;vAK%H,8}Vdݺ)(*#>4qjCC(+h_Xsh_rg2QRm$/ \ADZu\EOd%0/4Ȧ9<0wڟ_iz12>-6 mx0L(DŽii9. sGdNСN* VHmcpL3 c{Z:S- ؉x&\ Eoo7k׮>®oȖ-TY*k37n9|o/K%^CeWP< SSLMO4?q ǡr;vQ;<[noZg􈵠E6"dl@hT 4wzJ솪i}vWI23Eg6=c_y?J1cgJkv: RtwuiE5Xv JsnnH3Ҳ !`to~azׯ3#xKWwKzqsoKm3EH $%eɷ:6> Qr~'"_1gB^=b ֯8 c=Bʦ6hYjp2Y3(`}-<=]xuvuՉp=ܫ$P1?NNq{6YD<R l_j74L毮;IH } 3X̦"3~Sw|܋%Sug 4z,`LVHTJfI8`fm%es˯YDHSni'<9E"އz,_N ׯ_KWgՑb'SZdhf8S%(;>a&{ 5rBz{)˗Dv::%݆DsMk'wșG:Xa"% :+ӭgJbtIyÓ3ZrG5Wk?w<԰)%L[fJsv~foM|1f E]:(#V,{%aHM2@:|,DjT/Jpd6qPL)bЊ(Sϼ+[>A됏`fƟAX`u hzڵ;I#l~ |_pDJ\$Oԧp]B^nhhXa@uFZc4yime EƙHs mc[N$"ie/**{A]4sLc':\v;ےOÜ  G,>#yd8R- 33U-gggl&AM@35JJ=[ F)E"e~J@" DCP;tu\Rv\> ^r}^{0ekZOg~ hʑys!Dgя/"bR6 !e[08,ё2H@`)O)8@%ԃפ zzi  _lg@ҥKN˗Q(|ivqG ΜQoH_4́ҕOA*?X<#"#3Z W+<'Fd ik_ccۇF8@Z@ǓIg"* *T\|ɬ@?'ϱbR֮ۘoϧ뼳NfVG(墁_ARE)ltYς+k@`ݥ+8"o|TRA`Lz$i@$t=$a(ݚK K2TlϠ Q^bl{|;cs${ܓNNQ)(۟=Jwc֗Rٺ?qBMzV*ֶ@U%H]dGc gݜ"+dwEDihvR _e3nl'M ; >;[ +UT2 paF MR0oۏO3טoq yՈ8dS35>I8IlqX=3)QfPR.)H86+n't*Rcߙ"$Su'LVB|1?9юD"|-(dl|"Tw 4QuXnC^[ZėjEkTeȈ8NJᥟ9΄?i+3ȁqk( a!qf~$?S~{U]R?JmET,رG6԰D=DZjp6\ޅR8Afxx h| я~gG悈Wӑ'8VA⫯ݍL)ӚfG:ȨHsnsNz&G8:F4>OLu&&& ꢒ*emx*׊#_d?<<¡Ç:C#Hhd{η{{זhȪo^ !L'T@Qi҆ь?2IPơdp` RJ! ?&I~Ju|Yw-cbr?J(&ǛXN}o̢&&@Ig;watLaqO<2PNmh /K_;Oh 2\I0uFQg8&}6i>(KSA&12xK N4=}J{߰U/Vo?(A5f-{, <9DMN2ͯ3v}8RufchBYB ҶnmZ*ۉhH3xCuj83*_% I1I9&2=$Ĥ+%˗tB Xo(ANg=y,y)_"RT*vKh¬ ~)DǮ?"RAvڃR| Z:?M3r< .M_kP')M޳c)Mʽ&W(XP Ćm6c8&C׳"8ivgX 0B!N.w ,Q3/w6Q@ :_W" #'ؿ r%qrFh+s R)%<7J)︃ak-r:zm3f u]:.$}vc'I;9D<= r|xtt8IHX @95I{4f~ ?}Y@^iu meYem@lr"P&׺ u֝$eP?뿙gyͨ_%V\s\i+FwwwbZB@xKoB)d7t3^[~bc;BlyM&|Gf6)(RZ0ۃnde14p ZvRٲmҢAWMNL~o/?q5k4(29܌z@NĝH F~֗lRwHS(ZE{QYmܚʄU֙dD6@Jd8$ ҄ E %Ys\'\`r3 `j3z GE9ET( 㷓Z"2*ɫ*wpk֬㔁߮+tã$ IDATuZʝ7_T ?Œ(B_`f,]V/˟v`wڋcZ0NA!Hv1(qy}ҕ}tj7v- 2(hoo;-:J(~w_%.&  W_pW/ykD[G|e35%7\>6ෳ,%vNf 6W?3^| g^#4WU̗3AJc(gma\rHꁃwz+?Yzq[m0PW]ފ蠭Ĺϡ{|.| qE%xPPXdϾi]Dii`Zz6dqo6ގ,'`Au+8&g bZx&J \u*EE <#*q-9jhj?DU{z9g!`w悋[Ĕ,.v6)qܶ6^:^GDO=IOP##i]ӱʕ8^sЩ|@OgׂN3y@*6X>w V൷#\TB82&'I,Ocw~_|mn܍dddK}?}\}+&''ҥKLzw8o6rgE)跾š;$P oJ( Sm2 ߾ ϞYм^}p7gD!;^7{810bK#%^>(saH%K~M({y46jHId+Up4aM4YiUMרgۀ˃1^3sn!(ЗD)򸞻_. ~,À-s0qLyi:y`YᖵV (<3S)@z% gѬ"}/d`=(> 9/C!>uёMXZs%'QJ"ers=BFT{Pc1hiCz΋/jZWש!q&' A!aA-35[Qw_";Io38֜6qPp;XQbr{GȨB19^Er睋R$۶btd(j#ݝ,]NJ( '̮{I*Գ5K'0}WּM:ϒfT%R}(؞B)J P.VTlEDS@Sǟy:'sa0 K.~[t/ÑN@{eS?zIl&@y8q뺸v vH{)S蚤b_, }pr7(0ÿDۗQDi΄L˴x#k~g۳p:xJ4޺uOfmd 0zY5 ffl0p<2b`,{{{ٷo{dy^8HT q4gPJ,~-mMge%M("3a^M:)mW_O4bLOy'"Uo~?<>DGG;`5So|,' Ʃj:cd7qQ3gPAc7!(IRЇ$$C} i?f3@}+~ѱ~q8I:Ϛ:]uuJ^;Lr;v!L,( w(Q M]}mtĶD3˯?\'ӧ=`ӟ_PsfГP`[Դ. BAffC}af?i?nd7VlkkKJ7ڄ utdq `k2)t%_ R]FNx矏t)q=g2 D!]Ti_fЕzr/F?8'g}KP25&gy/,EMUݖ-=[uJ)wwtth9Z`)~v砥4Ў>Y $!/M]YxVV+0a z2::Z0BP>:"L&/B4j!iE=twh0SGNF'Z$qlx˛Ef^3$qLgAosq,_.20{~ g_һ XJ\=UJ((s9<ףz޹׬w_rLQio\0 0]PCKKV/ յ)3>sL6R*Lʴm.)cmk@;Cx+nuZzFzSu6;0St{3e. %1@u]M)q  YH$DA[~/ ⧈toڔ0d 3]PTv了{JJ眃Zϣ?rt_4<&QFW_T4aRR494ϬM)^fO;9sz_02߹{mݝA IXܐ1bQfoXOAfGDH ,0*3:bq aKXtR{խsS*;$SUkuJ㽒Xf**j5ۡrR`OP f͚x{3Ē ,~h2Z@ ZL G"s̉Z8 ki7 "[bl߱JNӟyR->?[{ MW^up~dy72 a@הzT! V?0u0% 2J5 4}G #bȏa 'lAęGB!y*@dV(B9ZMm!w"pk`dBJ[uمrʫ`3Y}н~pg2ip֔?BX(Pj{GP0MkR)YņcArrYTIIi&_Nw]hTI(y{~nFH"UcM4ŗ ᇡ|䜑\ |NFl̔u%vso॒D1U=DGQ{e l9jg4M&S)nbu-Rf|C8w7+(J|5||@>"c;؟a?JF^~D1`ϩ+ D$o 2N=Q"18!ÒZ oǢ_.ї" Cr%BAqYEJ{Hpk< 3s C&Rk?G\XQ,En_G{e*[5Ш>"+u (306SzDV@QS8i`!N? ^| ^GaUop\ ۶B)@# O?8G_6\>W#<awDx#dKb"GU=>mzCCwO$A Sh$DUg . ,Bpa_  |7܀V P'B\FW/~hŻsxßѹkU=cfcW1F_.P.QU*Sd YE ,&55{0^ q"" L2چ_s%A1Q:ܢP 3vĮ&R ~B>0j}}Y(Ķ[n 6*Y`0CG` -p+5f8/ 1]cR p岂//$}ۧN}O}?0G\DR/=C [y?8̿c~=SFD4u#cI'QbX8LS,c0$>[pFز,D]p_w.2Uu媽^o;Td{GE>_rwǎ!%;6@Iaٍ҅[mEa,K7ۆ8p xT2 u.ǁeY0- alBe!kѺfbq89~-I ;@vVTw s5@YчlVTw0c) 9G5pԸym`m#,_ ;;2ON~q93DG)7|~9FtȤx{Y_:?Kx-Cˣ,$@\Yo'ca-ݻC>HJ9STPTP,PQ(/W*(WޖL$.{͚Pg Ddɒ{׭[8 CD4aZ aͶ,q ˶h410(1g68_>:39a%];PpG[/d7l/Fۢ:1a+:P KVws}^^FfҜ0.ixQ'P{ #Dʹ4 y:dm4-[= sbÆM8`GgvnD]`nۆ{p07>3 ]~Q@!CP@\F➯岘 LcE'~SSLG>ݻwh9m '@:ypm<qi2 48,8F{QmkC<{) N~+/#ܵ[,HHr]1G>ۋbQ' T4_UVk; ̭mmwaԍHwuDn@$rvSK`QؐQam[ bш w JpŪXmW+ IDAT~%M۳7ZѠqޘozkO_389}y!qOv Duvwק u17cقh䍪0Q_Z/n8E>G\FTdk߯PVU=q q[I>1Niqa K @Md\B %Ði0 ۶~`1>S_irzFQ'| lro$R hTyN~4F;K*q|~If۳Fɜ~sX>G>||/Ue }dşV}݁%#VC\sֶ;8rY'Q`ǰm[JN5m oY2v`| zu~!vceG 5"߸|!}c4#[#F16}(J0D@*ʕJK"}s`Ba*;PjO9蘃ӌIsF#S?r$D1G؊ގm2xS0٘'[&c.h:c>JN8+r:ˡϣ_X+OaO~z!{{pEc}ӓO=wj5a&jq,3MDA۲`& y&mBFg|?(-3.` ݰV=s0JԻS?Aɻw4!H?g$e7΃; [o|َh9q6ې)I8Kq_p /z2'/Zy6Jv"Ɖ`@:ߟH&&A7cjőhjV4 Q4a63N%eUKW᦮m E뱺of/osshd7lUJK5]=“/ò L_Gx9;eĤ?Fo?0 ᰦ}==f( (jy?u|U""P״-;{{ x≫ xDuj5QJ"'7 IBC*,Y$Y0o6WY"y׊>h!ѣƭ* h?{ACқ6 m`ۍ|`2k-חozLYxDxg焙&_‘+ANl(("ޟ}ROAZ)Z:G8ַs]k׮ c&*j0mn} qĮA@n$eYjf !c? }fN|=|9L[э^lԻyPCg/P^ڗ/7)h?g d,Hө>tK.ƼX1G_O O~˪Z//kg6].YX,~4MQ3Mؕ L@EzJ fHx`QXA'Vge 9o7|ҶhiF놣s >MXѧMwGW|2Tӿ|ΛY^|!k CUZDAD# q`L-5& LR˾ ^{4Cto]{ߑ"m7OB9ҿy2w )g1_ʟˡR* zUiҏ>j-ӼիoĞH1W~` Їqq&ϟ/WDAƇ%۰|oQԶYJmZ05{m 09i[8a$Y/aws.?э1# ݰu~PҶ`t`oS܋/Xӽ lrOgʊ\F\C@]q G͘qc[[[j $ずl6* ?|Ff7hhgDML4a,À#S \<+UI*DCDc14'Uwl}r} b`ۢ9 c9=5H#+cgim_5{(ݻfQ)PTrWTP-Q4ff2?.515tT8sϚ5Τ7aUB R.Q,z$L@!A\.2 [ÀmM--CspUk[/㑒z' 9A8~N?|[׶hN{e֊8+0{|90;g7nm0TaGߠ\}Fk m2=q?]P=}޽\VW* @ĺT*SR0ەG?_CqLC`~pɒ˫W=ׅyHRHRHhddN&u<0aqDQ4@' @9@]göU6ϖn|tPL`zϩ޸^;d7Y#5C}~ά?,!ZUwk>`MR׏ zgRa%uBR kG @4?b0yB<$ "J!NUDBxӲ&lK`jܐC'C5sa?1L={Am솭۰uHʮY+صcTΕ(džb"eOAG9(~=:wd7lckG1 |uӍbB>/"XKm?jQOFSk1 ø鳟W.]Z017`(kt2Qy?a7nq1WF^"ddiiA:FJL&a(h\O!j~=+W#='>?PJ[)Q2J;wUw^A)Mq h0,[W^~` R--hIڊT:֖elӄ Cp IB&9;ʪ=W Q}sTǙxCx/ =rپ>Xȫ"51d~jo.@P)r!WMy.>6=0yoWgՖe-R B:A2Bk:I'ud2x"MH`xS2@sAӃnA鷿hGZXEԄܾ>{+xfOb7E ˡ yqO +POF bC&O7hާ[@߄;j۲'Ix$ZT= )YS @Tl9-DyHɝ>q4_q҃xjoMD 0)88o#ˡ\~R,p*2쏨Gar(n%ү"AP;T2yk}7or_-kN:AuE7 B-442d2A5.C WMW%'^}+j6Fs 4|Ud |:W|s9ϫ\@V(ɑR "%O,/%kwZ0ҴXR~`S #ҥ+W&i%F*F&F:A&B"D!p\?f۶$p?C{ѻ}Wf,  9s.G^\r,r%WQu O'P#*S_ ~qt\_1ﳼ_}Ν8F@eMkIz&K$݁t&d2t^"϶x2M55$@[Pzw&d䴇P~1]@XD>C>C$q@0TcէO¾x] 4w^HhyQi8 Kpl@\."͢T(WP)>&SRq05qu]ox {9*J;'!d---V [$H(H 8\W3a2V3hXYNQ-ϡsm(lظkB(aiK۾wPO\A$q ժ<}d/j'c(<G2|P-IEݚ5%@Lږ|VvpthC|>%fgz WvD-f,HU.)hX;|: 3n>X2^_{?{wfotLy{p9K;C[jGђ 9zGL=TzZ Y,)CH&ᮻo e5 \qGu p~Q2²K@A:B"B* F-VۉcjM9kM'2rȈj TG/QD`bx2)<S>-  ƫ5omkwp^_#N _}^|Q~s6RtqEmÖ˶h䌈I8vې4t鿶SOmjw# o):`x"s)pfLt 3q5bQQG ƍ3\z߬}P}JEl>|?2sƌۮ& 4$H ^4}0Ů<ض On$<4D[FYpd  o"ӗj<4z7Mean喃Z&!n۠m[ }MꫮsT֔2 Sm4TdId!-<ߐ]$ GDT:PУ6IV,W^ !UeZRxHO 9t 0 e}+W@] [FIRd`c?MگV11F,zӲ0ฮLP])Z$AJoK@aKF eԍ4\E .yQB]]^'8 w{Ma!^Obq{ Gl?=~B !أxɊga~ a(@IB"e$G-IK2M*Nm;R뎼~,=*i?~)2@ ΁L7-]nukkkope##0͏ ի'|OZ}wbק! ms{Y+0%ɊȲNZ™-:DJyCqeT=gLa6^@J+}ZPE=F^ GЬ`YH$gѢE0xx?# 0 Эn![jդM,W*'S@䣪@C{Lu Te L0Rsm0RT A@P OJ ?G`k;a2?: >~Pz ?L0Ð ~8i+ W\qJX< (: ޜ6YЎ2ڈ es0*$[!?4(3ad1U#Ў#jH+atђu0xʎ LH!Ff 8}o͛O,J'QtBqgH1Cgi:Ee🣑@iG C0!S@U)E> NL iz!mc1MϮm?]uU7뇥T& (C x|߽~Ga8/#Ώ:!":2e+Q.zVJ4=~Jd ֞8 9fϙl*zOᇭ{N((d쥌4gs]'xl.wDGA0 an*KB 'n"*߫+@ph(B-Z zinLskk[K .|annBL1Pa|;9W^W*SkAphEGa8%|2xHqS1Ʊi4zHK胱*JX@0^fmfW"9cί]}. ģU g0$0͏|Dm(EBJeC+H{玅DiG\%Jo^{<΂IENDB`(  yy{{{}||}||~ =^\\]WWXTTVTTUSSURRTRRTRRTRRTQQSRRTQQSRRSRRTSSUWWX^= {{|||}}}~ :l[[]VVXVVWXXZZZ\[[]]]_^^aaabbbcbbebbecceccebbdaad``b^^a]]_\\]YY[VVYUUWSSUQQROOQOOQSSTk9zz{}}~ "]\\^XXZYY\\\^``bddfhhillmoorssuuuxxxzzz}||}}~~~~~~}}||~zz}xx{vvyssvpprllnhhjddeaab\\^XXZUUWRRTPPQNNOQQR\! {{|||} c[[\YY[^^`bbdggimmossuyy{zz}ttvmmphhjbbd]]_XXZTTUPPRMMONNOb{{| CaacZZ\^^aeehkknssvzz}||uuwnnoffh__aXXZTTUOOPLLMSSTA {{|^\\^]]`ddgkkouuw~~wwynnqeeg^^_WWXQQSMMNLLMȆ\{{|i\\^``ciikqqt||~~ttwkkmaadYY[SSTNNNLLMրh}}~_\\^bbdllnvvyzz{nnpdde[[\SSTMMNLLMՁ] }}~ @\\^aacllnxxz{{~ooqddfZZ\SSTMMNMMNŪ?{{| eeh]]_iilwwy{y^[@<,(!%!40LIli}{{}nnpccdXXZPPRLLMXXY||}~~ XXXZeegssuwuB>!.)ZWzz{lln``aVVWOOPKKL߂V{{|}}~``b[[]jjm||~QN!40spuuwffi[[]RRSLLMVVW{{|}}~ 8TTW``cqqtWS61~~~nnqaacVVXNNPLLMԨ6{{|~~ fTTWddfwwy1-\XvvxffiZZ[QQSKKM||~e||}}}~jjlUUXggi||~wt% LH}}llo]]^SSTLLNddd||~RRTWWYjjl}{% SOqqrbbcUUWMMOPPR!MMNWWYkkn/+okvvwddgWWYOOPNNO$KKKVVXllnOKKaddOh+&yy{ggiYYZPPQNNO!$HHJTTVkkm#BTKa-3q]Y||}hhkZZ[OOQMMN!!FFGQQSggjUQKa~)-d-(}}iilZZ[PPRNNOFFHNNQccf}}1-)-~m5@ d~~kklYY[OOPOOQ~~JJKJJM^^awwz"-3h\{ da^iikYY[OOQSST~~ ``aGGHYY\rrttqWu~duy-3)-hhmuh$&$&~hWu$&~h\{y1:hh>MdFC||hhjXXYOOPffg}}~ xxygCCETTVkkmfcy5@5@:GdKaBTBTOh:G)-BTOh:Gd`)->M)-y73zz}ffhWWYNNP~~e}}9@@AOOQaad{{~][KaOhdd\{)-$&\{1:hd$&\{d`~Ka)-1,xxzcceTTVNNO6~~??@IIK\\^ttv^[5AOgd m$&hKaKaKa1:u$&hKaKaKa1:d~d~Ka1:1,ttv``bSSTOOP||~ LLNCCEUUWiilda qdd1:1:` \{`Wud1:1:`dqBTKa~$&83ooq\\^QQSYY[~~ }}~X??@NNPaadvvyro)-yd1:BTd5AuF[Ka>M1:BTd)-d$&_9FnTplWuGCjjlXXZOOPV!==@GGIXXZmmo:G`dBTFZ $&1:1:-31:1:-3BTFZ d=LH].6%*7C4?J`-3c_{{}ddgUUWOOP~~ NNOBBDQQRcceuux$Wu$&h1:d:Gmdttu__`RRT\\^ B==?JJL[[]llnyy|73u1:md$&$&d1-kf{uoYT-* {llnYY[PPQ?@@BCCERRUddfqqt||SPu>N1:\{` F[5A:G\{~)-d3.0,~~.)zz}ddfUUVRRT  }}~`>>?KKN\\^kkmuux{{us$&FZKa>N 1:1::GKaKa:G "]Y{|SO{Zyd~*&_[rrt]]_QQR]>>@EEFTTWccfmmpuuwzz|}})%\X}yy#%BTF[.)ZVhhiWWXQQR~~ yy{j??@LLO\\^iikpprssvyy|{{~OL SO |_ZZU,'uux__aSSTh??ADDGTTVbbellnpprrrtuuxzz|wv#$ }~D?rojjmXXZQQR~~ _??@LLN\\^ggjmmoooqqqtttw~~:7ÿy>:&"wwz``bSST\ ??AEEGTTVaackkmmmpooqqqtuuwmk ÿ}yz {#WSkkmXXZTTU  E>>?LLM[[]ffillonnqooqqqs||~3/ÿ }vvx``bSSTA JJLCCERRTaackkmnnqooqpprttvlkÿzROiikXXZZZ[>>@JJLZZ[ggimmppprqqsrru||~74QMÿ4/ |#a\SN zssv^^aRRT eBBCQQS``blloqqsrruttvvvxwvÿ{!{}84oj[V zfc~~eehUUXb DDEHHJXXZggiqqsuuxwwzxx{}}JG~zÿ=9 } mmq\\]UUW %@@ANNP``ammpvvxzz}yy|||!SOÿzxx{``cTTV! _FFGVVWggittw{{}~~kiMIÿTO=9hhjWWZ\ KKLLLM]]`ooq{{>:"~ÿ|ppr\\^YY[DDFRRTeehwwz~z}y~zÿÿ¾¾0,xxzaacUUW::5d`c_b_a^`]_\^[]Z]Z\Y\XC?;7|w&"pps]]_^ __`xxz&!NJead`c_b_a^`]_\^[]Z]Z\XZVSOOJvr {uuw^^a ^^_eeg}}`\fbead`c_b_a^`]_\^[]Z]Y\X73[Wli4/#| |yy|``c\\_ [[]kklgdfcfbead`c_b_a^`]_\^[]Z]YSO#ro\Y*&EA y[X}}cceXXZ \\^ppr)$hegdfcfbead`c_b_a^`]_\^[]Z]Y+&@;b_0,>:z=9eegVVX ]]_uux}y1,ifhegdfcfbead`c_b_a^`]_\^[]ZIF{x ~IDFBz+&gghUUW ``cxx{tq84jgifhegdfcfbead`c_b^a^`]_\^[]Z$¿ zsn~ ggiTTW cce||~pl=9khjgifhegdfcfbead`c_b^a^`]_\^[D@,'B? }¾95hhjUUV ffhol?;likhjgifhegdfcfbead`c_b^a^`]_\]Z 2/¿|eaÿE@ggjSST iikpmB>mjlikhjgifhegdfcfbead`c_b^a^`]_\>:fc|73ÿ95hhjQQS kkm¿pmC?nkmjlikhjgifhegdfcfbead`c_b^a^`]\X} };7ÿffiPPR lln¿qnA=nknkmjlikhjgifhegdfcfbead`c_b^a^`]@<¾+' {mjÿtoeefOOP mmpuq>:olnknkmjlikhjgifhegdfcfbead`c_b^a^^[!$¾]YDA63B>VRÿ($bbdMMO oor솆|y95pmolnknkmjlikhjgifhegdfcfbead`c_b^a^IE51¾ÿ¿51#}}__aKKM qqs߅2-pmpmolnknkmjlikhjgifhegdfcfbead`c_b^a^+&% ¾2.'#0+7283,'1,zz}\\^IIK rrtτ*%qnpmpmolnknkmjlikhjgifhegdfcfbead`c_b^TP¾@<HDuuwXXZHHJ ssv roqnpmpmolnknkmjlikhjgifhegdfcfbead`c_b^;7^[¾HDkhoorTTWGGI zz| njroqnpmpmolnknkmjlijgjgifgdgdfcfbead`c_`\$ ~ }jjlQQSKKL ||73^[sproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_RNkh'##]ZSOol}ddgLLM}} azz|XSNKtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_?:(#QNPL~~]]_GGI^Axx{yv;7urtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`c_,' {B=74HC"uuxVVYCCE=ttuvvx&"vsurtqsproqnpmpmolnknkmjkhjgjgifgdgdfcfbead`[W&"RO^[ z.*D@llnQQS@@Bttvuuwք okvsurtqsproqnpmoloknknkmjkhjgjgifgdgdfceac_^ZHDlj |LH})&1-@<¾wuddfKKM>>? ttu zz|FATPwtvsurtqsproqnpmoloknknkmjkhjgjgifgdgdea`\da~LI(% zPM}/, zz|\\^EEGDDEssu o{{~tq84wtwtvsurspsproqnpmoloknknkmjkhjgjgiffcc`| }nl:7¾^[+&84 nnpTTVAABlsst =wwyurwtwtvsurspsproqnpmoloknknklikhjgjggdb`0,FC¾QM?;JGeegLLO==>:wwxuuwㅅ61YVxuwtwtvsurspsproqnpmoloknkmjlikhjgifVSRO¾hdmi$ |zuuw[[]FFH;;<rrszz| zz{lh62yvxuwtwtvsurspsproqnpmoloknkmjlikhGC¾WSC?llnSSUAAC@@B rrs `yy|omyvxuwtwtvsurspsproqnpmoloknkmjli30TQGDwwz``bKKM<<=]uuv &uuw􇇋B=IEywyvxuwtwtvstqspsproqnpmoloknkmj }vt[Wyx~~mmoWWZEEF99:"xxy vvx vsywyvxuwtwtvstqspsproqnpmoloknkro x~#*&wwyddeOOP>>@;;= qqr~~ fyy|-)QMzwywyvxuwtwtvstqspsproqnpmoloknkwt(#eb{yifSPPM63\Zyy{mmpZZ\GGI::<cttu!ttvok"wtzwywyvxuwtwtvstqspsproqnpmolnkmjywxv\X:6"LI!~~~~zz}rruddfPPRAAC778oopyyz {{}}}'"OK{xzwywyvxuwtwtvstqspspropmnkliheda}YVa]d`HD% QO||{{~yy|uuxkkm[[^IIK;;>BBD ppr Fvvxkgtq{xzwywyvxuwtwtvstqspropmjhda^\YVRP]Zc_ead`SP jg {{zz|xxzwwzuuxpprddgRRUCCD779Cuuvttwʁ,'@<|y{xzwywyvxuwtwtvstqspmjdasqTR_\ebeaead`]Y0+RP||vvxuuwttvqqtjjl[[^KKL==?::< oop}}~ awwzvsea|y{xzwywyvxuwtwtvsrofdUS_\ebfceaead`c_D@&!{{wwyttvssvqqtmmpcceRRUCCE88:}}~^uuvssvׁ<8'"xu|y{xzwywyvxuwtwt^\TQ^[dagdfbead`d`c_VS*%51^\yy|uuwrruqqtooqhhk[[]JJL==?99:ooq||} lxxzA=|y|y{xzwywyvxuwtrpPN[Xc`fcfcfbead`d`c_`]B>lh85~~wwzuuvrruppsllnbbdRRTDDE88:uuviuuvssuցa^]Y|y|y{xzwywyvxuNLUS_\dafcfcfbead`c_`]kh)%tt{{~xx{uuwrrupprhhiZZ\JJM==?::;||} bvvy72mj|y|y{xywywyvQOPNVT^[b_c`dadac_`\[W }[Y{{}yy{uuwrrullnaabQQSCCE99:yyy_wwxttv~~"(#vs|y|y{xywywyvLJOMTRYV\Y^[^\\YXUz?<zz|vvyppsggiXXZIIJ==><<=sst Dssvqn1,zw|y|y{xywywb`LJOMRPSQSQSQz)%{{~uuxllo__bOOQBBC889@zz{~~zz|XU95{x|y|yzwywywyvxuwtvsur~\[lk+)}}{{}rruffhUUWGGI<<=LLL vvw #rrtC?<9{y|y{xzwywywyvxuwtwttqxvHEB?0+omxxzlln]]_LLO@@B::; }}~ Zssv4084zw|y{xzwywywyvxuvsroIGSPYUYUD@,(`^ttwddfSSUDDF::<||}X{{| }}yyz,(1-ws|y{xzwywywyvvsOLVT[X\X[WZVTP=9% YV||~mmoZZ[JJK>>?JJK yyz rrs||+&+&ro|y{xzwywywyvUR[X\Y\Y\X[WZVXTWTKH0+VSssu``bOOQAAD<8~~ issu50JF{x{xzwTR_\ig]Z_\_\^[]Z]Z\X\X[WYUXTWTWTJFdaoorZZ\JJL>>@vvwf }} uuwC?2-qn{x}zVSa^fchexua]a^a^`]_\^[]Z]Y\X\X[WYUXTWTWTusuux``bNNQAAC^^`  vvxwwzXURN{xzxnlrowtwvXUb_hehegdfcfbead`c_b_a^`]_\^[]Z]Y\X\X[WYUXTSP&"||ffhRRUEEGGGI rruyy{qn",'da|yrotqtqsprp[Ydbififhegdfcfbead`c_b_a^`]_\^[]Z]Y\X\X[WYUC?>:kknXXZIIKEEG $rrsyy|6273li|zvsvsvsurtqmka^hejgjgifhegdfcfbead`c_b_a^`]_\^[]Z]Y\X\XZV%!fcppr]]^KKNEEF! &qqryy|a^73d`ywyvxuwtvsurtqb_gdkhlikhjgifhegdfcfbead`c_b^a^`]_\^[]Z]Y\X2.2-ssv__bPPQGGI$ &rrsxx{<8,(PLrnxuwtvsurjglimjmjlikhjgifhegdfcfbead`c_b^a^`]_\^[[X2.khuuxcceRRTJJL$ $sstwwyvs,(61XUrovsurnkoloknknkmjlikhjgifhegdfcfbead`c_b^a^_\GC"NJxx{eehUUWNNQ! wwyuuwjh'#-(EA]Yqnsproqnpmpmolnknkmjlikhjgifhegdfcfbeac_SO;6C?wwzffiWWYUUW ssunk.)&!3/A=OK[W`]fcifnkmjifc_b^\YQMEA;7-(JFvvyffhXXZmmo irrs||~B>%!eauuwffi[[\톆g  ;rrtwwxli72OKssveeh]]_Բ9  }}ssu~~wsGC!/+a^~~pprddgjjl Zqqsxxz~{[W:6!*%HDrnyy|llpddgߓX  #rru{{}~{{wzw{w{x}zuuxkkmrru!  Dttvttv}}xx{pprllnƸB  bssuuux~~zz|ssunnq֛`  lssuuuv}}yy|ssvppsךj  attussuzz}~~xxzrrurrtɡ_  Fzz|qqtvvx}}zz}ttvqqsxx{E  !fttvrrsvvx{{}~~yy|uuxqqsssve  &`vvxqqtrruwwy||~zz}vvyssurrsvvy_%  =ovvyqqspprssuvvxyy{{{}}}~~{{}yy{vvyttvqqtrruwwyn<  Aaxxzrrtqqsqqsrrsqqsqqsrrtqqsrrsqqtrrsqqtrrtssvyy{a@   ?????????(@ B;[p}}o[;#j~~]]_``bffhjjlnnpppsppsooqllohhjcce]]_WWYTTUvvwj"nllneehqqtyy{lln``aUUW^^_Njm#eeguuxnno]]_QQS~~"hhk~~uuw``bQQSwwxXffi}}]ZB>'"":6ROvtttv]]_RRS㏏V{{}ooqfc($TQkknUUWqqr~~,ddfzz}95*&~yy{]]_ZZ[Ӟ*@[[]邂40'"ddfQQR饥>GXXY񃃆QN/7$&u%(?;iikQQS񥥥E@RRT'"5@hSn~kkmRRS񦦧>,MMOttwywG\^xLcLcDW/7VsPi'+2;4?a-3H^6B,2I`=LPi,2khjjlRRS韟*RRTggifdcPixe>NWuI_]}Wu%( ci"#.5Xv>Nm.5~XTffh[[]ӘiijYY[dbnN^Rm^2;I_,2>NcWu>Nn7D!!XT__attuXKKMqqspnqBTd>NMd\{@QUr+0Pi>MLcARWu>N:GG\Ql%)i[zSnli~~XXZVFFG__a}}m2;d>NCVyWu>N2-FB*&qqrVVW㩩wwyOOQmmp'#Md@QTp*.VsOhFZTpA=>:m>N94bbdzz|$CCE__aqqt{{}FC62gc$'#$|62@<{{~VVX"wwxPPRhhkppsxx{po;651$ ffiCCE]]`lloppr40jfÿYT(#}}WWY񪪫pNNPhhjoorttwmlC>ÿGB]X"ddgmUUV\\^ppsuux<9ÿnj-)vvzeegǠ%JJLjjlzz|}}ÿok]]_"lXXZyy|c`1-tpmjYVHDÿa^iikjrrthhj<8A=PKD?WS:5B=mh*%!wwz}}~ RRTxx{UQ]Z\Y[W;6<8},'pk]]_ߩ[[\:5a^_\]Z\YWSNJ50IDaad>hhjtrTPc_a^_\]Z\X40 ]ZUQc`hhj;^ttw`]daeac_a^_\]ZQMJE;7toC?nnq[rMI"hefceac_a^_\]Z)$pl@<|xea&!ttvoEA)$jghefceac_a^_\IEebspvvy}C?,'lijghefceac_a^_\#a^¿;7ZVÿ)%wwzD@-(mjlijghefceac_a^GCC?^ZÿuuwHD)%olmjlijghefceac_`]&!"¾}¾GBppr}rTP#pmolmjlijghefceac_PM¾GC"(#*%iikp^ifqnpmolmjlijggdfceac_61}{;7IE``b[>earopmolmjkhifgdfcea_["62`]73yvwsc`UUW;SOtqropmolmjkhifgdfceaSO|2-VS(#JJL }}त% <8vstqropmokmjkhifgdfba]JGxu`]" B>@<ooqDDFߧQM!wtvsspropmokmjkhifmk-*`^¾VRSO&"]]_iijm`]wtvsspropmokmjkhA=¾+'jf83TQ{{~MMOjwwy&#:6yvwtvsspropmokmjusif}|ggiAAC# Ȟ]YnkyvwturspropmokkhB?2/-)xxzUUWMMNǦq@񱱲!/*zwzwyvwt{x[Ya_fbd`[W-(nk^\ttwqqteegGGIqqr&~~pmLH{xzwyvlk\Zecfbd`a^TQ95zz}ttvmmoVVX==>#@<b^{xyw~|PN[X`]`]fc!yx{{}ssvcceFFHttt||㠠(#jg{xyw{z[Zom}}nnqRRU@@A㴴Z!jg{xywxvwtsrHD4/a_||~``bCCDX d`{xywxu|zZW\XXTD@*&ZXooqMMOffgԘPL{x[X^[]Y\XYUWTC?`]~~XXZMMOӷ.zz|靝(#61vsljdausheb^`]^[]Y[WYUVStrccfGGI鶶,B{{~񞞡@<VSvturgeheifgdfbd`b_`]^[]Y[WGB,(nnpLLN񳳴@I{{}񜜟qn! HDliwturhelikhifgdfbd`b^`]^[QN[XuuxSSU񳳴GBzz|閖UR/+LHnkurolnkmjkhifgdfbd`TP73DAxx{YY\鷷@.ԍ]Z#)$62=9A=A==973,'QMwwyggiӿ,RN&!IE~rru Z{{}㌌okZVMIIEIELHVRmiqqs㮮X{{~wwy&zz}񊊍wwz񚚜$q~~{{~ȱp &myy{||~||~xx{l% >^rr^> ????(0` %?g}}~g>&yyy{iikuuw~~ssuggi[[]nnoÃx%Cqqtooq[[]nnoB1~~||~yy{^^`ggh/ uux{yIF&"!@M$&>N"#n?P2-wwy^^`ّ ddettw,'p"#d+1ZzgRmFY(-WtRm_6A(+enhn#%]~$ssueeg ^^a+'{u.5Zz[{PjZxenI_NgVrUrdSn=LXvuRmPi$hhj~~~2NNPvvy84ju+0Zzs$&d422-2.^^_/aacaac||~QN =MAR"",3G\?O/795ea*'e:5ZW||kklDNNPllnwwzqpid~)%ddfBiik__annq{{}51+'OJ1,ssu(MMNkkmrrtkj! _[wscce%z]]_vvx@<tp=8yy{xhhiqqsURTQ?;3.uuw•XXZtr:6QMB=jfso:550c_¿C>eegAjjlVS51_\]Z[W.)[W72e`KGrru>j}}95UQb^_\]ZKGmi~zUQ$ g&!ebd`b^_\\Y$50zv~]X$ "hefcd`a^_\B>rmwt'"khhefcd`a^]Za]IF#$ '"mjkhhefcd`a^@<~zSP=9#olmjkhhefcd`_["þnjtoso2-*&qmolmjkhhefcd`MIpm{wwyjB>fcqnolmjkhhefcd`62;7)&WT0,(#oorgBdaTPtqqnolmjkhhefb_[!d``]74zw:6IE\\^?:5vsspqnolmjjggdJGvs~¾$nlLLNĭ% spvsspqnolmjuq.)lhoor^^`Í{[XROxuvsspqnolPM!lili41WWYy)&!wtxuvsspqnnkkh#a_~~mmpDDF&QMOKzwxuvsspb__[0,+'xx|ssuYY\aacF!mjzwxua^fbc_FBhda`ssuhhjFFHCyv,(xtzwUR`]a^xuDA||qqtWWY\\^3PL73yvzx_\1-ggjEEG1=973xuywxuTQKG2.)$zz}QQS}}~ =9.*ol]Z\YZVTP0,+'cce^^` کPMYU\Zomc_a^^[\YZVEA<8ssuUUW٤-ᩩ{x!0,|ywuvsfcjggdebc``]^[[W+'da]]_ഴ*-ڣQN$EAhenklijggdebb^LI)%EAeegڷ+]Y%!&"2-62622-($ TQxxz heE@,')$@N\|PjcDV_NfnkrrsVffhmkSoWtQk"#So6A1:*/-5BT3=DN3;6Cyy{T ZZ\vvyyx%'195@2<rna].7GIkkmߓ h``cvvx51UQ;7geegoorhgokHD|ttv̚&aacFC50<8c_YUQM||~$f~~")%SO=8!IE+&\Wb^dUQ_\[X '#KGjf^Zfbc__\<7$ sn)%HC+'}!jgfcc_ZWhd]Yvr!mjjgfcc_95gdhdLHrmpmmjjgfc_[_\ÿ,(yy{gdpmmjiffcNJ95hepmxv:6QMuuwg)%ROtqpmmjif|yVS{xfbXTKFyyze&^[2.wttqpmmjgeTO@;@=\\^$hewtsppm}MIwtecwwz\\]͔iNJ2.zwwtc`KFSO-)uux]]_yyzg "QMzw[Yc_'"jinnpSSUߔ W\Y~;8 _]YY[URN}da[WHD"^\ttvnnoǻ"83khspb^^[[W3/usjjlƗ ǷPL95ZVliifeb^[@<EAvvxƧb_*%#+'+'$ %![X Wర੩V iͫ͜h &gf&??qdevelop-v0.28/resources/images/.svn/text-base/CVnamespace.png.svn-base0000444000175000017500000000046611362261067025103 0ustar jlbrdjlbrdPNG  IHDRabKGD pHYs  d_tIME 1hIDATx!@DP1 E5w@ ^4K* ^L %BMɚ I kRTEr4`9o6 H~s#IZ y~5{o(io?:hg .}39sN$vJ$-9 νnhw_IENDB`qdevelop-v0.28/resources/images/.svn/text-base/edit.png.svn-base0000444000175000017500000000206411362261067023637 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<{&&Fl? fO_t/E203<9}gS_c?tuk=?Վ2`€0}1g`A* /.`&FL@? q P-'O~,ĥ  Mf`r^p26gqb?.}D2pl O _>c`pmIKc@x 's0020|eF"!ڌGX+JϜ@001ǩ $v! 0\A4>  ]~7Ͽ@[@I+A`i+tނTf`pٌl&v6kA95 #~ nd`÷o@v gxΦΠ'_!bd@nw` àu <  \~ 6f oAZR@ "+:((=P010|cQ'?~]`FD Е Ϯ=d?`-P?ܑ f??d b`aOڵ r0Ĉ{@X# W~}S0S} @O UcYpWj-=jzՄp H wz*{6 H&T%s%)ƄJ()x -!:Ӑ  Dd?d٩1/SPB$zli|;cs߮o0gZ3Z* Ց>me/8ɢK $'@qvQ P@^s-D7YP8` X/ Wyf޻~]U7iYdLhe*L3YQ裐 hI Ց():74Gǵi NKzb?5D>nyᛚ"ۦyTWlX9 ^II_Mȗ[}`э#]ݦs3v UqB :֨nICO6㾳I0"}qqMj*/챬S@`QWmԨt"sAAp|Q0|Jʕ2g$KёlEc){x?x s4_UӐEH{~jrK4FKZR%{c_m{1JvdIz2v}?O%uW )+k1˚`p }}t+(8ް+[ L^s]H[ ԃmmdcP7 $_Z00Ϸ鳵i%,3&ZdB 9o%XA GĠ6slCNFC!e b(D7~N/<=bhWNk5x.;PSkZ]uʂ }_\0-q: 85`1C‹W󺚓[AY/WEt8u5\ʕ6ݗ+/\⸱CYh%( <.*_$lԵ1)=䯽)ޢЉC93y9ZZ]pg\_Hk)!!dSɦ9Rp W<8VK?Li&sIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprotected_slot.png.svn-base0000444000175000017500000000054111362261067026173 0ustar jlbrdjlbrdPNG  IHDRabKGDiBըIDATxڥ 0Dopq0G &pR%r/8k jöTA"%M_@jB\s GשɚTx06f'dMP>cz:@0LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ3zTXtSignaturex376H23K361N3N425142H5K20LM5LL2UNVIENDB`qdevelop-v0.28/resources/images/.svn/text-base/qmessagebox-warn.png.svn-base0000444000175000017500000000051111362261067026170 0ustar jlbrdjlbrdPNG  IHDR('Jv pHYsBB PLTE7^IDAT8 ePfJʥ8eDY, X $l $YYKyu/'7JtEXtsignature57bcaaf72a148878a375e91916d3b154c4913d0bb45253ed921719c5d9bfbdb7IENDB`qdevelop-v0.28/resources/images/.svn/text-base/editpaste.png.svn-base0000444000175000017500000000156111362261067024675 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd:;)d.TT͘?c`5kkG7 k cmPR 0o&.8zB\ o?u4c?Ó'*c8v詁t"×7vi;]5Ħ X _ _2pIr3p3<9w:b/1=o8&qwd{]}W̙ ɞb?L- ϟ _|c`bz  offF fc07`aa7'O^Dˏ`WǏ_>}p@Żf`@}&͵@L`6  6 b߿203sb-0s2oXvvV8 I rϟ?lVVf?A@ kDt\/f! a0@z߯D 2?`0(e\ ?e3@ hZ|&_1N "Ԑ] e-/p` [@, emF|.xQ 1!n8@I%yAqMIENDB`qdevelop-v0.28/resources/images/.svn/text-base/desindente.png.svn-base0000444000175000017500000000151511362261067025034 0ustar jlbrdjlbrdPNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe< PLTEȌ̧~x_BeGТڲ߳gnjʥ}kyW^ҬУ]fHy_Cʦ}ө{ܶoO컆ޭӢϩڭ{֞ᲀ淃ʕ{aDĠxȟs]qQۣċjK]轎dۤiƟt߷—z`CҨ{]oONJmMڭ|mMšyرʐۦȒjϞ}Yױ渆Р칃gIh؎pPo`tRNSsmCGIDATxb'!>/ B&A D"h@!)   Ⱊ@pqM 0c&TAv NA&  YSP݇!b3H03@@qz\:VN| L&C|p /##_x 24X][6FBNU*9P(P<U׌[CW(p XHJz*cIDže Dl*a7 "`  @M &A scoIENDB`qdevelop-v0.28/resources/images/.svn/text-base/filesaveas.png.svn-base0000444000175000017500000000216111362261067025032 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME.*'#IDATxՓk]Us97KiK+Z:+ gӂ8с R,RŖU֛>ҤI{9g~8HL &koq>d< js}=u飹Ǐ8ܝ~q7vՑW5ogN;Nց>~H\'x$#M*Xk1b׎׸)Q] vʋ? /wi5}wĕcys<0k/ d_^'1@ӳxu҃77MPRN&4kd[?JudZ v/1;tF,Fa02yh7 # ;좹Ph ]HDrs:>̆ޕfq .nzc4 u F,{/>AmpWT{`v^rm/KC忁-"VVr::uXxv4A Ը8-|-yRkUiq:<6vo\BpRk`6\ba}UŦ˝jmG6m `zMKhmpR &Z0"tGpS5l64 mFpȖ93q|1B!b*'XV?"K\#E@7!n5"Tih2@k-8BS/07FR @!lS=13Ac ;>1b)CDIP݅2۱"OƄ#_;^'Z Zɲf@ұ4O64@TD\>S̃,%La#Mch@=LD)M+| bq# w$Pݛb#Y|R ei{7r Ww3!ՑBG[k婢$[ja/ 4 `D$$leXDAฬ +ǒ5D_ ; wP$/!v3{wP~'J/P<*LzTXtSoftwarexsPMLOMLLV033P7070TH.,.tȭ,.LK-K)-+K|KJ1zTXtSignaturex321M4M106H412456L50J476H"  IENDB`qdevelop-v0.28/resources/images/.svn/text-base/dbgparam.png.svn-base0000444000175000017500000000023211362261067024462 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGDiBըOIDATxc``PL8E%DW;8tq h7Q DP#j%7"\EQaVuIENDB`qdevelop-v0.28/resources/images/.svn/text-base/CVprotected_enum.png.svn-base0000444000175000017500000000052111362261067026154 0ustar jlbrdjlbrdPNG  IHDRhtIME  \ pHYsN N }gAMA aIDATxڍR 0 Q݁T E%8;I\^Ԅ<(vll|e"ȕH`v<9 *04Hk>ePdG87`!PT/B}ǰq2n, TR5J"o\I;J@r:=Rwgdn m?iUSZ3J%s*:LD b J4IENDB`qdevelop-v0.28/resources/images/.svn/text-base/warning.png.svn-base0000444000175000017500000000147511362261067024364 0ustar jlbrdjlbrdPNG  IHDRasRGBbKGD pHYsN N }tIME .IDAT8˅]kew>v7d;I?nMccD* AX BBEz#AATT$Ub̼ASCÛII5ϽO/vji6q&IojǭgWV7>EWjkt&y5ϋG 8iry/Y r;Aᴿ "ҬwFGjq4n/G^Ϲ>T\c_M෵ڵ!N Vv ҄󮫧 EG"<3XN Z@z| f2Wqy|PptZ:9 rAYarŅΆ;E95?fYY{kf-‰_HRFc2@E< wS+NV݄u9L_;oUz/!A߿MwuYw`t6FG3]ZѱW^`]T@GwP"ilH͌[qy{ {B#Z ɡ!v" kx6!6J=0VzҢ%0r̎Xr+~܎H #qf{+XԳT̘ ݐ0~l\=v}K#2DŽ@:aA.xtX KGmBTwWюIMscZwv߂!hn n5¹L)T-9̜2Qz ǂc`0O Q[S KU ''ek|ݎN"||ýҝۚV\C'kGKJ\Kʣylh$ɰN"U+ bR򑶢; J q!L=j~;NG/7uďo \E[IENDB`qdevelop-v0.28/resources/images/.svn/text-base/doc.png.svn-base0000444000175000017500000000265611362261067023466 0ustar jlbrdjlbrdPNG  IHDR pHYs  gAMA|Q cHRMz%u0`:o_FPLTEf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3¾tyftZwuq~zָg_RΣܸǬն¾۷M$^!tRNSS% IDATxb8+Elb{߯& Aj|e 3f &g+3TͿ yk:@?#3?^QyR(@P]30@P̏ALa`XD  XJD?12 ">2T@s>:_  j69f`FjZRIENDB`qdevelop-v0.28/resources/images/.svn/text-base/undo.png.svn-base0000444000175000017500000000177211362261067023664 0ustar jlbrdjlbrdPNG  IHDRĴl;gAMA abKGD pHYs ?@"tIME 85G _ wIDATxKlUvxAB-CESDixURTV *U."Ab .*  RBB MidIOa1wm=|sÛth'$60`T4̌e`My$kϿ1F7r̦ b`K-^yIhj ;3"ܾܶ0g_~MSHfk@ I:d&*5ESs\ջ?PCIhJgM]qn5O{ A MbW'aT8A ')\ ɋjx7ynixh z {^8Q,qHp Xnc=QK2?M4 ”8*?"|A;Αʅ 1RN7io-t _ =E9xv#lDݮ{8,-q9lIJG}/;k$><2 ][u8;1-uF:RϗTsFJWױҫ !x#/c>7R@]bui{ejQn; [DCNĘ&".Q`yjm;"M{4@<)R% W ^7z@}b+zeqmg[xL?\)b灀W=P'NxL;peDڭ#IDATxb?0222[kk]`i`` S yr[M`2A|"`&&|A5x ï_> Y(5HÇpq" ߾}[ 0| `j;0| ʐҖb:Dɓ 7XS @$ŷo?[WWgx%üy/{1++L-@o~0=zdÃ/Vs(8iRd}2쬌l l, ; ?J0xxX ]l`~p\b,>V "@SYg`>A./SL V 6d{Ʌ:n$H[k6o%<afΜ6cx,Ý @pg̏vp ëOs6`ϩ _ J7?n0@S?\e2$ ?2AґABAݗ_ŝs>M. ?޽0_ssa75?.pf`/;U7VN<@I.)y)} a?gq?3/o _awLk 0n<$:DZ`d(`de%0L{\)31~e`ï? k?}`CzW'y~^V?3Lsp03ԴOťQ mWh0 bre01/`><҆W .9< @,PSOx`g=Ϡ&`k(ۅ{/1  x >. rx#? 7d:n[34)P X]'+SI~,,u _ab^IZjs  0l@[Ocg``8l0;y hB {^3(2I0p1|} ~gÏ j ?YYN݃wWeE @+[Kt޾/g7@9×@O ݇ o^d ><c޿ L˟?C` +[Dn=a`^ w |+o X-|d-@Wbcq`1?k1L@@?`|pp`a`xdx/@~  h·^𗅝50g˰ ps3?Ë/ <@H*$Y>A?x1( 03߷ 7`'W U*;&HI]7)w+eԸJNFvrn{U1?qdevelop-v0.28/resources/images/.svn/text-base/breakpoint.png.svn-base0000444000175000017500000000045211362261067025047 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME!$+IDATx CEn:RS"uR!?X:>e&0Jo*0|"8 ƨz k( @^{)gB\4GʜNsJ4 GjW8֓ymn1-g\ֵc _^nA-p <^i*vǿ;OҠlIENDB`qdevelop-v0.28/resources/images/.svn/text-base/fileprint.png.svn-base0000444000175000017500000000175111362261067024710 0ustar jlbrdjlbrdPNG  IHDRĴl;bKGD pHYs  ~tIME G?+vIDATxڝK#WǿoEЎ]j!n]TY<RxѓCٿR(=C!K=UC!b!֚D7L{uBq?̏y}?%h񙙙ƺRJpAA&IOA[u]CCCZcsu8!8>>`Bȭ`qj5B9#Z)7JqwŝVJczs~Ce3 Z1b듑H$Fijjmm{gX,pt:ު뫾wvvUU!s0朣Z>issnɳ'ګVAoo###Ju707`08977f2M?}E(~5M#̓!^Ͳ,qttTlll|Gt׵Hkmbeee5|Dcp8 utt%O+pA]]] (Pz-9PJSmeAq+xn+la\ !cs\[BTUV*a_@2vK%wA !PUDxi˿iri8<OH)ϳZ,RS.w Bz<iUU*E|Kχl6LT*k @r\.s XsE]/{'ɗxKwsG;ں'xJBPX0O-IENDB`qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Turkish.ts.svn-base0000444000175000017500000045502311362261067027267 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Sürüm</span></p></body></html> OK Tamam <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Varolan Dosyaları Ekle Project or Scope : Proje veya Alan : File : Dosya : Copy files here: Dosyaları buraya kopyala: ... ... OK Tamam Cancel İptal AddExistantImpl Enter a filename. Bir dosya adı girin. Cancel İptal Enter a location destination. Bir hedef konum seçin. Choose a directory Bir dizin seçin Choose the file to add Eklenecek dosyayı seçin The file %1 doesn't exist. %1 adlı dosya mevcut değil. Unable to copy %1 %1 kopyalanamıyor Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Yeni Öğe Ekle Files Dosyalar Translation Çeviri Resources Veri Kaynakları Dialog Diyalog Header Başlık Sources Kaynaklar Project or Scope: Proje veya Alan: File Name : Dosya Adı : Location : Konum : newfile.cpp yenidosya.cpp ... ... OK Tamam Cancel İptal AddNewClass Add New Class Yeni Sınıf Ekle OK Tamam Cancel İptal Inheritance Kalıtım Inherits another class Başka bir sınıfı miras alır Ancestor: Ata: Ancestor's include filename: Ataya ait başlık dosyası: Scope: Alan: Filenames Dosya Adları Header filename: Başlık dosyaları: Implementation filename: Tanım dosyaları: Location : Konum: ... ... Project or Scope: Proje veya Alan: Class name: Sınıf adı: Constructor arguments: Yapıcı argümanları: Virtual destructor Sanal yıkıcı AddNewClassImpl Choose the file location Dosya konumunu seçin Cancel İptal Unable to create file. Dosya oluşturulamıyor. The file "%1" already exists. "%1" dosyası zaten var. AddNewClassMethod Add New Method Yeni Metod Ekle Method Name: Metod adı: Return type: Dönüş tipi: Parameters: Parametreler: Scope: Alan: Inline Virtual Static Pure OK Tamam Cancel İptal AddNewClassMethodImpl An implementation file is required. Bir tanım dosyası gerekli. Cancel İptal Add New Method in class %1 %1 sınıfına yeni metod ekle %1 already exists in class %2. %2 sınıfında %1 metodu zaten var. AddNewClassVariable Add New Variable Yeni Değişken Ekle Create get/set methods get/set metodları oluştur inline set method set metodu get method get metodu OK Tamam Cancel İptal Variable Name: Değişken adı: Type: Tip: Scope: Alan: AddNewClassVariableImpl Cancel İptal %1 already exists in class %2. %1 değişkeni %2 sınıfında zaten var. AddNewImpl Choose the file location Dosya konumunu seçin The suffix of the file is not correct. Dosya soneki doğru değil. Cancel İptal header başlık Yes Evet No Hayır Also create the file %1 in same location ? Aynı konumda %1 dosyasını da oluşturmak ister misiniz? source kaynak AddScope Add New Scope Yeni Alan Ekle New Scope Yeni Alan win32 debug unix release mac other Project or Scope : Proje veya Alan: OK Tamam Cancel İptal AddSetGet Add get/set methods get/set metodları ekle OK Tamam Cancel İptal Create get/set methods for get/set metodları oluştur inline set method set metodu get method get metodu AddSetGetImpl Cancel İptal BreakpointCondition Dialog Diyalog Condition : Koşul: is true (breakpoint) doğru olduğunda (kesme noktası) has changed (watchpoint) değiştiğinde (izleme noktası) Build Update project Projeyi güncelle Clean Project Projeyi Temizle Build İnşa Et Build stopped İnşa durdu Compilation of %1... %1 derleniyor... Debug Running... Çalıştırılıyor... Exited normally Normal bir şekilde sonlandı Debug... Hata Ayıkla... Debug exited Hata ayıklama bitti Error: Unable to evaluate value Hata: Değer değerlendirilemiyor Exited with error code %1 Editor Refresh classes and methods lists Sınıf ve metod listelerini yenile What do you want to do? Ne yapmak istiyorsunuz? Overwrite Üzerine Yaz Reload File Dosyayı Yeniden Yükle The file "%1" was modified outside editor. "%1" dosyası editör dışında bir yerde değiştirilmiş. Open %1 %1 dosyasını aç %1 replacement(s) made. %1 değiştirme yapıldı. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Tamam Cancel İptal Choose program to Debug : Hatası ayıklanacak programı seçin : Don't ask question anymore Daha fazla soru sorma FindFile Find in Files Dosyalarda Bul Pattern: Desen: Case Sensitive Büyük/küçük harf duyarlı Whole words Tam sözcükler Recursive Özyinelemeli *.cpp; *.h *.ui; *.qrc; *.txt Files: Dosyalar: ... ... Find in: Burada bul: &Find &Bul &Close &Kapat Replace found text Replace with: FindFileImpl Choose a directory Bir dizin seçin &Find &Bul &Stop &Dur Line Satır File Dosya Cannot open temporary file %1 FindWidget Form Previous Önceki Next Sonraki Case Sensitive Büyük/Küçük harf duyarlı Whole words Tam sözcükler Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor GotoLine Goto Line Satıra Git <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Satıra Git:</span></p></body></html> OK Tamam Cancel İptal InitCompletion Unable to launch %1 %1 çalıştırılamadı Unable to open %1 %1 açılamadı LineNumbers Toogle Bookmark Yer İmi Ekle/Kaldır Toogle Breakpoint Kesme Noktası Ekle/Kaldır Breakpoint Condition... Kesme Noktası Koşulu... LogBuild error hata warning uyarı error Compiler message hata undefined reference to Linker message warning Compiler message uyarı Main QDevelop &? &? &Debug &Hata Ayıkla &Build &İnşa Et &Edit &Düzen Plugins Eklentiler &View &Görünüm &File &Dosya &Project &Proje Outputs Çıktılar Build İnşa Et Name Ad Type Tip Address Adres Value Değer ... ... Project Explorer Proje Gezgini Files Dosyalar Classes Sınıflar Files toolbar Dosya Araç Çubuğu Edit Toolbar Düzen Araç Çubuğu &New Project... &Yeni Proje... &New File... &Yeni Dosya... New File Yeni Dosya &File... &Dosya... &Open Project... Proje &Aç... &Close All Files &Tüm Dosyaları Kapat &Save File Dosyayı &Kaydet Ctrl+S &Quit &Çık Undo Geri Al Ctrl+Z Redo Yinele Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Tümünü Seç Ctrl+A Ctrl+F Ctrl+R Ctrl+Shift+F Add New Item Yeni Öğe Ekle Ctrl+N Add Existing Files Varolan Dosyaları Ekle New Folder Yeni Klasör Project Properties Proje Özellikleri Clean Temizle Rebuild Yeniden İnşa Et Compile File Dosyayı Derle Shift+F7 Start Program Programı Başlat Shift+F5 Step Into İçeri adım at F11 Step Over Adım at F10 Calls Stack Çağrı Yığını &Open... &Aç... Ctrl+O F3 Stop Dur F6 Breakpoints... Kesme Noktaları... Indent selection Seçimi Girintile Tab Unindent selection Seçim Girintisini Azalt Shift+Tab F1 F7 Save Project As... Projeyi Farklı Kaydet... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Yorum İşareti Ekle Uncomment Yorum İşaretini Kaldır Complete Code Kodu Tamamla Ctrl+Space Toggle &Bookmark &Yer İmi Ekle/Kaldır Toggle Bookmark Yer İmi Ekle/Kaldır Ctrl+B Clear &All Bookmarks &Tüm Yer İmlerini Sil Ctrl+F2 F2 Shift+F2 Shift+F3 Goto matching bracket Eşleşen paranteze git Ctrl+[ Foo Hede &Print... &Yazdır... Alt+Shift+O &Bookmarks Yer İ&mleri &Last Projects &Son Projeler B&uild &Derle Las&t Files &Son Dosyalar &Tools &Araçlar &Plugins settings &Eklenti ayarları Ed&itors D&üzenleyiciler 1 Build and Debug Toolbar Derleme ve Hata Ayıklama Araç Çubuğu Call Stacks Çağrı Yığınları Registers Yazmaçlar Save File &as... Dosyayı &Farklı Kaydet... Save A&ll &Tümünü Kaydet &Undo &Geri Al &Redo &Yinele Cu&t &Kes &Copy &Kopyala &Paste Ya&pıştır &Find... &Bul... &Replace... &Değiştir... &Find in Files... Dosyalarda &Bul... Add New &Item... Yeni Öğe &Ekle... Add Existing &Files... Mevcut Dosyaları &Ekle... Project &Properties... Proje &Özellikleri... &Clean &Temizle &Rebuild &Yeniden Derle S&tart Program Programı &Başlat Step &Into İ&çeri Adım At Step O&ver &Adım At &Calls Stack &Çağrı Yığınları &Options... &Seçenekler... &Parameters... &Parametreler... &About... &Hakkında... About &Qt... &Qt Hakkında... Find &Next &Sonrakini Bul &Stop &Dur &Stop Build İnşayı &Durdur &Help Current Qt Word &Geçerli Qt Sözcüğü Hakkında Yardım &Reset Executables List Yürütülebilir Dosya Listesini &Sıfırla &Save Project Projeyi &Kaydet C&lose Project Projeyi Ka&pat Add &Scope... &Alan Ekle... Step &Out D&ışarı Adım At &Close Current Editor Geçerli Düzenleyiciyi &Kapat &Next Tab &Sonraki Sekme &Previous Tab &Önceki Sekme &Switch to Header/Sources Başlık/Kaynak Dosyasına &Geç Set &Focus to Editor Düzenleyiciye &Odaklan Toggle &breakpoint &Kesme noktası ekle/kaldır Goto &Methods List &Metod Listesine Git Configure &Shortcuts... Kısa&yolları Yapılandır... &Goto Line... &Satıra Git... Toggle Co&mments Yoru&mları Ekle/Kaldır E&xternal Tools... &Harici Araçlar... &Next Bookmark &Sonraki Yer İmi &Previous Bookmark &Önceki Yer İmi Find Pr&evious &Öncekini Bul Goto matching &bracket E&şleşen Paranteze Git Add New &Class... Yeni &Sınıf Ekle... Open F&ile in project... Proje İçindeki Bir Dosyayı A&ç... Goto &Implementation &Tanıma Git Goto &Declaration &Duyuruya Git &Rebuild Qt classes database Qt Sınıfları &Veritabanını Yeniden Oluştur Execute &qmake &qmake'i Çalıştır Show Maximized B&üyütülmüş Göster &Editor mode &Düzenleyici Kipi Ctrl+E Next Warning/Error &Sonraki Uyarı/Hata F4 Previous Warning/Error &Önceki Uyarı/Hata Shift+F4 Clear all Warnings/Errors Tüm Uyarı ve Hataları Temi&zle &Toolbars Araç &Çubukları Dock windows Yüzen pencereler Local Variables Yerel Değişkenler Other Variables Diğer Değişkenler Find in files Dosyalarda bul Full view Tam görünüm Minimal view Minimal görünüm DocksWindow Dock Windows Yüzen Pencereler New submenu > Yeni altmenü a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Oluşturulacak dosyayı seçin Files Dosyalar Cancel İptal Do you want to quit QDevelop ? QDevelop'tan çıkmak istiyor musunuz? Yes Evet No Hayır Choose a file to open Açmak için bir dosya seçin Sources Kaynaklar Projects Projeler Texts Metinler All Files Tüm Dosyalar Choose a project to open Açmak için bir proje seçin Files (*.cpp *.h *.txt *.* *) Dosyalar (*.cpp *.h *.txt *.* *) Stop Dur Build finished without error İnşa hatasız bitti Build finished with İnşa sonuçları error(s) hata and ve warning(s) uyarı Start Başla The project has been modified, do you want to save your changes ? Proje değiştirildi. Değişiklikleri kaydetmek istiyor musunuz? Stop debugging ? Hata ayıklama sonlansın mı? run Build. İnşayı başlat. Ok Tamam Shift+F5 F5 Abort Durdur Stopping is not possible under Windows. Put breakpoints. Windows altında durdurmak mümkün değil. Kesme noktaları koyun. Continue Devam &%1 %2 &%1 %2 New Variable: Yeni Değişken: The file "%1" already exists in directory. "%1" dosyası dizin içinde zaten mevcut. Unable to create %1 %1 oluşturulamadı The project %1 doesn't exist. %1 projesi mevcut değil. Properties of %1... %1 Özellikleri... The program doesn't exist, Program mevcut değil, The variable "%1" already exists. "%1" değişkeni zaten mevcut. The Qt include directory doesn't exist, You can change in Options dialog. Qt include dizini mevcut değil. Seçenekler penceresinden dizin yolunu değiştirebilirsiniz. The Qt database building is already in progress. Qt veritabanı şu an zaten oluşturulmakta. The Qt classes database build is ended. Qt veritabanı oluşturma işlemi bitti. Version %1 Sürüm %1 Cannot launch Linguist NewImplementation New Implementation Yeni Tanım Class Name : Sınıf Adı : File Name : Dosya Adı : Location : Konum : ... ... &Ok &Tamam C&ancel &İptal NewProject New project creation Yeni proje oluşturma Template Şablon Application with Dialog Diyaloglu Uygulama Application with Main Window Ana Pencereli Uygulama Properties Özellikler Parent project : Üst proje : Project name : Proje adı : Location : Konum : ... ... Project creation on : Projenin oluşturulacağı yer: Version Sürüm Debug Version Hata Ayıklama Sürümü Release Version Yayımlanma Sürümü OK Tamam Cancel İptal Sub-directories Alt dizinler Dialogs: Diyaloglar: Executable: Çalışabilir dosya: ui bin sources: kaynaklar: Objects: Nesneler: src build Inheritance subclassing Kalıtım alt sınıflama Object name: Nesne adı: File name: Dosya adı: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diyalog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Alt Sınıf:</span></p></body></html> Empty or master project Boş ya da temel proje NewProjectImpl Choose the project directory Proje dizinini seçin The directory "%1" cannot be created "%1" dizini oluşturulamadı Cancel İptal The project cannot be created Proje oluşturulamıyor Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Diyalog OK Tamam Cancel İptal Qt Variables Qt Değişkenleri User Variable Kullanıcı değişkeni Variable : Değişken : New Variable : Yeni Değişken : Operator : İşleç: = += -= *= ~= OpenFile Open File in Project Projedeki Bir Dosyayı Aç OK Tamam Cancel İptal Options Options Seçenekler General Genel Prompt before quit Çıkmadan önce sor Show classes explorer Sınıf gezginini göster Interval between updates: Güncelleme sıklığı: seconds saniye Default projects directory: Öntanımlı proje dizini: User plugins directory: Kullanıcı eklentileri dizini: ... ... Editor Düzenleyici options seçenekler Matching ( and { Eşleşen ( ve { Complete Code Kodu Tamamla Selection border Seçim kenarlığı Line numbers Satır numaraları Syntax highlighting Söz dizimi renklendirmesi Autoindent Otomatik girintileme Auto-Brackets Oto-Parantezler Font: Yazı tipi: End of line Satır sonu Tab size Sekme boyutu Current line background Geçerli satır arkaplanı Text background Metin arkaplanı Default Öntanımlı Unix Dos/Windows Replace Tab by spaces Sekmeleri boşlukla değiştir Function/method names : İşlev/metod adları : Preprocessor : Önişlemci : Qt words : Qt sözcükleri : Keywords : Anahtar sözcükler : Single comments : Tek satırlık yorumlar : Multiline comments : Çok satırlı yorumlar : Quotation strings : Tırnakla kapalı dizgiler : Save all before build Derleme öncesi tümünü kaydet Automatic compilation Otomatik derleme Qt include directory: Qt include dizini: Qt documentation directory: Qt belgeleri dizini: Make extra parameters: Make ek parametreleri: Reload last project when the application starts Uygulama başladığında son projeyi yükle Close button in each tab (does not work with all styles) Her sekmede kapatma düğmesi (tüm stillerde çalışmaz) Display editor toolbars Düzenleyici araç çubuklarını göster Display white spaces Görünmez karakterleri belirt Files encoding: Dosya kodlaması: Text color Metin rengi Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Proje dizinini seçin Param Program parameters Program parametreleri Run with these arguments: Bu argümanlarla çalıştır: Working directory (leave empty to use project directory): Çalışma dizini (proje dizini için boş bırakın): ... ... Environment variables (NAME=value): Çevre değişkenleri (İSİM=değer): Name İsim Value Değer &Edit &Düzenle &Add &Ekle &Delete &Sil &Sort Sı&rala &Default &Öntanımlı &OK &Tamam &Cancel &İptal ParametersImpl Choose the project location Proje konumunu seçin Cancel İptal The variable "%1" already exists. "%1" değişkeni zaten mevcut. ProjectManager Project parsing Proje ayrıştırma Save project changes ? Proje değişiklikleri kaydedilsin mi? Yes Evet No Hayır Cancel İptal Forms: Formlar: Unable to create file. Dosya oluşturulamıyor. Ok Tamam Sub-project creation Alt-proje oluşturma Sub-Projects Alt-Projeler New name: Yeni ad: The kind of the new and the old filename is different ! Yeni ve eski dosya adları değişik türdeler! Rename Yeniden adlandır Sub-projects Alt-projeler Headers Başlıklar Sources Kaynaklar Dialogs Diyaloglar Translations Çeviriler Resources Veri Kaynakları The file already exists in directory. Dosya zaten dizinde mevcut. The file already exists. Dosya zaten var. This file is not permitted. Bu dosya için yetki yetersiz. Unable to rename the file to "%1" Dosya "%1" olarak yeniden adlandırılamadı The only available version for "%1" is %2 "%1" için tek uygun sürüm %2 Run on %1 %1 üzerinde çalıştır Cannot remove the main project. Ana proje silinemez. Do you want to remove "%1" from the project ? "%1" adlı öğeyi projeden silmek istiyor musunuz? File not found: "%1" ProjectPropertie Dialog Diyalog Project Template Proje Şablonu app lib subdirs Project or Scope : Proje veya Alan: Default directories Öntanımlı dizinler Dialogs: Diyaloglar: ... ... Sources: Kaynaklar: Configuration Yapılandırma General : Genel : Version Sürüm build_all debug release debug_and_release Warnings Uyarılar warn_off warn_on Qt Libraries Qt Kitaplıkları core network sql xml gui opengl svg qt3support Advanced Options Gelişmiş Seçenekler app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qtestlib resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Değişkenler Variable : Değişken : Values : Değerler : OK Tamam Cancel İptal Advanced options Gelişmiş seçenekler Free CONFIG variables : Serbest CONFIG değişkenleri: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Yeni Değer: delete spaces or put quotes. boşlukları silin ya da tırnak kullanın. Modify Değiştir Cancel İptal Choose the sources location Kaynakların konumunu seçin Choose the dialogs location Diyalogların konumunu seçin Properties of %1 %1 Özellikleri The spaces aren't correctly parsed by qmake Boşluklar qmake tarafından düzgün bir şekilde ayrıştırılamıyor A new variable can not be "QT", "CONFIG" or "TEMPLATE" Yeni değişken "QT", "CONFIG" veya "TEMPLATE" olamaz QObject Unable to start Assistant ! Asistan başlatılamıyor! Unable to start Designer ! Tasarımcı başlatılamıyor! Loading: Yükleniyor: Interface translation Arayüz çevirisi Environment control Çevre denetimi Files on editor Düzenleyicideki dosyalar Plugins Eklentiler Main Window creation Ana Pencerenin Oluşturulması Unable to establish a database connection. Veritabanı bağlantısı kurulamıyor. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop SQLite desteğine ihtiyaç duyar. Lütfen nasıl inşa edileceğini öğrenmek için Qt SQL sürücüsü belgesini okuyun. Current project parsing Geçerli proje ayrıştırılıyor Registers Form Name İsim Value Değer Apply Uygula ReplaceWidget Form find: Bul: Replacement: Değiştir: &Replace &Değiştir Previous Önceki Next Sonraki Case Sensitive Büyük/küçük harf duyarlı Whole words Tam sözcükler Prompt Önce Sor Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor Shortcuts Configure Shortcuts Kısayolları Yapılandır Action Eylem Shortcut Kısayol Default Öntanımlı OK Tamam Cancel İptal Subclassing Qt Designer Form Subclassing Qt Tasarımcı Formu Alt Sınıf Oluşturma Class Na&me: Sınıf A&dı: &New... &Yeni... &File Name: &Dosya Adı: &Location: &Konum: Filter &by: &Süzme ölçütü: &Create &Oluştur C&ancel &İptal SubclassingImpl &Update &Güncelle C&reate &Oluştur (.h and .cpp) (.h ve .cpp) Choose the file location Dosya konumunu seçin TabWidget Close Tab Sekmeyi Kapat Close Other Tabs Diğer Sekmeleri Kapat Close All Tabs Tüm Sekmeleri Kapat TextEdit Cancel İptal Yes Evet No Hayır Goto Implementation Tanıma Git Goto Declaration Duyuruya Git Cut Kes Copy Kopyala Paste Yapıştır Selection Indent Seçimi Girintile Selection Unindent Seçim Girintisini Azalt Select All Tümünü Seç Find... Bul... Toggle Bookmark Yer İmi Ekle/Kaldır Toggle Breakpoint Kesme Noktası Ekle/Kaldır The file "%1" could not be loaded. "%1" dosyası yüklenemedi. Save "%1" "%1" Dosyasını Kaydet Unable to save %1 %1 kaydedilemiyor The Qt database building is in progress. Try to complete code later. Qt veritabanı oluşturma işlemi şu an sürüyor. Kod tamamlamayı sonra deneyin. Reached end of page, continued from top Sayfa sonuna ulaşıldı, baştan devam ediliyor ToolsControl External Tools Harici Araçlar Check environment on start Açılışta çevreyi denetle &Test &Sına Please enter the path to the external programs: Lütfen harici programların yollarını girin: ctags: ctags: ... ... linguist: linguist: assistant: assistant: gdb: gdb: designer: designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: ToolsControlImpl Ok Tamam Ctags was detected in path %1, but this version is too old. Ctags %1 dizininde algılandı; fakat bu sürüm çok eski. Please select the program TreeClasses Open Declaration Duyuruyu Aç Open Implementation Tanımı Aç Add Method... Metod Ekle... Add Variable... Değişken Ekle... Add get/set Methods... get/set Metodları Ekle... Refresh contents İçeriği yenile TreeProject Add sub-project... Alt-proje ekle... Add New Item... Yeni Öğe Ekle... Add Scope... Alan Ekle... Add New Class... Yeni Sınıf Ekle... Add Existing Files... Varolan Dosyaları Ekle... Open in Linguist Dilcide Aç Refresh translation files Çeviri dosyalarını yenile Build release translation files Sürüm çeviri dosyalarını inşa et Open in Designer Tasarımcıda Aç Dialog Subclassing... Diyalog için Alt Sınıf Oluşturma... Dialog Preview Diyalog Önizleme Open Rename... Yeniden Adlandır... Show As Gösterim Normal Krawek Properties of %1... %1 Özellikleri... Remove from project Projeden sil Warning Dialog Diyalog TextLabel OK Tamam Don't show anymore Bir daha gösterme qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_German.ts.svn-base0000444000175000017500000047662011362261066027054 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Version - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Hauptentwickler: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code-Vervollständigung: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Entwickler: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Entwickler: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Entwickler: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Entwickler: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Entwickler: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Paket-Ersteller: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Bestehende Dateien hinzufügen OK Cancel Abbrechen Project or Scope : Projekt oder Gültigkeitsbereich: File : Datei: ... Copy files here: Dateien hierher kopieren: AddExistantImpl Choose the file to add Hinzuzufügende Datei auswählen Enter a filename. Geben Sie einen Dateinamen an. Cancel Abbrechen Enter a location destination. Geben Sie ein Zielverzeichnis an. Choose a directory Wählen Sie ein Verzeichnis aus The file %1 doesn't exist. Die Datei %1 existiert nicht. Unable to copy %1 Kann %1 nicht kopieren Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Dateien (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Neues Element hinzufügen Files Dateityp Translation Übersetzung Resources Ressource Dialog Dialog Header Header-Datei Sources Quell-Datei Project or Scope: Projekt oder Gültigkeitsbereich: File Name : Dateiname: Location : Ort: ... OK Cancel Abbrechen newfile.cpp AddNewClass OK Cancel Abbrechen Inheritance Vererbung Inherits another class Beerbt eine andere Klasse Ancestor: Vorfahr: Ancestor's include filename: Include-Datei des Vorfahrs: Scope: Gültigkeitsbereich: Filenames Dateinamen Header filename: Dateiname des Headers: Implementation filename: Dateiname der Implementierung: Location : Ort: ... ... Project or Scope: Projekt oder Gültigkeitsbereich: Class name: Name der Klasse: Constructor arguments: Argumente des Konstruktors: Virtual destructor Virtueller Destructor Add New Class Neue Klasse hinzufügen AddNewClassImpl Choose the file location Wählen Sie einen Speicherort aus Cancel Abbrechen Unable to create file. Datei kann nicht erzeugt werden. The file "%1" already exists. Die Datei "%1" existiert bereits. AddNewClassMethod Add New Method Neue Methode hinzufügen Method Name: Name der Methode: Return type: Rückgabetyp: Parameters: Parameter: Scope: Gültigkeitsbereich: Inline Virtual Static Pure OK Cancel Abbrechen AddNewClassMethodImpl An implementation file is required. Es wird eine Implementierungs-Datei benötigt. Cancel Abbrechen Add New Method in class %1 Füge neue Methode zur Klasse %1 hinzu %1 already exists in class %2. %1 existiert bereits in Klasse %2. AddNewClassVariable Add New Variable Neue Variable hinzufügen Create get/set methods Erstelle get/set-Methoden inline set method set-Methode get method get-Methode OK Cancel Abbrechen Variable Name: Variablenname: Type: Typ: Scope: Gültigkeitsbereich: AddNewClassVariableImpl Cancel Abbrechen %1 already exists in class %2. %1 existiert bereits in Klasse %2. AddNewImpl Choose the file location Wählen Sie einen Speicherort aus The suffix of the file is not correct. Die Dateiendung ist nicht korrekt. Cancel Abbrechen header header Yes Ja No Nein Also create the file %1 in same location ? Auch die Datei %1 am selben Ort erstellen? source Quell-Datei AddScope Add New Scope Neuen Gültigkeitsbereich hinzufügen New Scope Neuer Gültigkeitsbereich win32 debug unix release mac other anderer Project or Scope : Projekt oder Gültigkeitsbereich: OK Cancel Abbrechen AddSetGet Add get/set methods Füge get/set-Methoden hinzu OK Cancel Abbrechen Create get/set methods for Erstelle get/set-Methoden für inline set method set-Methode get method get-Methode AddSetGetImpl Cancel Abbrechen BreakpointCondition Dialog Condition : Bedingung: is true (breakpoint) ist wahr (Haltepunkt) has changed (watchpoint) hat sich geändert (Beobachtungspunkt) Build Update project Projekt aktualisieren Clean Project Projekt bereinigen Build Erstellen Build stopped Erstellen gestoppt Compilation of %1... Kompiliere %1... Debug Running... Läuft... Exited normally Normal beendet Debug... Debug... Debug exited Debug verlassen Error: Unable to evaluate value Fehler: Kann Eigeschaft nicht auswerten Exited with error code %1 Beendet mit Fehler-Code %1 Editor Refresh classes and methods lists Klassen- und Methodenlisten aktualisieren What do you want to do? Was möchten Sie tun? Overwrite Überschreiben Reload File Datei neu laden The file "%1" was modified outside editor. Die Datei "%1" wurde außerhalb des Editor verändert. Open %1 Öffne %1 %1 replacement(s) made. %1 Ersetzung(en) vorgenommen. The file "%1" disappeared from fisk. Die Datei "%1" wurde von der Festplatte entfernt. Recreate Wiederherstellen Close Schließen ExeChoice QDevelop QDevelop OK Cancel Abbrechen Choose program to Debug : Programm zum Debuggen auswählen: Don't ask question anymore Nicht mehr fragen FindFile Find in Files In Dateien suchen Pattern: Muster: Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Recursive Rekursiv *.cpp; *.h *.ui; *.qrc; *.txt Files: Dateien: ... ... Find in: Suchen in: &Find &Suchen &Close &Schließen Replace found text Ersetze gefundenen Text Replace with: Ersetze durch: FindFileImpl Choose a directory Wähle das Projektverzeichnis aus Line Zeile File Datei &Find &Suchen &Stop &Stopp Cannot open temporary file %1 Kann temporäre Datei %1 nicht öffnen FindWidget Form Formular Previous Vorheriger Next Nächster Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt GotoLine Goto Line Zur Zeile gehen <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Zur Zeile gehen:</span></p></body></html> OK Cancel Abbrechen InitCompletion Unable to launch %1 Kann %1 nicht starten Unable to open %1 Kann %1 nicht öffnen LineNumbers Toogle Bookmark Lesezeichen ein/-ausschalten Toogle Breakpoint Haltepunkt ein-/ausschalten Breakpoint Condition... Haltepunktbedingung... LogBuild error Fehler warning Warnung error Compiler message Fehler undefined reference to Linker message warning Compiler message Warnung Main QDevelop QDevelop &? &? Build Erstellen &Edit &Bearbeiten &File &Datei Outputs Ausgaben Files Dateien Classes Klassen Files toolbar Datei-Werkzeugleiste Edit Toolbar Bearbeiten-Werkzeugleiste &New Project... &Neues Projekt... &File... &Datei... &Close All Files A&lle Dateien schließen &Save File Datei &speichern Ctrl+S &Quit &Beenden Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Alles markieren Ctrl+F Add New Item Neues Element hinzufügen Add Existing Files Bestehende Dateien hinzufügen New Folder Neuer Ordner Project Properties Projekteigenschaften F7 Clean Bereinigen Rebuild Neu erstellen Compile File Datei kompilieren Shift+F7 Start Program Programm starten Shift+F5 Step Into In Anweisung gehen F11 Step Over Anweisung übergehen F10 &Open... &Öffnen... F3 Stop Stopp F6 Breakpoints... Haltepunkte... Indent selection Markierten Bereich einrücken Tab Unindent selection Markierten Teil ausrücken Shift+Tab F1 Project Explorer Projekt-Explorer Save Project As... Projekt speichern unter... Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Undo Rückgängig Redo Wiederholen F9 &View &Ansicht &Project &Projekt &Build &Erstellen &Debug &Debug Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Code vervollständigen Ctrl+Space Ctrl+D &New File... &Neue Datei... New File Neue Datei Comment Kommentieren Uncomment Auskommentieren Calls Stack Aufruf-Stack Local Variables Lokale Variablen Name Name Type Typ Address Adresse Value Wert Other Variables Andere Variablen ... ... Toggle &Bookmark Lesezeichen &ein-/ ausschalten Toggle Bookmark Lesezeichen ein-/ ausschalten Ctrl+B Clear &All Bookmarks &Alle Lesezeichen löschen &Open Project... Projekt &öffnen... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Erweiterungen Ctrl+N Goto matching bracket Zu passender Klammer gehen Ctrl+[ Foo &Print... &Drucken... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Lesezeichen Ed&itors Ed&itoren &Tools &Werkzeuge &Plugins settings Er&weiterungs-Einstellungen &Last Projects &Zuletzt geöffnete Projekte B&uild &Erstellen Las&t Files &Zuletzt geöffnete Dateien Save File &as... Datei speichern &unter... Save A&ll &Alle speichern &Undo &Rückgängig &Redo &Wiederherstellen Cu&t &Ausschneiden &Copy &Kopieren &Paste &Einfügen &Find... &Suchen... &Replace... &Ersetzen... &Find in Files... In &Dateien suchen... Add New &Item... Neues &Element hinzufügen... Add Existing &Files... &Bestehende Dateien hinzufügen... Project &Properties... &Projekteigenschaften... &Clean &Bereinigen &Rebuild &Neu erstellen S&tart Program &Programm starten Step &Into In &Anweisung gehen Step O&ver Anweisung &übergehen &Calls Stack Aufruf-&Stack &Options... &Optionen... &Parameters... P&arameter... &About... &Über... About &Qt... Über &Qt... Find &Next &Nächsten finden &Stop &Stopp &Stop Build Erstellung &stoppen &Help Current Qt Word &Hilfe für momentane Qt-Phrase &Reset Executables List Liste ausführbarer Dateien &zurücksetzen &Save Project Projekt &speichern C&lose Project Projekt s&chließen Add &Scope... &Gültigkeitsbereich hinzufügen... Step &Out Anweisung &verlassen &Close Current Editor Aktiven Editor &schließen &Next Tab &Nächster Reiter &Previous Tab &Vorheriger Reiter &Switch to Header/Sources Zu Header-/Quelldateien &wechseln Set &Focus to Editor &Fokus auf Editor setzen Toggle &breakpoint &Haltepunkt ein-/ausschalten Goto &Methods List Zeige &Methodenliste Configure &Shortcuts... &Tastaturkürzel konfigurieren... &Goto Line... Zur &Zeile gehen... Toggle Co&mments Ko&mmentare ein-/ ausschalten E&xternal Tools... &Externe Werkzeuge... &Next Bookmark &Nächstes Lesezeichen &Previous Bookmark &Vorheriges Lesezeichen Find Pr&evious &Vorheriges finden Goto matching &bracket Zu &passender Klammer gehen Add New &Class... Neue &Klasse hinzufügen... Open F&ile in project... Öffne Datei des &Projekts... Goto &Implementation Gehe zur &Implementierung Goto &Declaration Gehe zur &Deklaration &Rebuild Qt classes database Datenbank für Qt-Klassen &neu erstellen 1 Build and Debug Toolbar Erstellen- und Debug-Werkzeugleiste Call Stacks Aufruf-Stacks Registers Register Execute &qmake &qmake ausführen Show Maximized Maximieren &Editor mode &Editor-Modus Ctrl+E Next Warning/Error Nächste(r) Warnung/Fehler F4 Previous Warning/Error Vorherige(r) Warnung/Fehler Shift+F4 Clear all Warnings/Errors Entferne alle Warnungen und Fehler &Toolbars &Toolbars Dock windows Docks Find in files In Dateien suchen Full view Voll-Ansicht Minimal view Minimal-Ansicht DocksWindow Docks Dock Windows Docks New submenu > Neues Untermenü > a a En&force qmake mode Er&zwinge qmake-Modus &Debug mode &Debug-Modus &Release mode &Release-Modus &Forget last used mode Zuletzt benutzten Modus &vergessen MainImpl Cancel Abbrechen Choose a file to open Zu öffnende Datei auswählen Choose the file to create Zu erstellende Datei auswählen Files (*.cpp *.h *.txt *.* *) Dateien (*.cpp *.h *.txt *.* *) Stop Stopp Start Start The project has been modified, do you want to save your changes ? Das Projekt wurde verändert. Möchten Sie die Änderungen speichern ? Yes Ja No Nein run Build. starte Erstellen. Ok OK Stop debugging ? Debugging beenden? Abort Abbrechen Continue Fortsetzen &%1 %2 &%1 %2 Do you want to quit QDevelop ? Möchten Sie QDevelop beenden? Shift+F5 F5 Files Dateien Sources Quell-Dateien Projects Projekte Texts Texte All Files Alle Dateien Stopping is not possible under Windows. Put breakpoints. Stoppen ist unter Windows nicht möglich. Setze Haltepunkte. New Variable: Neue Variable: Choose a project to open Wählen Sie ein Projekt aus, das geöffnet werden soll Build finished without error Erstellung ohne Fehler abgeschlossen Build finished with Erstellung abgeschlossen mit error(s) Fehler(n) and und warning(s) Warnung(en) The file "%1" already exists in directory. Die Datei "%1" existiert bereits in diesem Verzeichnis. Unable to create %1 Kann %1 nicht erstellen The project %1 doesn't exist. Das Projekt %1 existiert nicht. Properties of %1... Eigenschaften von %1... The program doesn't exist, Das Programm existiert nicht, The variable "%1" already exists. Die Variable "%1" existiert bereits. The Qt database building is already in progress. Die Qt-Datenbank wird bereits neu gebaut. The Qt classes database build is ended. Das Erstellen der Qt-Datenbank ist beendet. The Qt include directory doesn't exist, You can change in Options dialog. Das Qt-Include-Verzeichnis existiert nicht, du kannst es in den Optionen ändern. Version %1 Version %1 Cannot launch Linguist Kann Linguist nicht starten NewImplementation New Implementation Neue Implementierung &Ok &OK C&ancel &Abbrechen File Name : Dateiname: Class Name : Name der Klasse: Location : Ort: ... ... NewProject New project creation Neues Projekt erstellen Parent project : Elternprojekt: Project name : Projektname: Location : Ort: ... ... Project creation on : Projekterzeugung in: OK Cancel Abbrechen Template Vorlage Application with Dialog Anwendung mit Dialog Application with Main Window Anwendung mit Hauptfenster Properties Eigenschaften Version Version Debug Version Debug-Version Release Version Release-Version Sub-directories Unterverzeichnisse Dialogs: Dialoge: Executable: Ausführbare Datei: ui bin sources: Quellen: Objects: Objekte: src build Inheritance subclassing Klassen und Dateien des Dialogs Object name: Objektname: File name: Dateiname: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog (ui-Datei):</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Abgeleitete Klasse:</span><br />(eigentl. Implementierung)</p></body></html> Empty or master project Leeres oder Meta-Projekt NewProjectImpl Choose the project directory Wählen Sie das Projektverzeichnis aus The directory "%1" cannot be created Das Verzeichnis "%1" kann nicht erstellt werden Cancel Abbrechen The project cannot be created Das Projekt kann nicht erzeugt werden Project file "%1" already exists Projekt-Datei "%1" existiert bereits The directory "%1" already exists. Do you want to create project anyway? Das Verzeichnis "%1" existiert bereits. Willst du das Porjekt trotzdem erstellen? NewVariable Dialog Dialog OK OK Cancel Abbrechen Qt Variables Qt-Variablen User Variable Benutzer-Variablen Variable : Variable: New Variable : Neue Variable: Operator : Operator: = += -= *= ~= OpenFile Open File in Project Öffne Datei des Projekts OK Cancel Abbrechen Options Options Optionen General Allgemein Editor Line numbers Zeilennummern Selection border Auswahlrand Autoindent automatisches Einrücken Syntax highlighting Syntaxhervorhebung Function/method names : Funktions-/Methodennamen: Preprocessor : Preprozessor: Qt words : Qt-Ausdrücke (Klassen etc.): Keywords : Schlüsselwörter: Single comments : Einzeilige Kommentare: Multiline comments : Mehrzeilige Kommentare: Quotation strings : Zeichenketten: ... Default Standard Replace Tab by spaces Tabulatoren durch Leerzeichen ersetzen Unix Dos/Windows Complete Code Code vervollständigen Prompt before quit Vorm Beenden nachfragen Font: Schriftart: End of line Zeilenende options Optionen Auto-Brackets Automatische Klammern Tab size Tabulator-Größe Current line background Hintergrundfarbe der aktiven Zeile Text background Texthintergrund Show classes explorer Klassenexplorer zeigen Interval between updates: Intervall zwischen Aktualisierungen: seconds Sekunden Default projects directory: Standardprojektverzeichnis: Matching ( and { Übereinstimmende ( und { User plugins directory: Pluginverzeichnis: Make extra parameters: Parameter für make: Qt include directory: Qt Include-Verzeichnis: Files encoding: Zeichensatz: Save all before build Vor dem Erstellen alles speichern Automatic compilation Automatisch kompilieren Qt documentation directory: Qt Dokumentations-Verzeichnis: Reload last project when the application starts Zuletzt geöffnetes Projekt beim Start laden Close button in each tab (does not work with all styles) Schließen-Button in jedem Tab (funktioniert nicht bei allen Styles) Display editor toolbars Editor-Werkzeugleiste anzeigen Display white spaces Leerzeichen und Tabs darstellen Text color Textfarbe Right margin line Rechter Rand Column: Spalte: Auto-Comments Automatische Kommentare <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Mehrzeiliger</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Kommentar </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Einzeiliger Kommentar </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Zeilenumbruch Hide Find/Replace panels after Verstecke Suchen/Ersetzen-Leiste nach sec. Sekunden. Ctrl+click = Go to implementation, Meta+click = Go to declaration Strg+klick = Gehe zur Implementierung, Meta+klick = Gehe zur Deklaration OptionsImpl Choose the project directory Wähle Sie das Projektverzeichnis aus Param Program parameters Programm-Parameter Run with these arguments: Mit diesen Parametern ausführen: Working directory (leave empty to use project directory): Arbeitsverzeichnis (leer lassen, um Projektverzeichnis zu nutzen): ... ... Environment variables (NAME=value): Umgebungsvariablen (NAME=Wert): Name Name Value Wert &Edit &Bearbeiten &Add &Hinzufügen &Delete &Löschen &Sort &Sortieren &Default &Standard &OK &Cancel &Abbrechen ParametersImpl Choose the project location Wählen Sie das Projektverzeichnis aus Cancel Abbrechen The variable "%1" already exists. Die Variable "%1" existiert bereits. ProjectManager Save project changes ? Projektänderungen speichern? Yes Ja No Nein Cancel Abbrechen Forms: Formulare: Unable to create file. Datei kann nicht erzeugt werden. Ok OK Sub-project creation Unterprojekterstellung Sub-Projects Unterprojekte Sub-projects Unterprojekte Headers Header-Dateien Sources Quell-Dateien Dialogs Dialoge Translations Übersetzungen Resources Ressourcen Project parsing Projekt analysieren New name: Neuer Name: The kind of the new and the old filename is different ! Die Endung von dem alten und dem neuen Dateinamen ist verschieden! Rename Umbennen The file already exists in directory. Die Datei existiert bereits im Verzeichnis. The file already exists. Die Datei existiert bereits. This file is not permitted. Diese Datei ist nicht erlaubt. Unable to rename the file to "%1" Kann die Datei "%1" nicht umbenennen The only available version for "%1" is %2 Die einzige verfügbare Version von "%1" ist %2 Run on %1 Starte als %1 Cannot remove the main project. Das Hauptprojekt kann nicht entfernt werden. Do you want to remove "%1" from the project ? Willst du "%1" aus dem Projekt entfernen? File not found: "%1" Datei nicht gefunden: "%1" ProjectPropertie Dialog Dialog Configuration Konfigurationen General : Allgemein: Version Version build_all debug release debug_and_release Warnings Warnungen warn_off warn_on Qt Libraries Qt-Bibliotheken core network sql xml gui opengl svg qt3support Advanced Options Erweiterte Optionen app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variablen Variable : Variable: ... ... Values : Werte: Project Template Projektvorlage subdirs lib app Project or Scope : Projekt oder Gültigkeitsbereich: OK Cancel Abbrechen Default directories Default Verzeichnisse Dialogs: Dialoge: Sources: Quelltexte: qtestlib Advanced options Erweiterte Optionen Free CONFIG variables : Eigene CONFIG-Variablen: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Neuer Wert: delete spaces or put quotes. Leerzeichen löschen oder Anführungszeichen setzen. Modify Ändern Cancel Abbrechen Choose the sources location Wähle das Sourceverzeichnis Choose the dialogs location Wähle das Dialogverzeichnis Properties of %1 Eigenschaften von %1 The spaces aren't correctly parsed by qmake Die Leerzeichen werden von qmake nicht korrekt interpretiert A new variable can not be "QT", "CONFIG" or "TEMPLATE" Die neue Variable kann nicht "QT", "CONFIG" oder "TEMPLATE" heißen QObject Unable to start Assistant ! Kann "Assistant" nicht starten! Loading: Lade: Interface translation Interface-Übersetzung Environment control Umgebungskontrolle Files on editor Dateien im Editor Main Window creation Hauptfenster-Erstellung Unable to establish a database connection. Kann keine Verbindung zur Datenbank aufbauen. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop benötigt SQLite-Unterstützung. Bitte lesen Sie dafür die Qt SQL Treiber Dokumentation. Current project parsing Aktuelles Projekt wird analysiert Plugins Erweiterungen Unable to start Designer ! Kann Designer nicht starten! Registers Form Formular Name Name Value Wert Apply Anwenden ReplaceWidget Form Formular find: Suchen: Replacement: Ersetzen durch: &Replace &Ersetzen Previous Vorheriger Next Nächster Case Sensitive Groß- und Kleinschreibung beachten Whole words Ganze Wörter Prompt Bestätigung erfragen Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt Shortcuts Configure Shortcuts Tastaturkürzel konfigurieren Action Aktion Shortcut Kürzel Default Standard OK OK Cancel Abbrechen Subclassing Qt Designer Form Subclassing Ableiten von Qt-Designer-Formularen &Create &Erstellen C&ancel &Abbrechen &New... &Neu... Class Na&me: Klassenna&me: &File Name: &Dateiname: &Location: &Ort: Filter &by: Filtere &mit: SubclassingImpl Choose the file location Wählen Sie einen Speicherort aus &Update &Aktualisieren C&reate &Erstellen (.h and .cpp) (.h und .cpp) TabWidget Close Tab Reiter schließen Close Other Tabs Andere Reiter schließen Close All Tabs Alle Reiter schließen TextEdit Cancel Abbrechen Yes Ja No Nein Cut Ausschneiden Copy Kopieren Paste Einfügen Selection Indent Markierten Bereich einrücken Selection Unindent Markierten Bereich ausrücken Select All Alles markieren Find... Suchen... Toggle Bookmark Lesezeichen ein-/ ausschalten Toggle Breakpoint Haltepunkt ein-/ausschalten Goto Implementation Gehe zur Implementierung Goto Declaration Gehe zur Deklaration The file "%1" could not be loaded. Die Datei "%1" konnte nicht geladen werden. Save "%1" Speichere "%1" Unable to save %1 Kann %1 nicht speichern The Qt database building is in progress. Try to complete code later. Die Qt-Datenbank wird gerade neu aufgebaut. Bitte versuche es später erneut. Reached end of page, continued from top Ende der Seite erreicht, am Anfang fortgesetzt ToolsControl External Tools Externe Werkzeuge qmake: make: gdb: ctags: linguist: lupdate: lrelease: designer: ... &Test &Test Please enter the path to the external programs: Bitte geben Sie den Pfad zu den externen Programmen an: Check environment on start Umgebung beim Start überprüfen assistant: ToolsControlImpl Ok Ctags was detected in path %1, but this version is too old. Ctags wurde in %1 gefunden, allerdings in einer zu alten Version. Please select the program Bitte wähle das Programm aus TreeClasses Open Declaration Deklaration öffnen Open Implementation Implementierung öffnen Refresh contents Inhalte neu laden Add Method... Methode hinzufügen... Add Variable... Variable hinzufügen... Add get/set Methods... get/set-Methoden hinzufügen... TreeProject Add sub-project... Unterprojekt hinzufügen... Add New Item... Neues Element hinzufügen... Add Scope... Gültigkeitsbereich hinzufügen... Add Existing Files... Bestehende Dateien hinzufügen... Open in Linguist Mit Linguist öffnen Refresh translation files Übersetzungsdateien aktualisieren Build release translation files Erstelle fertige Übersetzungsdateien Open in Designer Im Designer öffnen Dialog Subclassing... Dialog-Implementierung... Dialog Preview Dialog-Vorschau Open Öffnen Show As Zeige als Normal Normal Krawek Add New Class... Neue Klasse hinzufügen... Rename... Umbennen... Properties of %1... Eigenschaften von %1... Remove from project Aus dem Projekt entfernen Warning Dialog TextLabel OK Don't show anymore Nicht mehr zeigen qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Dutch.ts.svn-base0000444000175000017500000045436711362261066026716 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versie</span></p></body></html> OK Akkoord <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Voeg bestaande bestanden toe OK Akkoord Cancel Annuleren Project or Scope : Project of Bereik : File : Bestand : ... Copy files here: Kopieer bestanden naar: AddExistantImpl Choose the file to add Selecteer toe te voegen bestand Enter a filename. Geef een bestandsnaam. Cancel Annuleren Enter a location destination. Geef een bestemmingslocatie. Choose a directory Kies een map The file %1 doesn't exist. Unable to copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Voeg nieuw Item toe Files Bestanden Translation Vertaling Resources Bronnen Dialog Venster Header Sources Project or Scope: Project of Bereik: File Name : Bestandsnaam : Location : Locatie : ... OK Akkoord Cancel Annuleren newfile.cpp AddNewClass OK Akkoord Cancel Annuleren Inheritance Inherits another class Ancestor: Ancestor's include filename: Scope: Filenames Header filename: Implementation filename: Location : Locatie : ... ... Project or Scope: Project of Bereik: Class name: Constructor arguments: Virtual destructor Add New Class AddNewClassImpl Choose the file location Kies de bestandslocatie Cancel Annuleren Unable to create file. Onmogelijk bestand te creëeren. The file "%1" already exists. AddNewClassMethod Add New Method Method Name: Return type: Parameters: Scope: Inline Virtual Static Pure OK Akkoord Cancel Annuleren AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Annuleren %1 already exists in class %2. AddNewClassVariable Add New Variable Create get/set methods inline set method get method OK Akkoord Cancel Annuleren Variable Name: Type: Scope: AddNewClassVariableImpl Cancel Annuleren %1 already exists in class %2. AddNewImpl Choose the file location Kies de bestandslocatie The suffix of the file is not correct. De extensie van de file is incorrect. Cancel Annuleren header Yes Ja No Nee Also create the file %1 in same location ? source AddScope Add New Scope Voeg nieuw Bereik toe New Scope Nieuw Bereik win32 debug unix release mac other anders Project or Scope : Project of Bereik : OK Akkoord Cancel Annuleren AddSetGet Add get/set methods OK Akkoord Cancel Annuleren Create get/set methods for inline set method get method AddSetGetImpl Cancel Annuleren BreakpointCondition Dialog Venster Condition : is true (breakpoint) has changed (watchpoint) Build Update project Clean Project Schoon Project op Build Compileren Build stopped Compileren beëindigd Compilation of %1... Debug Running... Gestart... Exited normally Beëindigd zonder fouten Debug... Debuggen... Debug exited Debuggen Beëindigd Error: Unable to evaluate value Fout: Onmogelijk waarde te evalueren Exited with error code %1 Editor Refresh classes and methods lists Vernieuw klassen en methoden lijst What do you want to do? Wat wilt u doen? Overwrite Overschrijven Reload File Bestand Herladen The file "%1" was modified outside editor. Open %1 %1 replacement(s) made. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Akkoord Cancel Annuleren Choose program to Debug : Kies programma om te Debuggen : Don't ask question anymore Deze vraag niet meer stellen FindFile Find in Files Zoek in Bestanden Pattern: Patroon: Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Recursive Recursief Files: Bestanden: ... ... Find in: Zoek in: &Find &Zoek &Close &Afsluiten *.cpp; *.h *.ui; *.qrc; *.txt Replace found text Replace with: FindFileImpl Choose a directory Kies een map &Find &Zoek Line Regel File Bestand &Stop &Stop Cannot open temporary file %1 FindWidget Form Scherm Previous Vorige Next Volgende Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin GotoLine Goto Line Ga naar Regel <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ga naar Regel:</span></p></body></html> OK Akkoord Cancel Annuleren InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Toon Markeringen Toogle Breakpoint Toon Onderbrekingspunt Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main QDevelop QDevelop &? &File &Bestand &Project &Build &Compileer &Debug &View &Beeld &Edit &Bewerken Outputs Uitvoer Build Compileren Project Explorer Project Verkenner Files toolbar Bestanden werkbalk Edit Toolbar Bewerken werkbalk &New Project... &Nieuw Project... &File... &Bestand... &Close All Files &Alle Bestanden Sluiten &Save File &Bestand Opslaan Ctrl+S &Quit &Afsluiten Undo Ongedaan maken Ctrl+Z Redo Herhalen Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Alles Selecteren Ctrl+A Ctrl+F Ctrl+R Add New Item Voeg nieuw Item toe Add Existing Files Voeg bestaande bestanden toe New Folder Nieuwe Map Project Properties Project Eigenschappen F7 Clean Opschonen Rebuild Hercompileren Compile File Compileer Bestand Shift+F7 Start Program Start Programma Shift+F5 Step Into Stap in F11 Step Over Stap over F10 &Open... &Open... Ctrl+O F3 Stop F6 Breakpoints... Onderbrekingspunten... Indent selection Selectie inspringen Tab Unindent selection Selecte uitspringen Shift+Tab F1 Files Bestanden Save Project As... Project Opslaan Als... Shift+F11 Ctrl+W Alt+Right Alt+Rechts Alt+Left Alt+Links Shift+F12 Esc F9 Ctrl+G Complete Code Complementeer Code Ctrl+Space &New File... &New File... New File Ctrl+D Comment Maak Commentaar Uncomment Maak code Classes Klassen Calls Stack Name Naam Type Address Adres Value Waarde ... Toggle &Bookmark Toon &Markeringen Toggle Bookmark Toon Markering Ctrl+B Clear &All Bookmarks &Verwijder Alle Markeringen &Open Project... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Ctrl+N Goto matching bracket Ctrl+[ Foo &Print... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Last Projects B&uild Las&t Files &Tools &Plugins settings Ed&itors 1 Build and Debug Toolbar Call Stacks Registers Save File &as... Save A&ll &Undo &Redo Cu&t &Copy &Paste &Find... &Replace... &Find in Files... Add New &Item... Add Existing &Files... Project &Properties... &Clean &Rebuild S&tart Program Step &Into Step O&ver &Calls Stack &Options... &Parameters... &About... About &Qt... Find &Next &Stop &Stop &Stop Build &Help Current Qt Word &Reset Executables List &Save Project C&lose Project Add &Scope... Step &Out &Close Current Editor &Next Tab &Previous Tab &Switch to Header/Sources Set &Focus to Editor Toggle &breakpoint Goto &Methods List Configure &Shortcuts... &Goto Line... Toggle Co&mments E&xternal Tools... &Next Bookmark &Previous Bookmark Find Pr&evious Goto matching &bracket Add New &Class... Open F&ile in project... Goto &Implementation Goto &Declaration &Rebuild Qt classes database Execute &qmake Show Maximized &Editor mode Ctrl+E Next Warning/Error F4 Previous Warning/Error Shift+F4 Clear all Warnings/Errors &Toolbars Dock windows Local Variables Other Variables Find in files Full view Minimal view DocksWindow Dock Windows New submenu > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Cancel Annuleren Do you want to quit QDevelop ? Wilt u QDevelop afsluiten? Yes Ja No Nee Choose a file to open Kies een te openen bestand Choose the file to create Kies het te creëeren bestand Files (*.cpp *.h *.txt *.* *) Bestanden (*.cpp *.h *.txt *.* *) Stop Start The project has been modified, do you want to save your changes ? Het project is gewijzigd, de wijziginen opslaan? Stop debugging ? Stop debuggen? run Build. start Compileren. Ok Akkoord Shift+F5 F5 Abort Afbreken Continue Doorgaan &%1 %2 &%1 %2 Files Bestanden Sources Projects Texts All Files Stopping is not possible under Windows. Put breakpoints. Stopping is not possible under Windows. Put breakpoints. New Variable: Nieuwe Variabele: Choose a project to open Build finished without error Build finished with error(s) and warning(s) The file "%1" already exists in directory. Unable to create %1 The project %1 doesn't exist. Properties of %1... The program doesn't exist, The variable "%1" already exists. The Qt include directory doesn't exist, You can change in Options dialog. The Qt database building is already in progress. The Qt classes database build is ended. Version %1 Cannot launch Linguist NewImplementation New Implementation Nieuwe Implementatie Class Name : Klassenaam : Location : Locatie : File Name : Bestandsnaam : ... &Ok &Akkoord C&ancel &Annuleren NewProject New project creation Nieuw project creëeren Parent project : Onderdeel van project : Project name : Project naam : Location : Locatie : ... Project creation on : Project creatie in : OK Akkoord Cancel Annuleren Template Voorbeeld Application with Dialog Applicatie met Venster Application with Main Window Applicatie met Hoofd Venster Properties Eigenschappen Version Versie Debug Version Debug Versie Release Version Release Versie Sub-directories Sub-mappen Dialogs: Vensters: Executable: Uitvoerbaar: ui bin sources: Objects: Objecten: src build Inheritance subclassing Overervende subklassering Object name: Object naam: File name: Bestandsnaam: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Venster:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subklasse:</span></p></body></html> Empty or master project NewProjectImpl Choose the project directory Kies de project map The directory "%1" cannot be created Cancel Annuleren The project cannot be created Het project kan niet gecreëerd worden Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Venster OK Akkoord Cancel Annuleren Qt Variables Qt Variabelen User Variable Gebruikers Variabelen Variable : Variabelen : New Variable : Nieuwe Variabele : Operator : = += -= *= ~= OpenFile Open File in Project OK Akkoord Cancel Annuleren Options Options Opties General Algemeen Prompt before quit Vragen voor afsluiten Editor Tekstvenster ... Font: Lettertype: Replace Tab by spaces Vervang Tab door spaties Default Standaard Unix Dos/Windows Line numbers Regelnummers Autoindent Automatisch inspringen Selection border Selectie rand Syntax highlighting Syntax accentuering Complete Code Complementeer Code Function/method names : Functie/methode namen : Preprocessor : Preprocessor : Qt words : Qt woorden : Keywords : Sleutelwoorden : Single comments : Enkele regel commentaar : Multiline comments : Meerdere regels commentaar : Quotation strings : Tekst strings : End of line options Auto-Brackets Automatische haakjes Tab size Tab grootte Current line background Achtergrond huidige regel Text background Achtergrond tekst Show classes explorer Toon klassen verkenner Interval between updates: Interval tussen updates: seconds seconden Default projects directory: Standaard projecten map: Matching ( and { User plugins directory: Save all before build Automatic compilation Qt include directory: Qt documentation directory: Make extra parameters: Reload last project when the application starts Close button in each tab (does not work with all styles) Display editor toolbars Display white spaces Files encoding: Text color Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Kies de project map Param Program parameters Programma parameters Run with these arguments: start met deze argumenten: Working directory (leave empty to use project directory): Werkmap (laat leeg om project map te gebruiken): ... Environment variables (NAME=value): Omgevings Variabelen (NAAM=waarde): Name Naam Value Waarde &Add &Toevoegen &Delete &Verwijderen &Sort &Sorteren &Default Stan&daard &OK &Akkoord &Cancel A&nnuleren &Edit &Bewerken ParametersImpl Choose the project location Kies de project locatie Cancel Annuleren The variable "%1" already exists. ProjectManager Save project changes ? Wijzigingen in project opslaan? Yes Ja No Nee Cancel Annuleren Forms: Schermen: Unable to create file. Onmogelijk bestand te creëeren. Ok Akkoord Sub-project creation Sub-project creatie Sub-Projects Sub-Projecten Sub-projects Sub-projecten Headers Sources Dialogs Vensters Translations Vertalingen Resources Bronnen Project parsing New name: The kind of the new and the old filename is different ! Rename The file already exists in directory. The file already exists. This file is not permitted. Unable to rename the file to "%1" The only available version for "%1" is %2 Run on %1 Cannot remove the main project. Do you want to remove "%1" from the project ? File not found: "%1" ProjectPropertie Dialog Venster Configuration Configuratie General : Algemeen : Version Versie build_all debug release debug_and_release Warnings Waarschuwingen warn_off warn_on Qt Libraries Qt Bibliotheken core network sql xml gui opengl svg qt3support Advanced Options Geavanceerde Opties app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variabelen Variable : Variabelen : ... Values : Waarden : Project Template Project Voorbeeld subdirs lib app Project or Scope : Project of Bereik : OK Akkoord Cancel Annuleren Default directories Dialogs: Vensters: Sources: qtestlib Advanced options Free CONFIG variables : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nieuwe Waarde: delete spaces or put quotes. verwijder spaties of zet aanhalingstekens neer. Modify Aanpassen Cancel Annuleren Choose the sources location Choose the dialogs location Properties of %1 The spaces aren't correctly parsed by qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" QObject Unable to start Assistant ! Onmogelijk Assitant te starten ! Loading: Loading: Interface translation Environment control Files on editor Main Window creation Unable to establish a database connection. Onmogelijk een database connectie te maken. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDeveleop heeft SQLite nodig. Lees alstublieft de Qt SQL driver documentatie voor informatie hoe deze te compileren. Current project parsing Plugins Unable to start Designer ! Registers Form Scherm Name Naam Value Waarde Apply ReplaceWidget Form Scherm find: Replacement: &Replace Previous Vorige Next Volgende Case Sensitive Hoofdlettergevoelig Whole words Gehele woord Prompt Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin Shortcuts Configure Shortcuts Snelkoppelingen Instellen Action Actie Shortcut Snelkoppeling Default Standaard OK Akkoord Cancel Annuleren Subclassing Qt Designer Form Subclassing Qt Designer Scherm Subklassering &New... &Nieuw... &Create &Creëeren C&ancel &Annuleren Class Na&me: &File Name: &Location: Filter &by: SubclassingImpl Choose the file location Kies de bestandslocatie &Update C&reate &Creëer (.h and .cpp) (.h en .cpp) TabWidget Close Tab Sluit Tab Close Other Tabs Sluit Overige Tabs Close All Tabs Sluit Alle Tabs TextEdit Cancel Annuleren Yes Ja No Nee Cut Knippen Copy Kopiëren Paste Plakken Selection Indent Inspringen vergroten Selection Unindent Inspringing verkleinen Select All Alles Selecteren Find... Zoeken... Toggle Bookmark Toon Markering Toggle Breakpoint Toon Onderbrekingspunt The file "%1" could not be loaded. Save "%1" Unable to save %1 Goto Implementation Goto Declaration The Qt database building is in progress. Try to complete code later. Reached end of page, continued from top Einde van pagina bereikt, verder gegaan vanaf het begin ToolsControl External Tools Externe Hulpmiddelen qmake: make: gdb: ctags: linguist: lupdate: lrelease: designer: ... &Test Please enter the path to the external programs: Geef alstublieft het pad in naar de externe programma's: Check environment on start assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ok Akkoord Please select the program TreeClasses Open Declaration Open Declaratie Open Implementation Open Implementatie Refresh contents Herlaad inhoud Add Method... Add Variable... Add get/set Methods... TreeProject Add sub-project... Voeg sub-project toe... Add New Item... Voeg nieuw Item toe... Add Scope... Bereik Toevoegen... Add Existing Files... Voeg bestaande bestanden toe... Open in Linguist Refresh translation files Herlaad vertalings bestanden Build release translation files Creëer release vertalings bestanden Open in Designer Dialog Subclassing... Venster Subclassing... Dialog Preview Venster Voorbeeld Open Openen Show As Toon als Normal Normaal Krawek Add New Class... Rename... Properties of %1... Remove from project Warning Dialog Venster TextLabel Tekstlabel OK Akkoord Don't show anymore Niet meer tonen qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Japanese.ts.svn-base0000444000175000017500000046445111362261066027370 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">バージョン</span></p></body></html> OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files 既存ファイルの追加 OK OK Cancel キャンセル Project or Scope : プロジェクトまたはスコープ : File : ファイル : ... ... Copy files here: ここにファイルをコピー: AddExistantImpl Choose the file to add ファイルを選択してください Enter a filename. ファイル名を入力してください。 Cancel キャンセル Enter a location destination. 場所を入力してください。 Choose a directory ディレクトリを選択してください The file %1 doesn't exist. ファイル %1 は存在しません。 Unable to copy %1 %1 をコピーできません Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item 新しいアイテムの追加 Files ファイル Translation 翻訳 Resources リソース Dialog ダイアログ Header ヘッダファイル Sources ソースファイル Project or Scope: プロジェクトまたはスコープ: File Name : ファイル名 : Location : 場所 : ... ... OK OK Cancel キャンセル newfile.cpp AddNewClass OK OK Cancel キャンセル Inheritance 継承 Inherits another class 継承した別のクラス Ancestor: 祖先: Ancestor's include filename: 祖先のインクルードファイル名: Scope: スコープ: Filenames ファイル名 Header filename: ヘッダファイル名: Implementation filename: 実装ファイル名: Location : 場所: ... ... Project or Scope: プロジェクトまたはスコープ: Class name: クラス名: Constructor arguments: コンストラクタ引数: Virtual destructor Virtual デストラクタ Add New Class 新しいクラスの追加 AddNewClassImpl Choose the file location ファイルの場所を選択してください Cancel キャンセル Unable to create file. ファイルを作成できません。 The file "%1" already exists. ファイル "%1" は既に存在します。 AddNewClassMethod Add New Method 新しいメソッドの追加 Method Name: メソッド名: Return type: 戻り型: Parameters: 引数: Scope: スコープ: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel キャンセル AddNewClassMethodImpl Add New Method in class %1 クラス %1 に新しいメソッドを追加 An implementation file is required. 実装ファイルが要求されている。 Cancel キャンセル %1 already exists in class %2. %1 は既にクラス %2 に存在します。 AddNewClassVariable Add New Variable 新しい変数の追加 Create get/set methods get/set メソッドの追加 inline inline set method set メソッド get method get メソッド OK OK Cancel キャンセル Variable Name: 変数名: Type: 型: Scope: スコープ: AddNewClassVariableImpl Cancel キャンセル %1 already exists in class %2. %1 は既にクラス %2 に存在します。 AddNewImpl Choose the file location ファイルの場所を選択してください The suffix of the file is not correct. ファイルのサフィックスが正しくありません。 Cancel キャンセル header ヘッダファイル Yes はい No いいえ Also create the file %1 in same location ? 同じ場所にあるファイル %1 も作成しますか? source ソースファイル AddScope Add New Scope 新しいスコープの追加 New Scope 新しいスコープ win32 win32 debug debug unix unix release release mac mac other その他 Project or Scope : プロジェクトまたはスコープ : OK OK Cancel キャンセル AddSetGet Add get/set methods get/set メソッドの追加 OK OK Cancel キャンセル Create get/set methods for get/set メソッドの作成 inline inline set method set メソッド get method get メソッド AddSetGetImpl Cancel キャンセル BreakpointCondition Dialog ダイアログ Condition : 条件: is true (breakpoint) は真 (ブレークポイント) has changed (watchpoint) は変化した (ウォッチポイント) Build Update project プロジェクトの更新 Clean Project プロジェクトのクリーン Build ビルド Build stopped ビルドの停止 Compilation of %1... %1 のコンパイル... Debug Running... 実行... Exited normally 正常終了 Debug... デバッグ... Debug exited デバッグ終了 Error: Unable to evaluate value エラー: 値を評価できません Exited with error code %1 Editor Refresh classes and methods lists クラスとメソッドリストの更新 What do you want to do? あなたは何をしたいのですか? Overwrite 上書き Reload File ファイルのリロード The file "%1" was modified outside editor. ファイル "%1" は外部エディタで更新されました。 Open %1 %1 を開く %1 replacement(s) made. %1 の置換が完了しました。 The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK OK Cancel キャンセル Choose program to Debug : デバッグするプログラムを選択してください : Don't ask question anymore これ以上質問しないでください FindFile Find in Files ファイルから検索 Pattern: パターン: Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Recursive 再帰 *.cpp; *.h *.ui; *.qrc; *.txt Files: ファイル: ... ... Find in: 検索: &Find 検索(&F) &Close 閉じる(&C) Replace found text Replace with: FindFileImpl Choose a directory ディレクトリを選択してください &Find 検索(&F) &Stop 停止(&S) Line File ファイル Cannot open temporary file %1 FindWidget Form フォーム Previous 前へ Next 次へ Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました GotoLine Goto Line 行へジャンプ <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">行へジャンプ:</span></p></body></html> OK OK Cancel キャンセル InitCompletion Unable to launch %1 %1 を起動できません Unable to open %1 %1 を開けません LineNumbers Toogle Bookmark ブックマークの設定/解除 Toogle Breakpoint ブレークポイントの設定/解除 Breakpoint Condition... ブレークポイント条件... LogBuild error エラー warning 警告 error Compiler message エラー undefined reference to Linker message warning Compiler message 警告 Main QDevelop QDevelop &? &? &Project プロジェクト(&P) &View 表示(&V) &Debug デバッグ(&D) &Build ビルド(&B) &File ファイル(&F) &Edit 編集(&E) Outputs 出力 Build ビルド Name 名前 Type Address アドレス Value ... ... Project Explorer プロジェクト一覧 Files ファイル Classes クラス Files toolbar ファイルのツールバー Edit Toolbar 編集のツールバー &New Project... 新しいプロジェクト(&N)... &New File... 新しいファイル(&N)... New File 新しいファイル &File... ファイル(&F)... &Close All Files すべてのファイルを閉じる(&C) &Save File ファイルを保存(&S) Ctrl+S Ctrl+S &Quit 閉じる(&Q) Undo 元に戻す Ctrl+Z Ctrl+Z Redo やり直す Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All すべて選択 Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item 新しいアイテムの追加 Add Existing Files 既存ファイルの追加 New Folder 新しいフォルダ Project Properties プロジェクトのプロパティ Clean クリーン Rebuild リビルド Compile File ファイルのコンパイル Shift+F7 Shift+F7 Start Program プログラム開始 Shift+F5 Shift+F5 Step Into ステップイン F11 F11 Step Over ステップオーバー F10 F10 Calls Stack コールスタック &Open... 開く(&O)... Ctrl+O Ctrl+O F3 F3 Stop 停止 F6 F6 Breakpoints... ブレークポイント... Indent selection 選択範囲のインデント設定 Tab Tab Unindent selection 選択範囲のインデント解除 Shift+Tab Shift+Tab F1 F1 Save Project As... 名前を付けてプロジェクトを保存... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment コメント設定 Uncomment コメント解除 Complete Code 完全コード Ctrl+Space Ctrl+Space Toggle &Bookmark ブックマークの設定/解除(&B) Toggle Bookmark ブックマークの設定/解除 Ctrl+B Ctrl+B Clear &All Bookmarks すべてのブックマークをクリア(&A) &Open Project... プロジェクトを開く(&O)... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Ctrl+N Ctrl+N Goto matching bracket 対応する括弧へジャンプ Ctrl+[ Ctrl+[ Plugins プラグイン F7 F7 Foo Foo &Print... 印刷(&P)... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks ブックマーク(&B) &Last Projects 最近開いたプロジェクト(&L) B&uild ビルド(&B) Las&t Files 最近開いたファイル(&T) &Tools ツール(&T) &Plugins settings プラグイン設定(&P) Ed&itors エディタ(&I) 1 1 Build and Debug Toolbar ビルドとデバッグのツールバー Call Stacks コールスタック Registers レジスタ Save File &as... 名前を付けてファイルを保存(&A)... Save A&ll すべてを保存(&L) &Undo 元に戻す(&U) &Redo 元に戻す(&R) Cu&t 切り取り(&T) &Copy コピー(&C) &Paste 貼り付け(&P) &Find... 検索(&F)... &Replace... 置換(&R)... &Find in Files... ファイルから検索(&F)... Add New &Item... 新しいアイテムの追加(&I)... Add Existing &Files... 既存ファイルの追加(&F)... Project &Properties... プロジェクトのプロパティ(&P)... &Clean クリーン(&C) &Rebuild リビルド(&R) S&tart Program プログラム開始(&T) Step &Into ステップイン(&I) Step O&ver ステップオーバー(&V) &Calls Stack コールスタック(&C) &Options... オプション(&O)... &Parameters... 引数(&P)... &About... QDevelop について(&A)... About &Qt... Qt について(&Q)... Find &Next 次を検索(&N) &Stop 停止(&S) &Stop Build ビルドの停止(&S) &Help Current Qt Word カレント Qt ワードのヘルプ(&H) &Reset Executables List 実行可能リストのリセット(&R) &Save Project プロジェクトを保存(&S) C&lose Project プロジェクトを閉じる(&L) Add &Scope... スコープの追加(&S)... Step &Out ステップアウト(&O) &Close Current Editor カレントエディタを閉じる(&C) &Next Tab 次のタブ(&N) &Previous Tab 前のタブ(&P) &Switch to Header/Sources ヘッダ/ソースファイルの切り替え(&S) Set &Focus to Editor エディタにフォーカスを設定(&F) Toggle &breakpoint ブレークポイントの設定/解除(&B) Goto &Methods List メソッドリストへジャンプ(&M) Configure &Shortcuts... ショートカットの割り当て(&S)... &Goto Line... 行へジャンプ(&G)... Toggle Co&mments コメントの設定/解除(&M) E&xternal Tools... 外部ツール(&X)... &Next Bookmark 次のブックマーク(&N) &Previous Bookmark 前のブックマーク(&P) Find Pr&evious 前を検索(&E) Goto matching &bracket 対応する括弧へジャンプ(&B) Add New &Class... 新しいクラスの追加(&C)... Open F&ile in project... プロジェクトのファイルを開く(&I)... Goto &Implementation 実装へジャンプ(&I) Goto &Declaration 宣言へジャンプ(&D) &Rebuild Qt classes database クラスデータベースのリビルド(&R) Execute &qmake qmake の実行(&Q) Show Maximized 最大化で表示 &Editor mode エディタモード(&E) Ctrl+E Ctrl+E Next Warning/Error 次の警告/エラー F4 F4 Previous Warning/Error 前の警告/エラー Shift+F4 Shift+F4 Clear all Warnings/Errors すべての警告/エラーのクリア &Toolbars ツールバー(&T) Dock windows ドックウィンドウ Local Variables ローカル変数 Other Variables 他の変数 Find in files ファイルから検索 Full view すべてのウィンドウを表示 Minimal view 最小限のウィンドウで表示 DocksWindow ドックウィンドウ Dock Windows ドックウィンドウ New submenu > 新しいサブメニュー > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create ファイルを選択してください Files ファイル Cancel キャンセル Do you want to quit QDevelop ? QDevelop を終了しますか? Yes はい No いいえ Choose a file to open ファイルを選択してください Sources ソースファイル Projects プロジェクト Texts テキスト All Files すべてのファイル Files (*.cpp *.h *.txt *.* *) ファイル (*.cpp *.h *.txt *.* *) Stop 停止 Start 開始 The project has been modified, do you want to save your changes ? プロジェクトが更新されています。更新を保存しますか? Stop debugging ? デバッグを停止しますか? run Build. ビルドを開始します。 Ok Ok Shift+F5 Shift+F5 F5 F5 Abort 中止 Stopping is not possible under Windows. Put breakpoints. Windows では停止できません。ブレークポイントを解除してください。 Continue 継続 &%1 %2 &%1 %2 New Variable: 新しい変数: Choose a project to open プロジェクトを選択してください Build finished without error エラー無しでビルド終了 Build finished with でビルド終了 error(s) エラー and warning(s) 警告 The file "%1" already exists in directory. ファイル "%1" は既にディレクトリに存在します。 Unable to create %1 %1 を作成できません The project %1 doesn't exist. プロジェクト %1 は存在しません。 Properties of %1... %1 のプロパティ... The program doesn't exist, プログラムは存在しません。 The variable "%1" already exists. 変数 "%1" は既に存在します。 The Qt include directory doesn't exist, You can change in Options dialog. Qt インクルードディレクトリが存在しません。 オプションダイアログで変更することができます。 The Qt database building is already in progress. Qt データベースのビルドは既に処理中です。 The Qt classes database build is ended. Qt クラスデータベースのビルドが終了しました。 Version %1 Cannot launch Linguist NewImplementation New Implementation 新しい実装 Class Name : クラス名: File Name : ファイル名: Location : 場所: ... ... &Ok &OK C&ancel キャンセル(&A) NewProject New project creation 新しいプロジェクトの作成 Template テンプレート Application with Dialog ダイアログによるアプリケーション Application with Main Window メインウィンドウによるアプリケーション Properties プロパティ Parent project : 親プロジェクト: Project name : プロジェクト名: Location : 場所: ... ... Project creation on : プロジェクト作成: Version バージョン Debug Version Debug バージョン Release Version Release バージョン OK OK Cancel キャンセル Sub-directories サブディレクトリ Dialogs: ダイアログ: Executable: 実行ファイル: ui ui bin bin sources: ソースファイル: Objects: オブジェクト: src src build build Inheritance subclassing 継承クラス Object name: オブジェクト名: File name: ファイル名: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project 空またはマスタープロジェクト NewProjectImpl Choose the project directory プロジェクトディレクトリを選択してください The directory "%1" cannot be created ディレクトリ "%1" は作成できません Cancel キャンセル The project cannot be created プロジェクトは作成できません Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog ダイアログ OK OK Cancel キャンセル Qt Variables Qt 変数 User Variable ユーザ変数 Variable : 変数 : New Variable : 新しい変数 : Operator : Operator : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project プロジェクトのファイルを開く OK OK Cancel キャンセル Options Options オプション General 全般 Prompt before quit 終了する前に確認 Show classes explorer クラス一覧の表示 Interval between updates: 更新の間隔: seconds Editor エディタ Font: フォント: End of line 改行コード Tab size タブのサイズ Current line background カレント行の背景色 Text background 背景色 Default デフォルト Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces タブをスペースに置き換える ... ... options オプション Line numbers 行番号 Syntax highlighting 文法ハイライト Auto-Brackets 自動括弧 Selection border 選択境界 Complete Code 完全コード Autoindent オートインデント Function/method names : 関数/メソッド名: Preprocessor : プリプロセッサ: Qt words : Qt ワード: Keywords : キーワード: Single comments : シングル行コメント: Multiline comments : マルチ行コメント: Quotation strings : 引用文字列: Default projects directory: デフォルトプロジェクトディレクトリ: Matching ( and { ( と { のマッチング User plugins directory: ユーザプラグインディレクトリ: Save all before build ビルド前にすべてを保存 Automatic compilation 自動コンパイル Qt include directory: Qt インクルードディレクトリ: Qt documentation directory: Qt ドキュメントディレクトリ: Make extra parameters: 付加引数の生成: Reload last project when the application starts アプリケーション開始時に直前のプロジェクトをリロードする Close button in each tab (does not work with all styles) タブ毎にボタンを閉じる (すべてのスタイルで動作する訳ではない) Display editor toolbars エディタツールバーの表示 Display white spaces 空白文字を表示 Files encoding: エンコーディング: Text color 文字色 Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory プロジェクトディレクトリを選択してください Param Program parameters プログラム引数 Run with these arguments: 実行時の引数: Working directory (leave empty to use project directory): ワーキングディレクトリ (プロジェクトディレクトリを使用するため空にしておいてください): ... Environment variables (NAME=value): 環境変数 (NAME=value): Name 名前 Value &Edit 編集(&E) &Add 追加(&A) &Delete 削除(&D) &Sort ソート(&S) &Default デフォルト(&D) &OK &OK &Cancel キャンセル(&C) ParametersImpl Choose the project location プロジェクトの場所を選択してください Cancel キャンセル The variable "%1" already exists. 変数 "%1" は既に存在します。 ProjectManager Save project changes ? プロジェクトの変更を保存しますか? Yes はい No いいえ Cancel キャンセル Forms: フォーム: Unable to create file. ファイルを作成できません。 Ok Ok Sub-project creation サブプロジェクトの作成 Sub-Projects サブプロジェクト Sub-projects サブプロジェクト Headers ヘッダファイル Sources ソースファイル Dialogs ダイアログ Translations 翻訳 Resources リソース Project parsing プロジェクト解析 New name: 新しい名前: The kind of the new and the old filename is different ! 新しいファイルと古いファイルの種類が違います! Rename 名前の変更 The file already exists in directory. ファイルは既にディレクトリに存在します。 The file already exists. ファイルは既に存在します。 This file is not permitted. ファイルは許可されていません。 Unable to rename the file to "%1" "%1" へのファイル名の変更ができません The only available version for "%1" is %2 利用可能な "%1" のバージョンは %2 です Run on %1 %1 を実行 Cannot remove the main project. メインプロジェクトは削除できません。 Do you want to remove "%1" from the project ? プロジェクトから "%1" を削除しますか ? File not found: "%1" ProjectPropertie Dialog ダイアログ Configuration 構成 General : 全般: Version バージョン build_all build_all debug debug release release debug_and_release debug_and_releas Warnings 警告 warn_off warn_off warn_on warn_on Qt Libraries Qt ライブラリ core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options 詳細オプション app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables 変数 Variable : 変数: ... ... Values : 値: Project Template プロジェクトのテンプレート subdirs subdirs lib lib app app Project or Scope : プロジェクトまたはスコープ: OK OK Cancel キャンセル Default directories デフォルトディレクトリ Dialogs: ダイアログ: Sources: ソースファイル: qtestlib qtestlib Advanced options 詳細オプション Free CONFIG variables : その他の CONFIG 変数 : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: 新しい値: delete spaces or put quotes. スペースを削除するか引用記号を入れる。 Modify 更新 Cancel キャンセル Choose the sources location ソースファイルの場所を選択してください Choose the dialogs location ダイアログの場所を選択してください Properties of %1 %1 のプロパティ The spaces aren't correctly parsed by qmake スペースは qmake で正しく解析されません A new variable can not be "QT", "CONFIG" or "TEMPLATE" 新しい変数は "QT", "CONFIG", "TEMPLATE" にすることができません QObject Unable to start Assistant ! Assistant を開始できません! Loading: ロード: Interface translation インタフェース解釈 Environment control 環境制御 Files on editor エディタ上のファイル Main Window creation メインウィンドウ作成 Unable to establish a database connection. データベース接続を確立できません。 QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop は SQLite を必要とします。ビルドするための情報は Qt SQL ドライバのドキュメントを参照してください。 Current project parsing カレントオブジェクト解析 Plugins プラグイン Unable to start Designer ! Designer を開始できません! Registers Form フォーム Name 名前 Value Apply 適用 ReplaceWidget Form フォーム find: 検索: Replacement: 置換: &Replace 置換(&R) Previous 前へ Next 次へ Case Sensitive 大文字・小文字を区別する Whole words ワード全体 Prompt プロンプト Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました Shortcuts Configure Shortcuts ショートカットの割り当て Action アクション Shortcut ショートカット Default デフォルト OK OK Cancel キャンセル Subclassing Qt Designer Form Subclassing Qt Designer フォームのサブクラス化 &New... 新規(&N)... &Create 作成(&C) C&ancel キャンセル(&A) Class Na&me: クラス名(&M): &File Name: ファイル名(&F): &Location: 場所(&L): Filter &by: フィルタ(&B): SubclassingImpl Choose the file location ファイルの場所を選択してください &Update 更新(&U) C&reate 作成(&R) (.h and .cpp) TabWidget Close Tab タブを閉じる Close Other Tabs 他のタブを閉じる Close All Tabs すべてのタブを閉じる TextEdit Cancel キャンセル Yes はい No いいえ Cut 切り取り Copy コピー Paste 貼り付け Selection Indent 選択範囲のインデント設定 Selection Unindent 選択範囲のインデント解除 Select All すべて選択 Find... 検索... Toggle Bookmark ブックマークの設定/解除 Toggle Breakpoint ブレークポイントの設定/解除 The file "%1" could not be loaded. ファイル "%1" はロードできません。 Save "%1" "%1" を保存しますか? Unable to save %1 %1 を保存できません Goto Implementation 実装へジャンプ Goto Declaration 宣言へジャンプ The Qt database building is in progress. Try to complete code later. Qt データベースのビルドが処理中です。 後から完全コードで試してください。 Reached end of page, continued from top ページ末尾に到達したので、先頭から継続しました ToolsControl External Tools 外部ツール qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: irelease: designer: designer: ... ... &Test テスト(&T) Please enter the path to the external programs: 外部プログラムのパスを入力してください: Check environment on start 開始環境をチェックする assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags はパス %1 を検出しましたが,このバージョンは古過ぎます。 Ok Ok Please select the program TreeClasses Open Declaration 宣言を開く Open Implementation 実装を開く Refresh contents コンテンツの更新 Add Method... メソッドの追加... Add Variable... 変数の追加... Add get/set Methods... get/set メソッドの追加... TreeProject Add sub-project... サブプロジェクトの追加... Add New Item... 新しいアイテムの追加... Add Scope... スコープの追加... Add Existing Files... 既存ファイルの追加... Open in Linguist Linguist で開く Refresh translation files 翻訳ファイルを更新 Build release translation files 翻訳ファイルをリリース Open in Designer Designer で開く Dialog Subclassing... ダイアログのサブクラス化... Dialog Preview ダイアログのプレビュー Open 開く Show As 強調表示 Normal 通常 Krawek Krawek Add New Class... 新しいクラスの追加... Rename... 名前の変更... Properties of %1... %1 のプロパティ... Remove from project プロジェクトから削除 Warning Dialog TextLabel OK OK Don't show anymore これ以上見せないでください qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Spanish.ts.svn-base0000444000175000017500000045703311362261066027245 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versión</span></p></body></html> OK Aceptar <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Agregar Archivos Existentes OK Aceptar Cancel Cancelar Project or Scope : Proyecto o Alcance : File : Archivo : ... ... Copy files here: Copiar archivos aquí: AddExistantImpl Choose the file to add Elija el archivo a agregar Enter a filename. Introduzca un nombre de archivo. Cancel Cancelar Enter a location destination. Introduzca lugar de destino. Choose a directory Elegir un directorio The file %1 doesn't exist. El archivo %1 no existe. Unable to copy %1 Imposible copiar %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Agregar Nuevo Elemento Files Archivos Translation Traducción Resources Recursos Dialog Diálogo Header Cabecera Sources Fuentes Project or Scope: Proyecto o Alcance: File Name : Nombre del archivo : Location : Ruta : ... ... OK Aceptar Cancel Cancelar newfile.cpp archivonuevo.cpp AddNewClass Add New Class Agregar Nueva Clase OK Aceptar Cancel Cancelar Inheritance Herencia Inherits another class Hereda otra clase Ancestor: Padre: Ancestor's include filename: Archivo .h del padre: Scope: Ámbito: Filenames Archivos Header filename: Archivo de cabecera: Implementation filename: Archivo de implementación: Location : Ubicación : ... ... Project or Scope: Proyecto o Alcance: Class name: Nombre de la clase: Constructor arguments: Argumentos del constructor: Virtual destructor Destructor virtual AddNewClassImpl Choose the file location Elija la ruta del archivo Cancel Cancelar Unable to create file. Imposible crear archivo. The file "%1" already exists. El archivo "%1" ya existe. AddNewClassMethod Add New Method Agregar Nuevo Método Method Name: Nombre del Método: Return type: Tipo de Retorno: Parameters: Parámetros: Scope: Ámbito: Inline Virtual Static Pure OK Aceptar Cancel Cancelar AddNewClassMethodImpl Add New Method in class %1 Agregar Nuevo Método en la clase %1 An implementation file is required. Un archivo de implementación es requerido. Cancel Cancelar %1 already exists in class %2. %1 ya existe en la clase %2. AddNewClassVariable Add New Variable Agregar Nueva Variable Create get/set methods Crear geters/seters inline set method método set get method método get OK Aceptar Cancel Cancelar Variable Name: Nombre de la Variable: Type: Tipo: Scope: Ámbito: AddNewClassVariableImpl Cancel Cancelar %1 already exists in class %2. %1 ya existe en la clase %2. AddNewImpl Choose the file location Elija una ruta para el archivo The suffix of the file is not correct. El sufijo del archivo no es correcto. Cancel Cancelar header cabecera Yes No No Also create the file %1 in same location ? ¿Crear el archivo %1 en la misma ubicación? source fuente AddScope Add New Scope Agregar Nuevo Alcance New Scope Nuevo Alcance win32 debug depuración unix release lanzamiento mac other otro Project or Scope : Proyecto o Alcance : OK Aceptar Cancel Cancelar AddSetGet Add get/set methods Agregar geters/seters OK Aceptar Cancel Cancelar Create get/set methods for Crear geters/seters para inline set method método set get method método get AddSetGetImpl Cancel Cancelar BreakpointCondition Dialog Diálogo Condition : Condición : is true (breakpoint) es verdadero (punto de ruptura) has changed (watchpoint) a cambiado (punto de observación) Build Update project Actualizar Proyecto Clean Project Limpiar Proyecto Build Compilar Build stopped Compilación detenida Compilation of %1... Compilación de %1... Debug Running... Ejecutando... Exited normally Finalizado normalmente Debug... Depurando... Debug exited Depuración finalizada Error: Unable to evaluate value Error: Imposible evaluar el valor Exited with error code %1 Editor Refresh classes and methods lists Actualizar listas de clases y métodos What do you want to do? ¿Qué desea hacer? Overwrite Sobreescribir Reload File Recargar Archivo The file "%1" was modified outside editor. El archivo "%1" fué modificado externamente. Open %1 Abrir %1 %1 replacement(s) made. %1 reemplazo(s) hechos. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Aceptar Cancel Cancelar Choose program to Debug : Elija el programa a Depurar : Don't ask question anymore No preguntar más FindFile Find in Files Encontrar en Archivos Pattern: Patrón de búsqueda: Case Sensitive Distinguir entre mayúsculas y minúsculas Whole words Palabras completas Recursive Recursivo *.cpp; *.h *.ui; *.qrc; *.txt Files: Archivos: ... ... Find in: Buscar en: &Find &Buscar &Close &Cerrar Replace found text Replace with: FindFileImpl Choose a directory Elegir un directorio &Find &Buscar &Stop &Detener Line Línea File Archivo Cannot open temporary file %1 FindWidget Form Forma Previous Anterior Next Siguiente Case Sensitive Distinguir mayúsculas y minúsculas Whole words Palabras completas Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio GotoLine Goto Line Ir a la Línea <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ir a la Línea:</span></p></body></html> OK Aceptar Cancel Cancelar InitCompletion Unable to launch %1 Imposible ejecutar %1 Unable to open %1 Imposible abrir %1 LineNumbers Toogle Bookmark Alternar Marcador Toogle Breakpoint Alternar Punto de Ruptura Breakpoint Condition... Condición de Punto de Ruptura... LogBuild error warning advertencia error Compiler message undefined reference to Linker message warning Compiler message advertencia Main QDevelop &? &? &Project &Proyecto &View &Ver &Debug &Depurar &Build &Compilar &File &Archivo &Edit &Edición Outputs Salidas Build Compilar Name Nombre Type Tipo Address Dirección Value Valor ... ... Project Explorer Explorador de Proyecto Files Archivos Classes Clases Files toolbar Barra de Herramientas de Archivos Edit Toolbar Barra de Herramientas de Edición &New Project... &Nuevo Proyecto... &New File... &Nuevo Archivo... New File Nuevo Archivo &File... &Archivo... &Close All Files &Cerrar Todos los Archivos &Save File &Guardar Archivo Ctrl+S &Quit &Salir Undo Deshacer Ctrl+Z Redo Rehacer Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Seleccionar Todo Ctrl+A Ctrl+F Ctrl+R Add New Item Agregar Nuevo Elemento Add Existing Files Agregar Archivos Existentes New Folder Nuevo Directorio Project Properties Propiedades del Proyecto F7 Clean Limpiar Rebuild Recompilar Compile File Compilar Archivo Shift+F7 Start Program Iniciar Programa Shift+F5 Step Into Paso Dentro F11 Step Over Paso Sobre F10 Calls Stack Pila de Llamadas &Open... &Abrir... Ctrl+O F3 Stop Detener F6 Breakpoints... Puntos de Ruptura... Indent selection Indentar selección Tab Unindent selection Desindentar selección Shift+Tab F1 Save Project As... Guardar Proyecto Como... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Comentar Uncomment Descomentar Complete Code Completar Código Ctrl+Space Toggle &Bookmark Alternar &Marcador Toggle Bookmark Alternar Marcador Ctrl+B Clear &All Bookmarks Limpiar &Todos los Marcadores &Open Project... &Abrir Proyecto... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Agregados Ctrl+N Goto matching bracket Ir a la llave correspondiente Ctrl+[ Foo &Print... Im&primir... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Marcadores &Last Projects &Últimos Proyectos B&uild &Compilar Las&t Files Úl&timos Archivos &Tools &Herramientas &Plugins settings Configuración de &Agregados Ed&itors Ed&itores 1 Build and Debug Toolbar Barra de Herramientas de Compilación y Depuración Call Stacks Pilas de Llamada Registers Registros Save File &as... Guardar &Archivo como... Save A&ll Guardar &Todo &Undo &Deshacer &Redo &Rehacer Cu&t Cor&tar &Copy &Copiar &Paste &Pegar &Find... &Buscar... &Replace... &Reemplazar... &Find in Files... &Buscar en Archivos... Add New &Item... Agregar Nuevo &Elemento... Add Existing &Files... Agregar &Archivos Existentes... Project &Properties... &Propiedades del Proyecto... &Clean &Limpiar &Rebuild &Recompilar S&tart Program &Iniciar Programa Step &Into Paso &Dentro Step O&ver Paso &Sobre &Calls Stack &Pila de Llamadas &Options... &Opciones... &Parameters... &Parámetros... &About... &Acerca de... About &Qt... Acerca de &Qt... Find &Next Buscar &Siguiente &Stop &Detener &Stop Build &Detener Compilación &Help Current Qt Word &Ayuda con la palabra Qt actual &Reset Executables List &Limpiar Lista de Ejecutables &Save Project &Guardar Proyecto C&lose Project &Cerrar Proyecto Add &Scope... Agregar &Alcance... Step &Out Paso &Fuera &Close Current Editor &Cerrar Editor Actual &Next Tab Pestaña &Siguiente &Previous Tab Pestaña &Anterior &Switch to Header/Sources &Cambiar a Cabecera/Fuentes Set &Focus to Editor Asignar &Foco al Editor Toggle &breakpoint Alternar &Punto de Ruptura Goto &Methods List Ir a la Lista de &Métodos Configure &Shortcuts... Configurar &Accesos Rápidos... &Goto Line... &Ir a la Línea... Toggle Co&mments Alternar Co&mentarios E&xternal Tools... Herramientas E&xternas... &Next Bookmark Marcador &Siguiente &Previous Bookmark Marcador &Anterior Find Pr&evious Buscar An&terior Goto matching &bracket Ir a la &llave correspondiente Add New &Class... Agregar Nueva &Clase... Open F&ile in project... Abrir A&rchivo en proyecto... Goto &Implementation Ir a la &Implementación Goto &Declaration Ir a la &Declaración &Rebuild Qt classes database &Recompilar BD de Clases de QT Execute &qmake Ejecutar &qmake Show Maximized Mostrar Maximizado &Editor mode Modo &Editor Ctrl+E Next Warning/Error Advertencia/Error Siguiente F4 Previous Warning/Error Advertencia/Error Anterior Shift+F4 Clear all Warnings/Errors Limpiar todas las Advertencias/Errores &Toolbars &Barras de Herramientas Dock windows Ventanas Acoplables Local Variables Variables Locales Other Variables Otras Variables Find in files Buscar en archivos Full view Vista completa Minimal view Vista mínima DocksWindow VentanasAcoplables Dock Windows Ventanas Acoplables New submenu > Nuevo submenú > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Elija el archivo a crear Files Archivos Cancel Cancelar Do you want to quit QDevelop ? ¿Desea salir de QDevelop? Yes No No Choose a file to open Elija un archivo a abrir Sources Fuentes Projects Proyectos Texts Textos All Files Todos los Archivos Files (*.cpp *.h *.txt *.* *) Archivos (*.cpp *.h *.txt *.* *) Stop Detener Start Iniciar The project has been modified, do you want to save your changes ? El proyecto ha sido modificado, ¿desea guardar los cambios? Stop debugging ? ¿Detener depuración? run Build. ejecute Compilación. Ok Aceptar Shift+F5 F5 Abort Abortar Stopping is not possible under Windows. Put breakpoints. No es posible detenerse sobre Windows. Ponga puntos de ruptura. Continue Continuar &%1 %2 &%1 %2 New Variable: Nueva Variable: Choose a project to open Elija un proyecto para abrir Build finished without error Compilación finalizada sin errores Build finished with Compilación finalizada con error(s) error(es) and y warning(s) advertencia(s) The file "%1" already exists in directory. El archivo "%1" ya existe en el directorio. Unable to create %1 Imposible crear %1 The project %1 doesn't exist. El proyecto %1 no existe. Properties of %1... Propiedades de %1... The program doesn't exist, El programa no existe, The variable "%1" already exists. La variable "%1" ya existe. The Qt include directory doesn't exist, You can change in Options dialog. El directorio "include" de QT no existe, puede cambiarlo en el diálogo de Opciones. The Qt database building is already in progress. La compilación de la BD de QT está en progreso. The Qt classes database build is ended. La compilación de la BD de clases de Qt ha terminado. Version %1 Versión %1 Cannot launch Linguist NewImplementation New Implementation Nueva Implementación Class Name : Nombre de la Clase : File Name : Nombre del Archivo : Location : Ubicación : ... ... &Ok &Aceptar C&ancel &Cancelar NewProject New project creation Nuevo proyecto Template Plantilla Application with Dialog Aplicación con Diálogo Application with Main Window Aplicación con Ventana Principal Properties Propiedades Parent project : Proyecto padre : Project name : Nombre del proyecto : Location : Ubicación : ... ... Project creation on : Crear proyecto en : Version Versión Debug Version Versión de Depuración Release Version Versión de Lanzamiento OK Aceptar Cancel Cancelar Sub-directories Subdirectorios Dialogs: Diálogos: Executable: Ejecutable: ui bin sources: fuentes: Objects: Objetos: src build compilar Inheritance subclassing Heredar subclase Object name: Nombre del objeto: File name: Nombre del archivo: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diálogo:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclase:</span></p></body></html> Empty or master project Proyecto vacío o maestro NewProjectImpl Choose the project directory Elija el directorio para el proyecto The directory "%1" cannot be created Imposible crear directorio "%1" Cancel Cancelar The project cannot be created Imposible crear proyecto Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Diálogo OK Aceptar Cancel Cancelar Qt Variables Variables de Qt User Variable Variable de Usuario Variable : Variable : New Variable : Nueva Variable: Operator : Operador : = += -= *= ~= OpenFile Open File in Project Abrir Archivo en el Proyecto OK Aceptar Cancel Cancelar Options Options Opciones General Prompt before quit Preguntar antes de salir Show classes explorer Mostrar explorador de clases Interval between updates: Intervalo entre actualizaciones: seconds segundos Editor Font: Fuente: End of line Fin de línea Tab size Tamaño de tabulador Current line background Fondo de línea en edición Text background Fondo de texto Default Por defecto Unix Dos/Windows Replace Tab by spaces Reemplazar Tabulador por espacios ... ... options opciones Line numbers Números de línea Syntax highlighting Resaltar sintaxis Auto-Brackets Cerrar llaves automáticamente Selection border Borde de selección Complete Code Completar Código Autoindent Indentar automáticamente Function/method names : Nombres de función/método : Preprocessor : Preprocesador : Qt words : Palabras Qt : Keywords : Palabras clave : Single comments : Comentarios simples : Multiline comments : Comentarios multilínea : Quotation strings : Cadenas entre comillas : Default projects directory: Directorio de proyectos por defecto: Matching ( and { ( y { correspondientes User plugins directory: Directorio de agregados de usuario: Save all before build Guardar todo antes de compilar Automatic compilation Compilación automática Qt include directory: Directorio "include" de QT: Qt documentation directory: Directorio de documentación de Qt: Make extra parameters: Parámetros extra para "make": Reload last project when the application starts Recargar el último proyecto cuando la aplicación empiece Close button in each tab (does not work with all styles) Botón de cerrar en cada pestaña (no funciona con todos los estilos) Display editor toolbars Desplegar Barras de Herramientas del Editor Display white spaces Desplegar espacios en blanco Files encoding: Archivos codificando: Text color Color de Texto Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Elija el directorio del proyecto Param Program parameters Parámetros del programa Run with these arguments: Ejecutar con estos argumentos: Working directory (leave empty to use project directory): Directorio de trabajo (dejar vacío para usar el directorio del proyecto): ... ... Environment variables (NAME=value): Variables de entorno (NOMBRE=valor): Name Nombre Value Valor &Edit &Editar &Add &Agregar &Delete &Eliminar &Sort &Ordenar &Default Por &defecto &OK &Aceptar &Cancel &Cancelar ParametersImpl Choose the project location Elija la ubicación del proyecto Cancel Cancelar The variable "%1" already exists. La variable "%1" ya existe. ProjectManager Save project changes ? ¿Deseas guardar los cambios del proyecto? Yes No No Cancel Cancelar Forms: Formularios: Unable to create file. Imposible crear archivo. Ok Aceptar Sub-project creation Creación de sub-proyecto Sub-Projects Sub-Proyectos Sub-projects Sub-proyectos Headers Cabeceras Sources Fuentes Dialogs Diálogos Translations Traducciones Resources Recursos Project parsing Comprobando proyecto New name: Nuevo nombre: The kind of the new and the old filename is different ! El tipo del nuevo y del viejo archivo es diferente ! Rename Renombrar The file already exists in directory. El archivo ya existe en el directorio. The file already exists. El archivo ya existe. This file is not permitted. El archivo no está permitido. Unable to rename the file to "%1" Imposible renombrar el archivo a "%1" The only available version for "%1" is %2 La única versión disponible para "%1" es %2 Run on %1 Ejecutar en %1 Cannot remove the main project. Imposible quitar el proyecto principal. Do you want to remove "%1" from the project ? Deseas quitar "%1" del proyecto ? File not found: "%1" ProjectPropertie Dialog Diálogo Configuration Configuración General : General : Version Versión build_all compilar todas debug depuración release lanzamiento debug_and_release depuración y lanzamiento Warnings Advertencias warn_off apagadas warn_on encendidas Qt Libraries Bibliotecas Qt core network sql xml gui opengl svg qt3support Advanced Options Opciones Avanzadas app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variable : Variable : ... ... Values : Valores : Project Template Plantilla de Proyecto subdirs lib app Project or Scope : Proyecto o Alcance : OK Aceptar Cancel Cancelar Default directories Directorios por defecto Dialogs: Diálogos: Sources: Fuentes: qtestlib Advanced options Opciones avanzadas Free CONFIG variables : Variables CONFIG libres : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nuevo Valor: delete spaces or put quotes. elimine espacios o ponga comillas. Modify Modificar Cancel Cancelar Choose the sources location Elija la ubicación de los archivos fuente Choose the dialogs location Elija la ubicación de los diálogos Properties of %1 Propiedades de %1 The spaces aren't correctly parsed by qmake Los espacios no son analizados correctamente por qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Una nueva variable no puede ser "QT", "CONFIG" o "TEMPLATE" QObject Unable to start Assistant ! Imposible ejecutar Assistant ! Loading: Cargando: Interface translation Traducción de la interfaz Environment control Control del entorno Files on editor Archivos en el editor Main Window creation Creación de Ventana Principal Unable to establish a database connection. Imposible establecer una conexión con la base de datos. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop necesita soporte de SQLite. Por favor, lea la documentación sobre el driver Qt SQL para información de como compilarlo. Current project parsing Comprobando proyecto actual Plugins Agregados Unable to start Designer ! Imposible ejecutar Designer ! Registers Form Formulario Name Nombre Value Valor Apply Aplicar ReplaceWidget Form Forma find: buscar: Replacement: Reemplazo: &Replace &Reemplazar Previous Anterior Next Siguiente Case Sensitive Sensible a Mayúsculas Whole words Palabras completas Prompt Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio Shortcuts Configure Shortcuts Configurar Accesos rápidos Action Acción Shortcut Acceso rápido Default Por defecto OK Aceptar Cancel Cancelar Subclassing Qt Designer Form Subclassing Heredando del Formulario de Qt Designer &New... &Nuevo... &Create &Crear C&ancel C&ancelar Class Na&me: &Nombre de la clase: &File Name: Nombre del &archivo: &Location: &Ubicación: Filter &by: F&iltrar por: SubclassingImpl Choose the file location Elija la ubicación del archivo &Update &Actualizar C&reate C&rear (.h and .cpp) (.h y .cpp) TabWidget Close Tab Cerrar Pestaña Close Other Tabs Cerrar las Otras Pestañas Close All Tabs Cerrar Todas las Pestañas TextEdit Cancel Cancelar Yes No No Cut Cortar Copy Copiar Paste Pegar Selection Indent Indentar Selección Selection Unindent Desindentar Selección Select All Seleccionar Todo Find... Buscar... Toggle Bookmark Alternar Marcador Toggle Breakpoint Alternar Punto de ruptura The file "%1" could not be loaded. Imposible cargar el archivo "%1". Save "%1" Guardar "%1" Unable to save %1 Imposible guardar %1 Goto Implementation Ir a la Implementación Goto Declaration Ir a la Declaración The Qt database building is in progress. Try to complete code later. La Compilación de la BD de QT está en progreso. Intenta Completar Código después. Reached end of page, continued from top Alcanzado el final de la página, continuando desde el inicio ToolsControl External Tools Herramientas Externas qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Probar Please enter the path to the external programs: Por favor introduzca la ubicación hacia los programas externos: Check environment on start Comprobar entorno al iniciar assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Se detecto ctags en la ubicación %1, pero esa versión es muy vieja. Ok Aceptar Please select the program TreeClasses Open Declaration Abrir Declaración Open Implementation Abrir Implementación Refresh contents Actualizar contenidos Add Method... Agregar Método... Add Variable... Agregar Variable... Add get/set Methods... Agregar geters/seters... TreeProject Add sub-project... Agregar sub-proyecto... Add New Item... Agregar Nuevo Elemento... Add Scope... Agregar Nuevo Alcance... Add Existing Files... Agregar Archivos Existentes... Open in Linguist Abrir en Linguist Refresh translation files Actualizar archivos de tradución Build release translation files Compilar archivos de tradución de lanzamiento Open in Designer Abrir en Designer Dialog Subclassing... Heredar Diálogo... Dialog Preview Previsualizar Diálogo Open Abrir Show As Mostrar Como Normal Krawek Add New Class... Agregar Nueva Clase... Rename... Renombrar... Properties of %1... Propiedades de %1... Remove from project Quitar del proyecto Warning Dialog Diálogo TextLabel OK Aceptar Don't show anymore No mostrar más qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_French.ts.svn-base0000444000175000017500000045515611362261066027051 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Ajouter des fichiers existants OK Cancel Annuler Project or Scope : Projet ou portée : File : Fichier : ... ... Copy files here: Copier les fichiers ici: AddExistantImpl Choose the file to add Choisissez le fichier à ajouter Enter a filename. Entrez un nom de fichier. Cancel Annuler Enter a location destination. Entrez un emplacement de destination. Choose a directory Choisissez un répertoire The file %1 doesn't exist. Le fichier %1 n'existe pas. Unable to copy %1 Impossible de copier %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Ajouter un nouvel élément Files Type de fichier Translation Traduction Resources Ressource Dialog Dialogue Header Entête Sources Project or Scope: Projet ou portée : File Name : Nom du fichier : Location : Emplacement : ... ... OK Cancel Annuler newfile.cpp AddNewClass OK Cancel Annuler Inheritance Héritage Inherits another class Hérite d'une autre classe Ancestor: Classe héritée: Ancestor's include filename: Fichier d'entête de la classe héritée: Scope: Portée: Filenames Fichiers Header filename: Fichier d'entête: Implementation filename: Fichier d'implémentation: Location : Emplacement : ... ... Project or Scope: Projet ou portée : Class name: Nom de classe: Constructor arguments: Arguments du constructeur: Virtual destructor Destructeur virtuel Add New Class Ajouter une nouvelle classe AddNewClassImpl Choose the file location Choisissez le répertoire du fichier Cancel Annuler Unable to create file. Impossible de créer le fichier. The file "%1" already exists. Le fichier "%1" existe déjà. AddNewClassMethod Add New Method Ajouter une nouvelle méthode Method Name: Nom de la méthode: Return type: Type de retour: Parameters: Paramètres: Scope: Portée: Inline Virtual Static Pure OK Cancel Annuler AddNewClassMethodImpl Add New Method in class %1 Ajouter une nouvelle méthode dans la classe %1 An implementation file is required. Un fichier d'implémentation est nécessaire. Cancel Annuler %1 already exists in class %2. %1 existe déjà dans la classe %2. AddNewClassVariable Add New Variable Ajouter une nouvelle variable Create get/set methods Créer get/set méthodes inline set method get method OK Cancel Annuler Variable Name: Nom de variable: Type: Type: Scope: Portée: AddNewClassVariableImpl Cancel Annuler %1 already exists in class %2. %1 existe déjà dans la classe %2. AddNewImpl Choose the file location Choisissez le répertoire du fichier The suffix of the file is not correct. Le suffixe du nom saisi ne correspond pas à son type. Cancel Annuler header entête Yes Oui No Non Also create the file %1 in same location ? Créer également le fichier %1 au même emplacement? source source AddScope Add New Scope Ajouter une nouvelle portée New Scope Nouvelle portée win32 debug unix release mac other autre Project or Scope : Project or Scope : OK Cancel Annuler AddSetGet Add get/set methods Ajouter get/set méthodes OK Cancel Annuler Create get/set methods for Créer get/set méthodes pour inline set method get method AddSetGetImpl Cancel Annuler BreakpointCondition Dialog Dialogue Condition : Condition : is true (breakpoint) Est True (breakpoint) has changed (watchpoint) a changé (watchpoint) Build Update project Mise à jour du projet Clean Project Nettoyage du projet Build Génération Build stopped Génération interrompue Compilation of %1... Compilation de %1... Debug Running... Exécution... Exited normally Exécution terminée Debug... Débogage... Debug exited Débogage terminé Error: Unable to evaluate value Erreur: Impossible d'évaluer la valeur Exited with error code %1 Terminé avec le code erreur %1 Editor Refresh classes and methods lists Actualiser les listes classes et méthodes What do you want to do? Que voulez-vous faire? Overwrite Ecraser Reload File Recharger The file "%1" was modified outside editor. Le fichier "%1" a été modifié en dehors de l'éditeur. Open %1 Ouvrir %1 %1 replacement(s) made. %1 remplacement(s) effectué(s). The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Cancel Annuler Choose program to Debug : Choisissez l'exécutable à déboguer : Don't ask question anymore Ne plus poser la question FindFile Find in Files Chercher dans des fichiers Pattern: Motif: Case Sensitive Tenir compte de la casse Whole words Mots entiers Recursive Récursif *.cpp; *.h *.ui; *.qrc; *.txt Files: Fichiers: ... ... Find in: Chercher dans: &Find &Chercher &Close &Fermer Replace found text Remplacer le texte trouvé Replace with: Remplacer par: FindFileImpl Choose a directory Choisissez un répertoire Line Ligne File Fichier &Find &Chercher &Stop &Arrêter Cannot open temporary file %1 Impossible d'ouvrir le fichier temporaire %1 FindWidget Form Forme Previous Précédent Next Suivant Case Sensitive Tenir compte de la casse Whole words Mots entiers Reached end of page, continued from top Bas de la page atteint, poursuite au début GotoLine Goto Line Aller à la ligne <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Aller à la ligne:</span></p></body></html> OK Cancel Annuler InitCompletion Unable to launch %1 Impossible de lancer %1 Unable to open %1 Impossible d'ouvrir %1 LineNumbers Toogle Bookmark Basculer le signet Toogle Breakpoint Basculer le point d'arrêt Breakpoint Condition... Condition du point d'arrêt... LogBuild error erreur warning attention error Compiler message erreur undefined reference to Linker message référence indéfinie vers warning Compiler message attention Main QDevelop &? &? Build Génération &Edit &Edition &File &Fichier Outputs Sorties Files Fichiers Files toolbar Barre d'outils fichiers Edit Toolbar Barre d'outils édition &New Project... &Nouveau projet... &File... &Fichier... &Close All Files &Fermer tous les fichiers &Save File &Enregistrer fichier Ctrl+S &Quit &Quitter Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Sélectionner tout Ctrl+F Add New Item Ajouter un nouvel élément Add Existing Files Ajouter des fichiers existants New Folder Nouveau dossier Project Properties Propriété du projet F7 Clean Nettoyer Rebuild Regénérer Shift+F7 Start Program Exécuter le programme Shift+F5 Step Into Pas à pas détaillé F11 Step Over Pas à pas principal F10 &Open... &Ouvrir... F3 Stop Interrompre F6 Breakpoints... Points d'arrêt... Indent selection Indenter la sélection Tab Unindent selection Désindenter la sélection Shift+Tab F1 Project Explorer Explorateur de projet Save Project As... Enregistrer projet sous... Compile File Compiler le fichier Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Undo Annuler Redo Refaire F9 &View &Affichage &Project &Projet &Build &Générer &Debug &Déboguer Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Compléter le code Ctrl+Space Ctrl+D &New File... &Nouveau Fichier... New File Nouveau Fichier Comment Commenter Uncomment Décommenter Classes Calls Stack Pile d'appels Name Nom Type Type Address Adresse Value Valeur ... ... Toggle &Bookmark &Basculer le signet Toggle Bookmark Basculer le signet Ctrl+B Clear &All Bookmarks &Effacer tous les signets &Open Project... &Ouvrir projet... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Greffons Ctrl+N Goto matching bracket Aller à l'autre symbole Ctrl+[ Foo &Print... Im&primer... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Signets &Last Projects &Derniers projets B&uild &Générer Las&t Files &Derniers fichiers &Tools &Outils &Plugins settings &Configuration des greffons Ed&itors Ed&iteurs Build and Debug Toolbar Barre d'outils génération et débogage Save File &as... &Enregistrer fichier sous... Save A&ll Enregistrer t&out &Undo &Annuler &Redo &Refaire Cu&t Cou&per &Copy &Copier &Paste &Coller &Find... &Rechercher... &Replace... &Remplacer... &Find in Files... &Chercher dans des fichiers... Add New &Item... &Ajouter un nouvel élément... Add Existing &Files... &Ajouter des fichiers existants... Project &Properties... &Propriété du projet... &Clean &Nettoyer &Rebuild &Regénérer S&tart Program &Exécuter le programme Step &Into &Pas à pas détaillé Step O&ver &Pas à pas principal &Calls Stack &Pile d'appels &Options... &Options... &Parameters... &Paramètres... &About... &A propos... About &Qt... A propos de &Qt... Find &Next &Poursuivre la recherche &Stop &Arrêter &Stop Build &Arrêter la génération &Help Current Qt Word &Aide Qt du mot courant &Reset Executables List &Réinitialiser la liste des exécutables &Save Project &Enregistrer projet C&lose Project &Fermer le projet Add &Scope... &Ajouter une portée... Step &Out Sortir de la f&onction &Close Current Editor Fermer l'éditeur &courant &Next Tab O&nglet suivant &Previous Tab Onglet &précédent &Switch to Header/Sources &Basculer entre Entête/Sources Set &Focus to Editor &Placer le curseur dans l'éditeur Toggle &breakpoint &Basculer point d'arrêt Goto &Methods List Afficher la liste des &méthodes Configure &Shortcuts... Configurer les raccourcis &clavier... &Goto Line... &Aller à la ligne... Toggle Co&mments Basculer les co&mmentaires E&xternal Tools... Outils e&xternes... &Next Bookmark &Signet suivant &Previous Bookmark &Signet précédent Find Pr&evious Rechercher précéd&ent Goto matching &bracket Aller à &l'autre symbole Add New &Class... Ajouter une nouvelle &classe... Open F&ile in project... Ouvrir un f&ichier du projet... Goto &Implementation Aller à l'&implémentation Goto &Declaration Aller à la &déclaration &Rebuild Qt classes database &Reconstruire la base de données des classes Qt Show Maximized 1 Call Stacks Pile d'appels Registers Registres &Editor mode Mod&e édition Ctrl+E Execute &qmake Lancer &qmake Next Warning/Error Avertissement/Erreur suivant F4 Previous Warning/Error Avertissement/Erreur précédent Shift+F4 Clear all Warnings/Errors Effacer tous les Avertissements/Erreurs &Toolbars Barre d'ou&tils Dock windows Fenêtres dockées Local Variables Variables locales Other Variables Autres variables Find in files Rechercher dans les fichiers Full view Vue complête Minimal view Vue minimale DocksWindow Dock Windows Fenêtres dockées New submenu > Nouveau sous-menu > a a En&force qmake mode &Appliquer le mode qmake &Debug mode Mode &Debug &Release mode Mode &Release &Forget last used mode &Ne pas utiliser de mode qmake MainImpl Cancel Annuler Choose a file to open Choisissez le fichier à ouvrir Choose the file to create Choisissez le fichier à créer Files (*.cpp *.h *.txt *.* *) Fichiers (*.cpp *.h *.txt *.* *) Stop Arrêter Start Démarrer The project has been modified, do you want to save your changes ? Le projet a été modifié, voulez-vous le générer ? Yes Oui No Non run Build. veuillez relancer la génération. Ok Stop debugging ? Arrêter le débogage ? Abort Interrompre Continue Reprendre &%1 %2 &%1 %2 Do you want to quit QDevelop ? Voulez-vous quitter QDevelop ? Shift+F5 F5 Files Fichiers Sources Projects Projets Texts Textes All Files Tous les fichiers Stopping is not possible under Windows. Put breakpoints. Stopper n'est pas possible sous Windows. Mettez des points d'arrêts. New Variable: Nouvelle Variable: Choose a project to open Choisissez un projet à ouvrir Build finished without error Génération terminée sans erreur Build finished with Génération terminée avec error(s) erreur(s) and et warning(s) avertissement(s) The file "%1" already exists in directory. Le fichier "%1" existe déjà dans le répertoire. Unable to create %1 Impossible de créer %1 The project %1 doesn't exist. Le projet %1 n'existe pas. Properties of %1... Propriétés de %1... The program doesn't exist, Le programme n'existe pas, The variable "%1" already exists. La variable "%1" existe déjà. The Qt database building is already in progress. La construction de la base de données Qt est en cours. The Qt classes database build is ended. La construction de la base de données des classes Qt est terminée. The Qt include directory doesn't exist, You can change in Options dialog. Le répertoire include de Qt n'existe pas. Vous pouvez le modifier dans le dialogue Options. Version %1 Version %1 Cannot launch Linguist NewImplementation New Implementation Nouvelle Implémentation &Ok &Ok C&ancel &Annuler File Name : Nom du fichier : Class Name : Nom de classe : Location : Emplacement : ... ... NewProject New project creation Création d'un nouveau projet Parent project : Projet parent : Project name : Nom du projet : Location : Emplacement : ... ... Project creation on : Le projet va être créé dans : OK Cancel Annuler Template Modèle Application with Dialog Application avec Dialogue Application with Main Window Application avec Fenêtre principale Properties Propriétés Version Debug Version Version Debug Release Version Version Release Sub-directories Sous-répertoires Dialogs: Dialogues: Executable: Exécutable: ui bin sources: sources: Objects: Objets: src build Inheritance subclassing Sous-classage Object name: Nom d'objet: File name: Nom de fichier: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Projet maître ou vide NewProjectImpl Choose the project directory Choisissez le répertoire du projet The directory "%1" cannot be created Le répertoire "%1" ne peut pas être créé Cancel Annuler The project cannot be created Le projet ne peut être créé Project file "%1" already exists Le fichier projet "%1" existe déjà The directory "%1" already exists. Do you want to create project anyway? Le répertoire "%1" existe déjà. Désirez-vous créer le projet quand même? NewVariable Dialog OK Cancel Annuler Qt Variables User Variable Variable : Variable : New Variable : Nouvelle variable : Operator : Opérateur : = += -= *= ~= OpenFile Open File in Project Ouvrir un fichier du projet OK Cancel Annuler Options Options General Général Editor Editeur Line numbers Numérotation des lignes Selection border Marge de sélection Autoindent Indentation automatique Syntax highlighting Coloration syntaxique Function/method names : Noms fonctions et méthodes : Preprocessor : Commandes préprocesseur : Qt words : Mots Qt : Keywords : Mots clés : Single comments : Commentaires simples : Multiline comments : Commentaires multi-lignes : Quotation strings : Chaînes entre guillemets : ... ... Default Valeurs par défaut Replace Tab by spaces Remplacer les tabulations par des espaces Unix Dos/Windows Complete Code Compléter le code Prompt before quit Confirmer avant de quitter Font: Police: End of line Fin de ligne options Auto-Brackets Accolades automatiques Tab size Taille des tabulations Current line background Couleur ligne courante Text background Couleur de fond Show classes explorer Afficher l'explorateur de classes Interval between updates: Intervale de mise à jour: seconds secondes Default projects directory: Répertoire par défaut des projets: Matching ( and { Appairer ( et { User plugins directory: Répertoire des greffons de l'utilisateur: Qt include directory: Répertoire include de Qt: Qt documentation directory: Répertoire de la documentation Qt: Make extra parameters: Paramètres supplémentaires de Make: Display editor toolbars Afficher la barre d'outils dans les éditeurs Display white spaces Afficher les espaces Files encoding: Encodage des fichiers: Text color Couleur du texte Save all before build Enregistrer tout avant la construction Automatic compilation Compilation automatique Reload last project when the application starts Ouvrir le dernier projet quand l'application démarre Close button in each tab (does not work with all styles) Bouton de fermeture sur chaque onglet (ne fonctionne pas avec tous les styles) Right margin line Ligne de marge droite Column: Colonne: Auto-Comments Commentaires automatiques <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Retour à la ligne Hide Find/Replace panels after Cacher la panneau Chercher/Remplacer après sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Aller à l'implémentation, Meta+click = Aller à la déclaration OptionsImpl Choose the project directory Choisissez le répertoire du projet Param Program parameters Paramètres du programme Run with these arguments: Démarrer avec ces arguments: Working directory (leave empty to use project directory): Répertoire de travail (laisser vide pour utiliser le répertoire du projet): ... ... Environment variables (NAME=value): Variables d'environnements (NOM=valeur): Name Nom Value Valeur &Add &Ajouter &Delete &Supprimer &Sort &Trier &Default &Défaut &OK &OK &Cancel &Annuler &Edit &Edition ParametersImpl Choose the project location Choisissez le répertoire du projet Cancel Annuler The variable "%1" already exists. La variable "%1" existe déjà. ProjectManager Save project changes ? Enregistrer les modifications du projet ? Yes Oui No Non Cancel Annuler Forms: Type de dialogue: Unable to create file. Impossible de créer le fichier. Ok Sub-project creation Création d'un sous-projet Sub-Projects Sous-projets Sub-projects Sous-projets Headers Entêtes Sources Dialogs Dialogues Translations Traductions Resources Project parsing Analyse du projet New name: Nouveau nom: The kind of the new and the old filename is different ! Le genre du nouveau et de l'ancien fichier sont différents ! Rename Renommer The file already exists in directory. Le fichier exite déjà dans le répertoire. The file already exists. Le fichier existe déjà. This file is not permitted. Le fichier n'est pas autorisé. Unable to rename the file to "%1" Impossible de renommer le fichier pour "%1" The only available version for "%1" is %2 La seule version disponible pour "%1" est %2 Run on %1 Lancer sur %1 Cannot remove the main project. Impossible de supprimer le projet principal. Do you want to remove "%1" from the project ? Voulez-vous supprimer "%1" du projet ? File not found: "%1" Fichier "%1" non trouvé ProjectPropertie Dialog Configuration General : Configuration générale : Version build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Bibliothèques Qt core network sql xml gui opengl svg qt3support Advanced Options app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variable : Variable : ... ... Values : Valeurs : Project Template Type de projet subdirs lib app Project or Scope : Projet ou portée : OK Cancel Annuler Default directories Répertoires par défaut Dialogs: Dialogues: Sources: Sources: qtestlib Advanced options Options avancées Free CONFIG variables : Variables CONFIG libres : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nouvelle valeur: delete spaces or put quotes. il faut supprimer les espaces ou mettre des guillemets. Modify Corriger Cancel Annuler Choose the sources location Choisissez l'emplacement des sources Choose the dialogs location Choisissez l'emplacement des dialogues Properties of %1 Propriétés de %1 The spaces aren't correctly parsed by qmake Les espaces ne sont pas bien interprétés par qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Une nouvelle variable ne peut pas être "QT", "CONFIG" ou "TEMPLATE" QObject Unable to start Assistant ! Impossible de lancer assistant ! Loading: Chargement: Interface translation Traduction de l'interface Environment control Contrôle de l'environnement Files on editor Fichiers dans l'éditeur Main Window creation Création de la fenêtre principale Unable to establish a database connection. Impossible d'établir la connexion à la base de données. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop a besoin du support de SQLite. Lisez la documentation traitant du pilote Qt SQL afin d'obtenir des informations sur la manière de le construire. Current project parsing Analyse du projet courant Plugins Greffons Unable to start Designer ! Impossible de lancer Designer ! Registers Form Forme Name Nom Value Valeur Apply Appliquer ReplaceWidget Form Forme find: chercher: Replacement: Remplacer: &Replace &Remplacer Previous Précédent Next Suivant Case Sensitive Tenir compte de la casse Whole words Mots entiers Prompt Demander Reached end of page, continued from top Bas de la page atteint, poursuite au début Shortcuts Configure Shortcuts Configurer les raccourcis clavier Action Shortcut Raccourci Default Valeurs par défaut OK Cancel Annuler Subclassing Qt Designer Form Subclassing Sous-classage de Dialogue Qt Designer &Create &Créer C&ancel &Annuler &New... &Nouveau... Class Na&me: No&m de classe: &File Name: Nom de &fichier: &Location: Emp&lacement: Filter &by: Filtrer &par: SubclassingImpl Choose the file location Choisissez le répertoire du fichier &Update &Mettre à jour C&reate C&réer (.h and .cpp) (.h et .cpp) TabWidget Close Tab Fermer l'onglet Close Other Tabs Fermer les autres onglets Close All Tabs Fermer tous les onglets TextEdit Cancel Annuler Yes Oui No Non Cut Couper Copy Copier Paste Coller Selection Indent Indenter la sélection Selection Unindent Désindenter la sélection Select All Sélectionner tout Find... Rechercher... Toggle Bookmark Basculer le signet Toggle Breakpoint Basculer le point d'arrêt The file "%1" could not be loaded. Le fichier "%1" ne peut pas être chargé. Save "%1" Sauver "%1" Unable to save %1 Impossible de sauver %1 Goto Implementation Aller à l'implémentation Goto Declaration Aller à la déclaration The Qt database building is in progress. Try to complete code later. La construction de la base de données des classes Qt est en cours. Lancez la complétion ultérieurement. Reached end of page, continued from top Bas de la page atteint, poursuite au début ToolsControl External Tools Outils externes qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Tester Please enter the path to the external programs: Entrez le chemin vers les programmes externes: Check environment on start Vérifier l'environnement au lancement assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags a été détecté à l'emplacement %1, mais cette version est trop ancienne. Ok Please select the program Sélectionnez le programme svp TreeClasses Open Declaration Ouvrir la déclaration Open Implementation Ouvrir l'implémentation Refresh contents Rafraichir le contenu Add Method... Ajouter une méthode... Add Variable... Ajouter une variable... Add get/set Methods... Ajouter une méthode get/set... TreeProject Add sub-project... Ajouter un sous-projet... Add New Item... Ajouter un nouvel élément... Add Scope... Ajouter une portée... Add Existing Files... Ajouter des fichiers existants... Open in Linguist Ouvrir dans Linguist Refresh translation files Actualiser les fichiers de traductions Build release translation files Générer les fichiers de traductions définitifs Open in Designer Ouvrir dans Designer Dialog Subclassing... Sous-classage du Dialogue... Dialog Preview Aperçu du dialogue Open Ouvrir Show As Afficher comme Normal Krawek Add New Class... Ajouter une nouvelle classe... Rename... Renommer... Properties of %1... Propriétés de %1... Remove from project Supprimer du projet Warning Dialog TextLabel OK Don't show anymore Ne plus afficher qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Russian.ts.svn-base0000444000175000017500000051040211362261066027252 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt; font-style:italic;">Версия</span></p></body></html> OK OK <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Редакция с открытым исходным кодом (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Ведущий разработчик: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Автодополнение кода: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Разработчик: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Разработчик: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Разработчик: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Разработчик: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Разработчик: Дмитрий "Divius" Танцур &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Создание пакетов: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Добавить существующие файлы Project or Scope : Проект или папка: File : Файл: Copy files here: Скопировать файлы сюда: ... ... OK OK Cancel Отмена AddExistantImpl Enter a filename. Введите имя файла. Cancel Отмена Enter a location destination. Введите место назначения. Choose a directory Укажите папку Choose the file to add Укажите файл для добавления The file %1 doesn't exist. Файл %1 не существует. Unable to copy %1 Не могу скопировать %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Файлы (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Добавить новый файл Files Файлы Translation Переводы Resources Ресурсы Dialog Диалог Header Заголовок Sources Исходники Project or Scope: Проект или Папка: File Name : Имя файла: Location : Путь: ... ... OK ОК Cancel Отмена newfile.cpp newfile.cpp AddNewClass OK OK Cancel Отмена Inheritance Наследование Inherits another class Наследование другого класса Ancestor: Родительский класс: Ancestor's include filename: Имя файла родительского класса: Scope: Тип наследования: Filenames Имена файлов Header filename: Имя файла заголовка: Implementation filename: Имя файла реализации: Location : Путь: ... ... Project or Scope: Проект или Папка: Class name: Имя класса: Constructor arguments: Параметры конструктора: Virtual destructor Виртуальный деструктор Add New Class Добавить новый класс AddNewClassImpl Choose the file location Укажите расположение файла Cancel Отмена Unable to create file. Не могу создать файл. The file "%1" already exists. Файл "%1" уже существует. AddNewClassMethod Add New Method Добавить Новый Метод Method Name: Имя Метода: Return type: Возвращаемый тип: Parameters: Параметры: Scope: Тип наследования: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel Отмена AddNewClassMethodImpl Add New Method in class %1 Добавить Новый Метод в класс %1 An implementation file is required. Нужен файл реализации(cpp). Cancel Отмена %1 already exists in class %2. %1 уже существует в классе %2. AddNewClassVariable Add New Variable Добавить Новую Переменную Create get/set methods Создать get/set методы inline inline set method метод set get method метод get OK OK Cancel Отмена Variable Name: Имя Переменной: Type: Тип: Scope: Тип наследования: AddNewClassVariableImpl Cancel Отмена %1 already exists in class %2. %1 уже существует в классе %2. AddNewImpl Choose the file location Укажите расположение файла The suffix of the file is not correct. Некорректное расширение файла. Cancel Отмена header заголовка Yes Да No Нет Also create the file %1 in same location ? Создать также файл "%1" в том же месте? source исходник AddScope Add New Scope Добавить новую папку New Scope Новая папка win32 win32 debug debug unix unix release release mac mac other другие Project or Scope : Проект или папка: OK ОК Cancel Отмена AddSetGet Add get/set methods Добавить get/set методы OK OK Cancel Отмена Create get/set methods for Создать get/set методы для inline inline set method метод set get method метод get AddSetGetImpl Cancel Отмена BreakpointCondition Dialog Диалог Condition : Состояние : is true (breakpoint) если Истина (точка останова) has changed (watchpoint) изменился (точка наблюдения) Build Update project Обновить проект Clean Project Очистить проект Build Сборка Build stopped Сборка остановлена Compilation of %1... Компиляция "%1"... Debug Running... Запуск... Exited normally Нормальное завершение Debug... Отладка... Debug exited Отладка завершена Error: Unable to evaluate value Ошибка: невозможно вычислить значение Exited with error code %1 Завершение с кодом ошибки %1 Editor Refresh classes and methods lists Обновить списки классов и методов What do you want to do? Что вы хотите сделать? Overwrite Перезаписать Reload File Перезагрузить файл The file "%1" was modified outside editor. Файл "%1" был изменен вне редактора. Open %1 Открыть %1 %1 replacement(s) made. %1 замен(а/ы) сделано. The file "%1" disappeared from fisk. Файл "%1" больше не присутствует на диске. Recreate Создать заново Close Закрыть ExeChoice QDevelop QDevelop OK OK Cancel Отмена Choose program to Debug : Укажите программу для отладки: Don't ask question anymore Больше не задавать вопросов FindFile Find in Files Поиск в файлах Pattern: Шаблон: Case Sensitive Учитывать регистр Whole words Слово целиком Recursive Рекурсивно *.cpp; *.h *.cpp;*.h *.ui; *.qrc; *.txt *.ui;*.qrc;*.txt Files: Файлы: ... ... Find in: Искать в: &Find &Искать &Close &Закрыть Replace found text Заменять найденный текст Replace with: Заменять на: FindFileImpl Choose a directory Укажите папку &Find &Искать &Stop &Стоп Line Строка File Файл Cannot open temporary file %1 Не удалось открыть временный файл %1 FindWidget Form Форма Previous Предыдущее Next Следующее Case Sensitive Учитывать регистр Whole words Слово целиком Reached end of page, continued from top Поиск с начала страницы GotoLine Goto Line Перейти к строке <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Перейти к строке:</span></p></body></html> OK ОК Cancel Отмена InitCompletion Unable to launch %1 Не могу запустить %1 Unable to open %1 Не могу открыть %1 LineNumbers Toogle Bookmark Вкл/Выкл закладку Toogle Breakpoint Вкл/Выкл брейкпойнт Breakpoint Condition... Условие останова... LogBuild error ошибка warning предупреждение error Compiler message ошибка undefined reference to Linker message warning Compiler message предупреждение Main &? &? &File &Файл &Project &Проект &Build &Сборка &Debug Отла&дка &View &Вид &Edit &Править Outputs Вывод Build Сборка Project Explorer Состав проекта Files toolbar Панель Файлы Edit Toolbar Панель Правка &New Project... &Новый Проект... &New File... &Новый Файл... New File Новый файл &File... &Файл... &Close All Files &Закрыть все файлы &Save File &Сохранить файл Ctrl+S Ctrl+S &Quit &Выход Undo Откатить Ctrl+Z Ctrl+Z Redo Повторить Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Выделить все Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Добавить новый Add Existing Files Добавить существующий New Folder Новая папка Project Properties Свойства проекта F7 F7 Clean Очистить Rebuild Пересобрать Compile File Компиляция файла Shift+F7 Shift+F7 Start Program Старт программы Shift+F5 Shift+F5 Step Into Шаг вовнутрь F11 F11 Step Over Шаг F10 F10 &Open... &Открыть... Ctrl+O Ctrl+O F3 F3 Stop Стоп F6 F6 Breakpoints... Брейкпойнты... Indent selection Установить выделение Tab Табуляция Unindent selection Снять выделение Shift+Tab Shift+Tab F1 F1 Files Файлы Save Project As... Сохранить проект как... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Комментарить Uncomment Разкомментарить Complete Code Автодополнение кода Ctrl+Space Ctrl+Space QDevelop QDevelop Name Имя Type Тип Address Адрес Value Значение ... ... Classes Классы Calls Stack Стек вызовов Toggle &Bookmark Установить &Закладку Toggle Bookmark Вкл/Выкл закладку Ctrl+B Ctrl+B Clear &All Bookmarks Убрать &все закладки &Open Project... &Открыть Проект... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Goto matching bracket Перейти к парной скобке Ctrl+[ Ctrl+[ Plugins Плагины Ctrl+N Ctrl+N Foo Foo &Print... П&ечать... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &Закладки Ed&itors &Редактор &Tools &Инструменты &Plugins settings &Настройка плагинов &Last Projects &Недавние проекты B&uild &Сборка Las&t Files Н&едавние файлы Build and Debug Toolbar Панель Сборки и Отладки Save File &as... Сохранить файл &как... Save A&ll Сохранить &все &Undo &Откатить &Redo &Повторить Cu&t &Вырезать &Copy &Копировать &Paste Вст&авить &Find... &Найти... &Replace... &Заменить... &Find in Files... П&оиск в файлах... Add New &Item... &Добавить новый... Add Existing &Files... Д&обавить существующий... Project &Properties... Свойства &проекта... &Clean &Очистить &Rebuild &Пересобрать S&tart Program &Старт программы Step &Into &Шаг вовнутрь Step O&ver Шаг &через &Calls Stack С&тек вызовов &Options... &Опции... &Parameters... &Параметры... &About... &О программе... About &Qt... О &Qt... Find &Next &Найти далее &Stop &Стоп &Stop Build Ост&ановить сборку &Help Current Qt Word Справка по текущему ключевому слову &Qt &Reset Executables List Сбросить список &исполняемых &Save Project &Сохранить проект C&lose Project &Закрыть проект Add &Scope... Добавить &папку... Step &Out Шаг &наверх &Close Current Editor &Закрыть текущий редактор &Next Tab &Следующая вкладка &Previous Tab &Предыдущая вкладка &Switch to Header/Sources &Переключить Заголовок/Исходник Set &Focus to Editor &Переместить фокус в редактор Toggle &breakpoint &Вкл/Выкл брейкпойнт Goto &Methods List Перейти в Список &Методов Configure &Shortcuts... Конфигурация &быстрых клавиш... &Goto Line... Перейти к &строке... Toggle Co&mments Вкл/Выкл &комментарии E&xternal Tools... &Инструменты... &Next Bookmark &Следующая закладка &Previous Bookmark &Предыдущая закладка Find Pr&evious На&йти предыдущий Goto matching &bracket Перейти к парной &скобке Add New &Class... Добавить новый &класс... Open F&ile in project... Открыть &Файл в проекте... Goto &Implementation Перейти к &Реализации Goto &Declaration Перейти к &Объявлению &Rebuild Qt classes database &Собрать файлы перевода 1 1 Call Stacks Стеки вызовов Registers Регистры Execute &qmake Запустить &qmake Show Maximized Показать увеличенным &Editor mode &Режим редактирования Ctrl+E Ctrl+E Next Warning/Error Следующее замечание/ошибка F4 F4 Previous Warning/Error Предыдущее замечание/ошибка Shift+F4 Shift+F4 Clear all Warnings/Errors Очистить все замечания/ошибки &Toolbars &Панели Dock windows Док-окна Local Variables Локальные переменные Other Variables Прочие переменные Find in files Поиск в файлах Full view Полный Вид Minimal view Минимальный Вид DocksWindow Dock Windows Док-окна New submenu > Новое подменю > a ? En&force qmake mode &Форсировать режим qmake &Debug mode Режим &отладки &Release mode Режим &релиза &Forget last used mode &Забыть форсированный режим MainImpl Choose the file to create Выберите файл для создания Files Файлы Cancel Отмена Yes Да No Нет Choose a file to open Выберите файл для открытия Sources Исходники Projects Проекты Texts Тексты All Files Все файлы Files (*.cpp *.h *.txt *.* *) Файлы (*.cpp *.h *.txt *.* *) Stop Стоп Start Старт The project has been modified, do you want to save your changes ? Проект был изменен, сохранить изменения? Stop debugging ? Остановить отладку? run Build. запустите Сборку. Ok OK Shift+F5 Shift+F5 F5 F5 Abort Прервать Stopping is not possible under Windows. Put breakpoints. Останов невозможен из-под Windows. Установите брейкпойнты. Continue Продолжить &%1 %2 &%1 %2 Do you want to quit QDevelop ? Вы действительно хотите выйти из QDevelop? New Variable: Новая переменная: Choose a project to open Выберите проект для открытия Build finished without error Сборка завершена без ошибок Build finished with Сборка завершена с error(s) ошибками and и warning(s) предупреждениями The file "%1" already exists in directory. Файл "%1" уже существует в директории. Unable to create %1 Не могу создать %1 The project %1 doesn't exist. Проект %1 не существует. Properties of %1... Свойства %1... The program doesn't exist, Программа не существует, The variable "%1" already exists. Переменная "%1" уже существует. The Qt database building is already in progress. Поcтроение базы Qt уже в процессе. The Qt classes database build is ended. Поcтроение базы классов Qt закончено. The Qt include directory doesn't exist, You can change in Options dialog. Директория заголовочных файлов Qt не существует, Вы можете изменить её в окне "опции". Version %1 Версия %1 Cannot launch Linguist Не удалось запустить Linguist NewImplementation New Implementation Новая реализация Class Name : Имя класса: Location : Путь: File Name : Имя файла: ... ... &Ok &OK C&ancel &Отмена NewProject New project creation Создание нового проекта Template Шаблон Application with Dialog Приложение с Dialog Application with Main Window Приложение с Main Window Properties Свойства Parent project : Родительский проект: Project name : Имя проекта: Location : Путь: ... ... Project creation on : Создать проект в: Version Версия Debug Version Отладочная версия Release Version Релиз версия OK ОК Cancel Отмена Sub-directories Поддиректории Dialogs: Формы: Executable: Исполнимые: ui ui bin bin sources: Исходники: Objects: Объекты: src src build build Inheritance subclassing Наследование форм Object name: Имя объекта: File name: Имя файла: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Форма:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Класс:</span></p></body></html> Empty or master project Пустой или основной проект NewProjectImpl Choose the project directory Укажите папку проекта The directory "%1" cannot be created Директория "%1" не может быть создана Cancel Отмена The project cannot be created Проект не может быть создан Project file "%1" already exists Файл проекта "%1" уже существует The directory "%1" already exists. Do you want to create project anyway? Директория "%1" уже существует. Всё равно создать проект? NewVariable Dialog Диалог OK ОК Cancel Отмена Qt Variables Переменные Qt User Variable Пользовательские переменные Variable : Переменные: New Variable : Новая переменная: Operator : Оператор : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project Открыть Файл в Проекте OK OK Cancel Отмена Options Options Настройки General Главное Prompt before quit Подтверждение перед выходом Editor Редактор Font: Шрифт: End of line Конец строки Tab size Длина отступа Current line background Фон текущей строки Text background Фон текста Default По-умолчанию Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Заменять отступы пробелами ... ... options опции Line numbers Номера строк Syntax highlighting Подсветка синтаксиса Auto-Brackets Автоскобки Selection border Граница выделения Complete Code Автодополнение кода Autoindent Автовыделение Function/method names : Имена функций/методов: Preprocessor : Препроцессор: Qt words : Ключевые слова Qt: Keywords : Ключевые слова: Single comments : Однострочный коммент: Multiline comments : Многострочный коммент: Quotation strings : Строки в кавычках: Show classes explorer Показать классы Interval between updates: Интервал между обновлением: seconds секунд Default projects directory: Папка проектов по умолчанию: Matching ( and { Поиск ( и { User plugins directory: Папка с плагинами пользователя: Make extra parameters: Доп. параметры make: Qt include directory: Директория заголовочных файлов Qt: Files encoding: Кодировка файлов: Save all before build Сохранять всё перед сборкой Automatic compilation Автоматическая компиляция Qt documentation directory: Директория документации Qt: Reload last project when the application starts Открывать последний проект при старте Close button in each tab (does not work with all styles) Кнопка закрытия на каждой вкладе (работает не со всеми стилями) Display editor toolbars Показывать панели инструментов в редакторе Display white spaces Показывать пробелы Text color Цвет текста Right margin line Линия отступа справа Column: Колонка: Auto-Comments Автозакрытие комментариев <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Перенос по словам Hide Find/Replace panels after Скрывать панели поиска/замены через sec. сек. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+нажатие мышью = перейти к реализации, Meta+нажатие мышью = перейти к объявлению OptionsImpl Choose the project directory Укажите папку проекта Param Program parameters Параметры программы Run with these arguments: Запускать с аргументами: Working directory (leave empty to use project directory): Рабочая директория: ... ... Environment variables (NAME=value): Переменные окружения (ИМЯ=значение): Name Имя Value Значение &Edit &Править &Add &Добавить &Delete &Удалить &Sort &Сортировать &Default По &умолчанию &OK &OK &Cancel &Отмена ParametersImpl Choose the project location Выберите расположение проекта Cancel Отмена The variable "%1" already exists. Переменная "%1" уже существует. ProjectManager Save project changes ? Сохранить изменения в проекте? Yes Да No Нет Cancel Отмена Forms: Формы: Unable to create file. Не могу создать файл. Ok ОК Sub-project creation Создание подпроекта Sub-Projects Подпроект Sub-projects Подпроекты Headers Заголовки Sources Исходники Dialogs Диалоги Translations Переводы Resources Ресурсы Project parsing Разбор проекта New name: Новое имя: The kind of the new and the old filename is different ! Типы нового и старого имени файла разные! Rename Переименовать The file already exists in directory. Файл уже существует в директории. The file already exists. Файл уже существует. This file is not permitted. Этот файл не разрешен. Unable to rename the file to "%1" Не могу переименовать файл в "%1" The only available version for "%1" is %2 Единственная версия, доступная для "%1" - %2 Run on %1 Запустить %1 Cannot remove the main project. Нельзя удалить главный проект. Do you want to remove "%1" from the project ? Вы действительно хотите удалить "%1" из проекта? File not found: "%1" Файл не найден: %1 ProjectPropertie Dialog Диалог Configuration Конфигурация General : Главное: Version Версия build_all debug release debug_and_release Warnings Предупреждения warn_off warn_on Qt Libraries Библиотеки Qt core network sql xml gui opengl svg qt3support Advanced Options Дополнительные опции app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Переменные Variable : Переменная : ... ... Values : Значения: Project Template Шаблон проекта subdirs subdirs lib app Project or Scope : Проект или папка: OK ОК Cancel Отмена Default directories Папки по умолчанию Dialogs: Формы: Sources: Исходники: qtestlib Advanced options Расширенные опции Free CONFIG variables : Пользовательские переменные: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Новое значение: delete spaces or put quotes. уберите пробелы или замените кавычками. Modify Изменить Cancel Отмена Choose the sources location Выберите расположение исходников Choose the dialogs location Выберите расположение диалогов Properties of %1 Свойства %1 The spaces aren't correctly parsed by qmake Пробелы некорректно разобраны qmake'ом A new variable can not be "QT", "CONFIG" or "TEMPLATE" Новая переменная не может быть "QT", "CONFIG" или "TEMPLATE" QObject Loading: Загрузка: Interface translation Перевод интерфейса Environment control Управление окружением Files on editor Файлы в редакторе Main Window creation Создание главного окна Unable to start Assistant ! Не могу запустить Assistant! Unable to establish a database connection. Невозможно подключиться к базе данных. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop необходима поддержка SQLite. Пожалуйста, прочитайте документацию Qt SQL driver для сборки. Current project parsing Разбор текущего проекта Plugins Плагины Unable to start Designer ! Не могу запустить Designer! Registers Form Форма Name Имя Value Значение Apply Применить ReplaceWidget Form Форма find: Найти: Replacement: Заменить на: &Replace &Заменить Previous Предыдущее Next Следующее Case Sensitive Учитывать регистр Whole words Слово целиком Prompt Спрашивать подтверждение Reached end of page, continued from top Поиск с начала страницы Shortcuts Configure Shortcuts Настройка горячих клавиш Action Действие Shortcut Горячая клавиша Default По-умолчанию OK ОК Cancel Отмена Subclassing Qt Designer Form Subclassing Наследование то форм Qt дизайнера &New... &Новый... &Create &Создать C&ancel &Отмена Class Na&me: &Название класса: &File Name: Имя &файла: &Location: &Расположение: Filter &by: &Фильтр: SubclassingImpl Choose the file location Укажите расположение файла &Update &Обновить C&reate &Создать (.h and .cpp) (.h и .cpp) TabWidget Close Tab Закрыть вкладку Close Other Tabs Закрыть прочие вкладки Close All Tabs Закрыть все вкладки TextEdit Cancel Отмена Yes Да No Нет Cut Вырезать Copy Копировать Paste Вставить Selection Indent Начать выделение Selection Unindent Снять выделение Select All Выделить все Find... Найти... Toggle Bookmark Вкл/Выкл закладку Toggle Breakpoint Вкл/Выкл брейкпойнт The file "%1" could not be loaded. Файл "%1" не может быть загружен. Save "%1" Сохранить "%1" Unable to save %1 Не могу сохранить %1 Goto Implementation Перейти к Реализации Goto Declaration Перейти к Объявлению The Qt database building is in progress. Try to complete code later. Построение базы Qt уже в процессе. Попробуйте автозавершение кода позже. Reached end of page, continued from top Поиск с начала страницы ToolsControl External Tools Инструменты &Test &Тест ... ... lrelease: lrelease: make: make: qmake: qmake: designer: designer: ctags: ctags: lupdate: lupdate: gdb: gdb: linguist: linguist: Please enter the path to the external programs: Пожалуйста, введите путь к программам: Check environment on start Проверять окружение при старте assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags найден в "%1", но эта версия слишком старая. Ok Ok Please select the program Выберите программу TreeClasses Open Declaration Перейти к объявлению Open Implementation Открыть Реализацию Refresh contents Обновить содержимое Add Method... Добавить Метод... Add Variable... Добавить Переменную... Add get/set Methods... Добавить get/set Методы... TreeProject Add sub-project... Добавить под-проект... Add New Item... Добавить новый файл... Add Scope... Добавить папку... Add Existing Files... Добавить существующие файлы... Open in Linguist Открыть в Лингвисте Refresh translation files Обновить файлы перевода Build release translation files Собрать файлы перевода Open in Designer Открыть в Designer Dialog Subclassing... Объекты диалога... Dialog Preview Предварительный вид Диалога Open Открыть Show As Показать как Normal Нормальный Krawek Krawek Add New Class... Добавить новый класс... Rename... Переименовать... Properties of %1... Свойства %1... Remove from project Удалить из проекта Warning Dialog Диалог TextLabel TextLabel OK ОК Don't show anymore Больше не показывать qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Portuguese.ts.svn-base0000444000175000017500000047723711362261066030012 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versión</span></p></body></html> OK Ok <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Adicionar arquivos existentes OK Ok Cancel Cancelar Project or Scope : Projeto ou escopo: File : Arquivo: ... ... Copy files here: Copiar arquivos aqui: AddExistantImpl Enter a filename. Cancel Cancelar Enter a location destination. The file %1 doesn't exist. Unable to copy %1 Choose a directory Choose the file to add Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Adicionar um novo item Files Arquivos Translation Tradução Resources Recursos Dialog Diálogo Header Cabeçalho Sources Fontes Project or Scope: Projeto ou escopo: File Name : Nome do arquivo: Location : Localização: ... ... OK Ok Cancel Cancelar newfile.cpp novo.cpp AddNewClass Add New Class Adicionar nova classe OK Ok Cancel Cancelar Inheritance Herança Inherits another class Herança de outra classe Ancestor: Pai: Ancestor's include filename: Arquivo .h do pai: Scope: Escopo: Filenames Arquivos Header filename: Arquivo de cabeçalho: Implementation filename: Arquivo de implementação: Location : Localização: ... ... Project or Scope: Projeto ou escopo: Class name: Nome da classe: Constructor arguments: Argumentos do construtor: Virtual destructor Destructor virtual AddNewClassImpl Choose the file location The file "%1" already exists. Cancel Cancelar Unable to create file. AddNewClassMethod Add New Method Adicionar novo métodos Method Name: Nome do métodos: Return type: Tipo do retorno: Parameters: Parâmetros: Scope: Escopo: Inline Inline Virtual Virtual Static Static Pure Pure OK OK Cancel Cancelar AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Cancelar %1 already exists in class %2. AddNewClassVariable Add New Variable Adicionar nova variável Create get/set methods Criar get/set métodos inline inline set method set métodos get method get métodos OK OK Cancel Cancelar Variable Name: Variável nome: Type: Tipo: Scope: Escopo: AddNewClassVariableImpl Cancel Cancelar %1 already exists in class %2. AddNewImpl Choose the file location The suffix of the file is not correct. Cancel Cancelar header source Also create the file %1 in same location ? Yes No AddScope Add New Scope Adicionar novo escopo New Scope Novo escopo win32 win32 debug depuración unix unix release lanzamiento mac mac other otro Project or Scope : Projeto ou escopo: OK Ok Cancel Cancelar AddSetGet Add get/set methods Adicionar get/set métodos OK OK Cancel Cancelar Create get/set methods for Criar get/set métodos para inline inline set method set métodos get method get métodos AddSetGetImpl Cancel Cancelar BreakpointCondition Dialog Diálogo Condition : Condition : is true (breakpoint) é verdade (ponto de parada) has changed (watchpoint) mudou (watchpoint) Build Update project Clean Project Compilation of %1... Build Compilar Build stopped Debug Running... Exited normally Exited with error code %1 Debug... Debug exited Error: Unable to evaluate value Editor Refresh classes and methods lists Open %1 The file "%1" disappeared from fisk. What do you want to do? Recreate Close The file "%1" was modified outside editor. Overwrite Reload File %1 replacement(s) made. ExeChoice QDevelop QDevelop OK Ok Cancel Cancelar Choose program to Debug : Escolha o programa a depurar: Don't ask question anymore Não perguntar mais FindFile Find in Files Procurar nos arquivos Pattern: Padrão de busca: Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Recursive Recursivo *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Arquivos: ... ... Find in: Procurar em: &Find &Procurar &Close &Fechar Replace found text Substituir texto encontrado Replace with: Substituir por: FindFileImpl Choose a directory &Find &Procurar &Stop &Parar Cannot open temporary file %1 Line File FindWidget Form Formulário Previous Anterior Next Seguinte Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Reached end of page, continued from top Final da página alcançado, continuar do início GotoLine Goto Line Ir para a linha <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ir a Línea:</span></p></body></html> OK Ok Cancel Cancelar InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Toogle Breakpoint Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main QDevelop &? &? &Project &Projeto &View &Ver &Debug &Depuração &Build &Compilação &File &Arquivo &Edit &Editar Outputs Saídas Build Compilar Name Nome Type Tipo Address Endereço Value Valor ... ... Project Explorer Explorador de projetos Files Arquivos Classes Classes Files toolbar Barra de ferramentas de arquivos Edit Toolbar Barra de ferramentas de edição &New Project... &Novo projeto... &New File... &Novo arquivo... New File Novo arquivo &File... &Arquivo... &Close All Files &Fechar todos os arquivos &Save File &Salvar arquivo Ctrl+S Ctrl+S &Quit &Sair Undo Desfazer Ctrl+Z Ctrl+Z Redo Refazer Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Selecionar tudo Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Adicionar novo item Add Existing Files Adicionar arquivos existentes New Folder Nova pasta Project Properties Propriedades do projeto F7 F7 Clean Limpar Rebuild Re-compilar Compile File Compilar arquivo Shift+F7 Shift+F7 Start Program Iniciar programa Shift+F5 Shift+F5 Step Into Passo a passo detalhados F11 F11 Step Over Passo a passo principal F10 F10 Calls Stack Pilha de chamadas &Open... &Abrir... Ctrl+O Ctrl+O F3 F3 Stop Parar F6 F6 Breakpoints... Pontos de parada... Indent selection Indentar seleção Tab Tab Unindent selection Desindentar seleção Shift+Tab Shift+Tab F1 F1 Save Project As... Salvar projeto como... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Comentar Uncomment Descomentar Complete Code Completar código Ctrl+Space Ctrl+Space Toggle &Bookmark Alternar &favorito Toggle Bookmark Alternar favorito Ctrl+B Ctrl+B Clear &All Bookmarks Limpar &todos os favoritos &Open Project... &Abrir projeto... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Plugins Plugins Ctrl+N Ctrl+N Goto matching bracket Ir para a chave equivalente Ctrl+[ Ctrl+[ Foo Foo &Print... Im&primir... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &Favorito &Last Projects Úl&tima projetos B&uild &Compilação Las&t Files Úl&tima arquivos &Tools &Ferramentas &Plugins settings &Plugins configurações Ed&itors Ed&itore 1 Build and Debug Toolbar compilar e depurar barra de ferramentas Call Stacks Pilha de chamadas Registers Registers Save File &as... Salvar arquivo &como... Save A&ll Salvar &tudo &Undo &Desfazer &Redo &Refazer Cu&t Cor&tar &Copy &Copiar &Paste &Colar &Find... &Procurar... &Replace... &Substituir... &Find in Files... &Procurar nos arquivos... Add New &Item... Adicionar novo &item... Add Existing &Files... Adicionar &arquivos existentes... Project &Properties... &Propriedades do projeto... &Clean &Limpar &Rebuild &Re-compilar S&tart Program &Iniciar programa Step &Into Passo &dentro Step O&ver Passo s&obre &Calls Stack Pilha de &chamadas &Options... &Opções... &Parameters... &Parâmetros... &About... &Sobre... About &Qt... Sobre &Qt... Find &Next Procurar &próxima ocorrência &Stop &Parar &Stop Build &Parar compilação &Help Current Qt Word &Ajuda atual Qt palavra &Reset Executables List &Redefinir executáveis lista &Save Project &Salvar projeto C&lose Project &Fechar projeto Add &Scope... Adicionar &escopo... Step &Out Passo &fora &Close Current Editor &Fechar editor atual &Next Tab &Próxima Tab &Previous Tab &Anterior Tab &Switch to Header/Sources &Alternar Cabeçalhos/Fontes Set &Focus to Editor &Colocar o foco ao Editor Toggle &breakpoint Alternar &ponto de parada Goto &Methods List Ir à &métodos lista Configure &Shortcuts... Configurar &atalhos... &Goto Line... &Ir para a linha... Toggle Co&mments Alternar co&mentários E&xternal Tools... Fe&rramentas externas... &Next Bookmark &Próxima favorito &Previous Bookmark &Anterior favorito Find Pr&evious Encontrar A&nterior Goto matching &bracket Ir para a &chave equivalente Add New &Class... Adicionar nova &classe... Open F&ile in project... Abrir &arquivo no projeto... Goto &Implementation Ir à &implementação Goto &Declaration Ir à &declaração &Rebuild Qt classes database &Reconstruir Qt classes de dados Execute &qmake execute &qmake Show Maximized Mostrar maximizada &Editor mode &Editore modo Ctrl+E Next Warning/Error Próximo Aviso/Erro F4 F4 Previous Warning/Error Anterior Aviso/Erro Shift+F4 Shift+F4 Clear all Warnings/Errors Limpar todos os Aviso/Erro &Toolbars &Barra de ferramentas Dock windows Dock janelas Local Variables Local variâveis Other Variables Outras variáveis Find in files Procurar nos arquivos Full view Visualização completa Minimal view Minimal vista DocksWindow Dock Windows New submenu > Novo submenu > a um En&force qmake mode En &vigor qmake modo &Debug mode &Depuración modo &Release mode &Lançamento modo &Forget last used mode &Esqueça último modo utilizado MainImpl Choose the file to create Files Arquivos The file "%1" already exists in directory. Cancel Cancelar Unable to create %1 The Qt include directory doesn't exist, You can change in Options dialog. Ok Do you want to quit QDevelop ? Yes No Choose a file to open Sources Fontes Projects Texts All Files Choose a project to open The project %1 doesn't exist. Properties of %1... Files (*.cpp *.h *.txt *.* *) Cannot launch Linguist Stop Parar Build finished without error Build finished with error(s) and warning(s) Start The project has been modified, do you want to save your changes ? Stop debugging ? The program doesn't exist, run Build. Shift+F5 Shift+F5 F5 F5 Abort Stopping is not possible under Windows. Put breakpoints. Continue &%1 %2 Version %1 New Variable: The variable "%1" already exists. The Qt database building is already in progress. The Qt classes database build is ended. NewImplementation New Implementation Nova implementação Class Name : Nome da classe: File Name : Nome do arquivo: Location : Localização: ... ... &Ok &Ok C&ancel &Cancelar NewProject New project creation Novo projeto Template Modelo Application with Dialog Aplicação com diálogo Application with Main Window Aplicação com janela principal (MainWindow) Properties Propriedades Parent project : Projeto pai: Project name : Nome do projeto: Location : Localização: ... ... Project creation on : Criar projeto em: Version Versão Debug Version Versão da depuração Release Version Versão de lançamento OK Ok Cancel Cancelar Sub-directories Sub-diretórios Dialogs: Diálogos: Executable: Executável: ui ui bin bin sources: fontes: Objects: Objetos: src src build compilar Inheritance subclassing Herança de sub-classe Object name: Nome do objeto: File name: Nome do arquivo: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Diálogo:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclase:</span></p></body></html> Empty or master project Vazia ou o principais projeto NewProjectImpl Choose the project directory Project file "%1" already exists Cancel Cancelar The directory "%1" already exists. Do you want to create project anyway? The directory "%1" cannot be created The project cannot be created NewVariable Dialog Diálogo OK Ok Cancel Cancelar Qt Variables Variáveis Qt User Variable Variável do usuário Variable : Variável: New Variable : Nova variável: Operator : Operadora : = += -= *= ~= OpenFile Open File in Project Abrir arquivo no projeto OK OK Cancel Cancelar Options Options Opções General Geral Prompt before quit Perguntar antes de sair Show classes explorer Mostrar classes no explorador Interval between updates: Intervalo entre as atualizações: seconds segundos Editor Editore Font: Fonte: End of line Final de linha Tab size Tamanho do TAB Current line background Fundo da linha atual Text background Fundo do texto Default Padrão Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Substituir TAB por espaços ... ... options opções Line numbers Números de linha Syntax highlighting Realce de sintaxe Auto-Brackets Fechar parênteses automaticamente Selection border Borda da seleção Complete Code Completar código Autoindent Indentar automaticamente Function/method names : Nomes de funções/métodos: Preprocessor : Pre-processador: Qt words : Palavras do Qt: Keywords : Palavras chave: Single comments : Comentários simples: Multiline comments : Comentários multi-linhas: Quotation strings : Quebra de textos: Default projects directory: Diretório padrão de projetos: Matching ( and { ( e { correspondentes User plugins directory: Diretório de plugins do usuário: Save all before build Guardar todos antes de compilar Automatic compilation Automatic compilação Qt include directory: Qt include diretório: Qt documentation directory: Qt documentação diretório: Make extra parameters: Make extras parâmetros: Reload last project when the application starts Recarregar último projeto quando a aplicação começa Close button in each tab (does not work with all styles) Botão Fechar em cada aba (isto não funciona com todos os estilos) Display editor toolbars Display editor barra de ferramentas Display white spaces Display branco espaços Files encoding: Arquivos codificação: Text color Cor do texto Right margin line Linha de margem direito Column: Coluna: Auto-Comments Auto-Comentários <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Transferir a próxima linha Hide Find/Replace panels after Ocultar Localizar / Substituir painéis depois sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Ir para implementação, Meta+click = Ir para declaração OptionsImpl Choose the project directory Param Program parameters Parâmetros do programa Run with these arguments: Executar com estes parâmetros: Working directory (leave empty to use project directory): Diretório de trabalho (deixe vazio para usar o de projetos): ... ... Environment variables (NAME=value): Variáveis de ambiente (NOME=valor): Name Nome Value Valor &Edit &Editar &Add &Adicionar &Delete &Remover &Sort &Ordenar &Default Pa&drão &OK &Ok &Cancel &Cancelar ParametersImpl Choose the project location The variable "%1" already exists. Cancel Cancelar ProjectManager Project parsing Save project changes ? Yes No Cancel Cancelar The file already exists in directory. Forms: Unable to create file. The file already exists. This file is not permitted. Ok Sub-project creation Sub-Projects File not found: "%1" New name: The kind of the new and the old filename is different ! Rename Unable to rename the file to "%1" Cannot remove the main project. Do you want to remove "%1" from the project ? Sub-projects Headers Sources Fontes Dialogs Translations Resources Recursos The only available version for "%1" is %2 Run on %1 ProjectPropertie Dialog Diálogo Configuration Configuração General : Geral: Version Versão build_all debug release debug_and_release Warnings Advertências warn_off warn_on Qt Libraries Bibliotecas Qt core core network sql sql xml xml gui gui opengl opengl svg svg qt3support Advanced Options Opções avançadas app_bundle assistant console designer dll dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qt resources rtti staticlib stl stl thread uic3 uitools windows x11 x11 x86 x86 Variables Variable : Variável: ... ... Values : Valores: Project Template Modelo de projeto subdirs subdirs lib lib app app Project or Scope : Projeto ou escopo: OK Ok Cancel Cancelar Default directories Diretórios padrões Dialogs: Diálogos: Sources: Código fonte: qtestlib qtestlib Advanced options Opções avançadas Free CONFIG variables : Livre CONFIG variáveis : script webkit phonon xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl Properties of %1 A new variable can not be "QT", "CONFIG" or "TEMPLATE" Cancel Cancelar New Value: The spaces aren't correctly parsed by qmake delete spaces or put quotes. Modify Choose the sources location Choose the dialogs location QObject Unable to establish a database connection. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. Unable to start Assistant ! Unable to start Designer ! Loading: Interface translation Environment control Files on editor Plugins Plugins Main Window creation Current project parsing Registers Form Formulário Name Nome Value Valor Apply Aplicar ReplaceWidget Form Formulário find: procurar: Replacement: Substituição: &Replace &Substituir Previous Anterior Next Seguinte Case Sensitive Distinguir maiúsculas de minúsculas Whole words Palavras completas Prompt Perguntar Reached end of page, continued from top Final da página alcançado, continuar do início Shortcuts Configure Shortcuts Configurar atalhos Action Ação Shortcut Atalho Default Padrão OK Ok Cancel Cancelar Subclassing Qt Designer Form Subclassing Sub-classe de formulário do Qt Designer &New... &Novo... &Create &Criar C&ancel C&ancelar Class Na&me: &Nome da classe: &File Name: Nome do &arquivo: &Location: &Localização: Filter &by: &Filtrar por: SubclassingImpl &Update C&reate (.h and .cpp) Choose the file location TabWidget Close Tab Close Other Tabs Close All Tabs TextEdit The Qt database building is in progress. Try to complete code later. The file "%1" could not be loaded. Cancel Cancelar Save "%1" Yes No Unable to save %1 Reached end of page, continued from top Final da página alcançado, continuar do início Goto Implementation Goto Declaration Cut Copy Paste Selection Indent Selection Unindent Select All Selecionar tudo Find... Toggle Bookmark Alternar favorito Toggle Breakpoint ToolsControl External Tools Ferramentas externas qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Testar Please enter the path to the external programs: Entre com o caminho para os programas externos: Check environment on start Verificar ambiente ao iniciar assistant: assistente: ToolsControlImpl Please select the program Ctags was detected in path %1, but this version is too old. Ok TreeClasses Open Declaration Open Implementation Add Method... Add Variable... Add get/set Methods... Refresh contents TreeProject Add sub-project... Add New Item... Add Scope... Add New Class... Add Existing Files... Open in Linguist Refresh translation files Build release translation files Open in Designer Dialog Subclassing... Dialog Preview Open Rename... Remove from project Properties of %1... Show As Normal Krawek Warning Dialog Diálogo TextLabel TextLabel OK Ok Don't show anymore Não mostrar mais qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Italian.ts.svn-base0000444000175000017500000046770711362261066027232 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Versione</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Sviluppatore principale: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Autocompletamento del codice: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Sviluppatore: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Sviluppatore: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Sviluppatore: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sviluppatore: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sviluppatore: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Impacchettatore: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Traduzione italiana: Alessandro Bruni &lt;<a href="mailto:alessandro.bruni@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">alessandro.bruni@gmail.com</span></a>&gt;</p><br/> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Aggiungi files esistenti OK OK Cancel Annulla Project or Scope : Progetto o Contesto : File : File : ... ... Copy files here: Copia qui i files: AddExistantImpl Choose the file to add Scegli i files da aggiungere Enter a filename. Inserisci il nome del file. Cancel Cancella Enter a location destination. Inserisci percorso di destinazione. Choose a directory Scegli una cartella The file %1 doesn't exist. Il file %1 non esiste. Unable to copy %1 Impossibile copiare %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) File (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Aggiungi nuovo elemento Files Files Translation Traduzioni Resources Risorse Dialog Finestre Header Intestazioni Sources Sorgenti Project or Scope: Progetto o Contesto: File Name : Nome file : Location : Destinazione : ... ... OK OK Cancel Cancella newfile.cpp nuovofile.cpp AddNewClass OK OK Cancel Cancella Inheritance Ereditarietà Inherits another class Eredita un'altra classe Ancestor: Antenato: Ancestor's include filename: Nome file include antenato: Scope: Contesto: Filenames Nomi file Header filename: Nome file intestazione: Implementation filename: Nome file implementazione: Location : Destinazione : ... ... Project or Scope: Progetto o Contesto: Class name: Nome classe: Constructor arguments: Argomenti costruttore: Virtual destructor Distruttore virtuale Add New Class Aggiungi nuova Classe AddNewClassImpl Choose the file location Scegli la destinazione del file Cancel Annulla Unable to create file. Impossibile creare il file. The file "%1" already exists. Il file "%1" esiste già. AddNewClassMethod Add New Method Aggiungi Nuovo Metodo Method Name: Nome Metodo: Return type: Tipo di Ritorno: Parameters: Parametri: Scope: Contesto: Inline Virtual Static Pure OK Cancel Cancella AddNewClassMethodImpl Add New Method in class %1 Aggiungi nuovo metodo nella classe %2 An implementation file is required. E' richiesto un file di implementazione. Cancel Cancella %1 already exists in class %2. %1 esiste già nella classe %2. AddNewClassVariable Add New Variable Aggiungi Nuova Variabile Create get/set methods Generare metodi get/set inline set method set metodo get method get metodo OK Cancel Cancella Variable Name: Nome Variabile: Type: Tipo: Scope: Contesto: AddNewClassVariableImpl Cancel Cancella %1 already exists in class %2. %1 esiste già nella classe %2. AddNewImpl Choose the file location Scegli una destinazione per il file The suffix of the file is not correct. Il suffisso del file non è corretto. Cancel Cancella header intestazione Yes Si No No Also create the file %1 in same location ? Generare inoltre il file %1 nella stessa posizione ? source sorgente AddScope Add New Scope Aggiungi nuovo Contesto New Scope Nuovo Contesto win32 debug unix release mac other altro Project or Scope : Progetto o Contesto : OK Cancel Annulla AddSetGet Add get/set methods Aggiungi metodi get/set OK Cancel Cancella Create get/set methods for Generare metodi get/set per inline set method metodo set get method metodo get AddSetGetImpl Cancel Cancella BreakpointCondition Dialog Dialogo Condition : Condizioni : is true (breakpoint) È vero (punto d'arresto) has changed (watchpoint) È cambiato (watchpoint) Build Update project Aggiorna progetto Clean Project Pulisci Progetto Build Generazione Build stopped Generazione interrotta Compilation of %1... Compilazione di %1... Debug Running... Esecuzione... Exited normally Finito normalmente Debug... Debug... Debug exited Debug finito Error: Unable to evaluate value Errore: Impossibile valutare il valore Exited with error code %1 Uscito con codice d'errore %1 Editor Refresh classes and methods lists Aggiorna la lista delle classi e dei metodi What do you want to do? Che cosa vuoi fare? Overwrite Sovrascrivi Reload File Aggiorna file The file "%1" was modified outside editor. Il file "%1" è stato modificato fuori dall'editor. Open %1 Apri %1 %1 replacement(s) made. %1 sostituzione(i) eseguita(e). The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Cancel Annulla Choose program to Debug : Scegli il programma per il Debug : Don't ask question anymore Non fare altre domande FindFile Find in Files Cerca in più Files Pattern: Pattern: Case Sensitive Distingui Maiuscole Whole words Parole intere Recursive Ricorsivo *.cpp; *.h *.ui; *.qrc; *.txt Files: File: ... ... Find in: Cerca in: &Find &Cerca &Close &Chiudi Replace found text Rimpiazza il testo trovato Replace with: Rimpiazza con: FindFileImpl Choose a directory Scegli una cartella Line Linea File File &Find &Cerca &Stop &Ferma Cannot open temporary file %1 Impossibile aprire il file temporaneo "%1" FindWidget Form Finestra Previous Precedente Next Successivo Case Sensitive Distingui maiuscole Whole words Parole intere Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio GotoLine Goto Line Vai alla Linea <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Vai alla linea</span></p></body></html> OK Cancel Annulla InitCompletion Unable to launch %1 Impossibile lanciare %1 Unable to open %1 Impossibile aprire %1 LineNumbers Toogle Bookmark Inserisci/Togli Segnalibro Toogle Breakpoint Inserisci/Togli Punto d'arresto Breakpoint Condition... Condizioni dei punti d'arresto... LogBuild error errore warning avvertimento error Compiler message errore undefined reference to Linker message riferimento non definito verso warning Compiler message avvertimento Main QDevelop &? &? Build Generazione &Edit &Modifica &File &File Outputs Output Files Files Files toolbar Barra dei files Edit Toolbar Barra delle modifiche &New Project... &Nuovo Progetto... &File... &File... &Close All Files &Chiudi tutti i File &Save File &Salva File Ctrl+S &Quit &Esci Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Seleziona tutto Ctrl+F Add New Item Aggiungi nuovo elemento Add Existing Files Aggiungi Files esistenti New Folder Nuova Cartella Project Properties Proprietà del Progetto F7 Clean Cancella Rebuild Rigenera Shift+F7 Start Program Avvia il Programma Shift+F5 Step Into Passo dentro F11 Step Over Passo oltre F10 &Open... &Apri... F3 Stop Ferma F6 Breakpoints... Punti d'arresto... Indent selection Indenta selezione Tab Unindent selection Togli indentazione selezione Shift+Tab F1 Project Explorer Esplora Progetto Save Project As... Salva il Progetto con nome... Compile File Compila File Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Esci Undo Annulla Redo Rifai F9 &View &Visualizza &Project &Progetto &Build &Genera &Debug &Debug Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Completa il Codice Ctrl+Space Ctrl+D &New File... &Nuovo File... New File Nuovo File Comment Commenta Uncomment Decommenta Classes Classi Calls Stack Chiamata Stack Name Nome Type Tipo Address Indirizzo Value Valore ... ... Toggle &Bookmark Inserisci/Togli &Segnalibro Toggle Bookmark Inserisci/Togli Segnalibro Ctrl+B Clear &All Bookmarks &Cancella tutti i Segnalibri &Open Project... &Apri Progetto... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Estensioni Ctrl+N Goto matching bracket Vai alla parentesi corrispondenti Ctrl+[ Foo Foo &Print... &Stampa... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Segnalibro &Last Projects U&ltimi Progetti B&uild &Genera Las&t Files Ul&timi files &Tools Str&umenti &Plugins settings Estensioni im&postazioni Ed&itors Ed&itor 1 Build and Debug Toolbar Barra Genera e Debug Call Stacks Chiamata Stacks Registers Registri Save File &as... S&alva file con nome... Save A&ll S&alva Tutto &Undo &Annulla &Redo &Rifai Cu&t &Taglia &Copy &Copia &Paste &Incolla &Find... &Cerca... &Replace... &Sostituisci... &Find in Files... &Cerca nei File... Add New &Item... Aggiungi &nuovo elemento... Add Existing &Files... Aggiungi &file esistenti... Project &Properties... Proprietà del &Progetto... &Clean &Cancella &Rebuild &Rigenera S&tart Program &Avvia il Programma Step &Into Passo &dentro Step O&ver Passo &oltre &Calls Stack &Chiamata Stack &Options... &Opzioni... &Parameters... &Parametri... &About... &About... About &Qt... About &Qt... Find &Next Ricerca &Successiva &Stop &Ferma &Stop Build &Ferma Generazione &Help Current Qt Word &Aiuto sulle attuali parole di Qt &Reset Executables List &Reimpostare la lista degli eseguibili &Save Project &Salva il progetto C&lose Project &Chiudi il progetto Add &Scope... Aggiungi &Contesto... Step &Out Passo fu&ori &Close Current Editor &Chiudi editor attuale &Next Tab Tab &successivo &Previous Tab Tab &precedente &Switch to Header/Sources &Passa a Intestazioni/Sorgenti Set &Focus to Editor Imposta &Focus all'editor Toggle &breakpoint Inserisci/Togli &Punto d'arresto Goto &Methods List Vai alla lista dei &metodi Configure &Shortcuts... Configura &scorciatoie... &Goto Line... &Vai alla Linea... Toggle Co&mments Co&mmento singolo E&xternal Tools... Strumenti e&sterni... &Next Bookmark Prossimo &Segnalibro &Previous Bookmark &Precedente Segnalibro Find Pr&evious Ricerca Pr&ecedente Goto matching &bracket Vai alla &parentesi corrispondenti Add New &Class... Aggiungi nuova &Classe... Open F&ile in project... Apri f&ile nel Progetto... Goto &Implementation Vai alla &Implementazione Goto &Declaration Vai alla &Dichiarazione &Rebuild Qt classes database &Rigenera classi Qt di database Execute &qmake Eseguibile &qmake Show Maximized Visualizza Massimizzato &Editor mode Modalità di &Editing Ctrl+E Next Warning/Error Successivo Avvertimenti/Errori F4 Previous Warning/Error Precedente Avvertimenti/Errori Shift+F4 Clear all Warnings/Errors Cancella tutti i Avvertimenti/Errori &Toolbars &Toolbar Dock windows Finestre dock Local Variables Variabili locali Other Variables Altre variabili Find in files Trova nei file Full view Vista completa Minimal view Vista minimale DocksWindow Finestra di dock Dock Windows Finestre di dock New submenu > Nuovo sottomenu > a a En&force qmake mode &Forza il target qmake &Debug mode Modalità &debug &Release mode Modalità &release &Forget last used mode Dimentica l'ultima modalità usata MainImpl Cancel Annulla Choose a file to open Scegli un file da aprire Choose the file to create Scegli il file da creare Files (*.cpp *.h *.txt *.* *) File (*.cpp *.h *.txt *.* *) Stop Ferma Start Avvio The project has been modified, do you want to save your changes ? Il progetto è stato modificato, vuoi salvare i cambiamenti? Yes Si No No run Build. avvio Generazione. Ok Ok Stop debugging ? Ferma il debugging ? Abort Interrompi Continue Continua &%1 %2 &%1 %2 Do you want to quit QDevelop ? Vuoi uscire da QDevelop ? Shift+F5 F5 Files File Sources Sorgenti Projects Progetti Texts Testi All Files Tutti i File Stopping is not possible under Windows. Put breakpoints. La terminazione non è possibile sotto Windows. Inserisci punti d'arresto. New Variable: Nuova Variabile: Choose a project to open Scegli un progetto da aprire Build finished without error Generazione terminata senza errori Build finished with Generazione terminata con error(s) errori and e warning(s) avvertimenti The file "%1" already exists in directory. Il file "%1" esiste già nell'elenco. Unable to create %1 Impossibile creare %1 The project %1 doesn't exist. Il progetto %1 non esiste. Properties of %1... Proprietà di %1... The program doesn't exist, Il programma non esiste, The variable "%1" already exists. La variabile "%1" esiste già. The Qt include directory doesn't exist, You can change in Options dialog. La cartella Qt "Include" non esiste, 
verifica in Strumenti->Opzioni. The Qt database building is already in progress. La creazione del database Qt è già in corso. The Qt classes database build is ended. La creazione del database delle classi Qt è concluso. Version %1 Versione %1 Cannot launch Linguist NewImplementation New Implementation Nuova Implementazione &Ok &Ok C&ancel &Annulla File Name : Nome File : Class Name : Nome Classe : Location : Destinazione : ... ... NewProject New project creation Creazione nuovo progetto Parent project : Progetto padre : Project name : Nome Progetto : Location : Destinazione : ... ... Project creation on : Progetto creato in : OK Cancel Annulla Template Modello Application with Dialog Applicazione con Finestra Application with Main Window Applicazione con Finestra Principale Properties Proprietà Version Versione Debug Version Versione Debug Release Version Versione Release Sub-directories Sotto cartella Dialogs: Finestre: Executable: Eseguibile: ui bin sources: sorgenti: Objects: Oggetti: src build Inheritance subclassing Sottoclasse Object name: Nome oggetto: File name: Nome file: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Progetto vuoto o master NewProjectImpl Choose the project directory Scegli una cartella per il progetto The directory "%1" cannot be created La cartella "%1" non può essere creata Cancel Annulla The project cannot be created Il progetto non può essere creato Project file "%1" already exists Il file di progetto "%1" esiste già The directory "%1" already exists. Do you want to create project anyway? La cartella "%1" esiste già. Vuoi creare comunque il progetto? NewVariable Dialog Finestra OK Cancel Annulla Qt Variables Variabili Qt User Variable Variabili Utente Variable : Variabile : New Variable : Nuova Variabile : Operator : Operator : = += -= *= ~= OpenFile Open File in Project Apri file nel progetto OK Cancel Annulla Options Options Opzioni General Generale Editor Editor Line numbers Numero linee Selection border Seleziona bordo Autoindent Autoindentazione Syntax highlighting Colorazione sintassi Function/method names : Nomi di funzioni/metodi : Preprocessor : Preprocessore : Qt words : Parole Qt : Keywords : Parole chiave : Single comments : Commento singolo : Multiline comments : Commento multilinea : Quotation strings : Stringhe tra virgolette: ... ... Default Default Replace Tab by spaces Sostituisci Tab con spazi Unix Dos/Windows Complete Code Completamento Codice Prompt before quit Conferma prima di uscire Font: Font: End of line Fine linea options opzioni Auto-Brackets Parentesi automatiche Tab size Dimensione Tab Current line background Sfondo linea corrente Text background Colore testo Show classes explorer Visualizza esplorazione classi Interval between updates: Intervallo tra aggiornamenti: seconds secondi Default projects directory: Cartella del Progetto di default: Matching ( and { Corrispondenza di ( e { User plugins directory: Cartella estensioni utente: Save all before build Salvare prima di generare Automatic compilation Compilazione automatica Qt include directory: Cartella Qt include: Qt documentation directory: Cartella documentazione Qt: Make extra parameters: Passa parametri aggiuntivi: Reload last project when the application starts Ricarica l'ultimo progetto quando l'applicazione viene eseguita Close button in each tab (does not work with all styles) Pulsante Chiudi in ciascun tab (non funziona con tutti gli stili) Display editor toolbars Mostra editor (barre strumenti) Display white spaces Visualizza spazi bianchi Files encoding: File di codifica: Text color Colore del testo Right margin line Linea di margine destro Column: Colonna: Auto-Comments Commenti automatici <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap A capo automatico Hide Find/Replace panels after Chiudi i pannelli di ricerca/sostituzione alla fine sec. sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+click = Vai all'implementazione, Meta+click = Vai alla dichiarazione OptionsImpl Choose the project directory Scegli la cartella per il progetto Param Program parameters Parametri del programma Run with these arguments: Avvia con questi argomenti: Working directory (leave empty to use project directory): Cartella di lavoro (lascia vuoto per utilizzare la cartella di progetto): ... ... Environment variables (NAME=value): Variabili di ambiente (NOME=valore): Name Nome Value Valore &Add &Aggiungi &Delete &Cancella &Sort &Ordina &Default &Default &OK &OK &Cancel &Annulla &Edit &Modifica ParametersImpl Choose the project location Scegli la destinazione per il progetto Cancel Annulla The variable "%1" already exists. La variabile "%1" esiste già. ProjectManager Save project changes ? Vuoi salvare i cambiamenti al progetto ? Yes Si No No Cancel Annulla Forms: Finestre: Unable to create file. Impossibile creare il file. Ok Sub-project creation Creazione sotto-progetto Sub-Projects Sotto-progetti Sub-projects Sotto-progetti Headers Intestazioni Sources Sorgenti Dialogs Finestre Translations Traduzioni Resources Risorse Project parsing Analisi del progetto New name: Nuovo nome: The kind of the new and the old filename is different ! Il nuovo e il vecchio nome file hanno tipo differente ! Rename Rinomina The file already exists in directory. Il file esiste già nell'elenco. The file already exists. Il file esiste già. This file is not permitted. Questo file non è consentito. Unable to rename the file to "%1" Impossibile rinominare il file con "%1" The only available version for "%1" is %2 L'unica versione disponibile per "%1" è %2 Run on %1 Esegui su %1 Cannot remove the main project. Non è possibile rimuovere il progetto principale. Do you want to remove "%1" from the project ? Vuoi rimuovere "%1" dal progetto ? File not found: "%1" File non trovato: "%1" ProjectPropertie Dialog Finestra Configuration Configurazione General : Generale : Version Versione build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Librerie Qt core network sql xml gui opengl svg qt3support Advanced Options Opzioni avanzate app_bundle assistant console designer dll exceptions eccezioni lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources risorse rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Variabili Variable : Variabile : ... ... Values : Valori : Project Template Tipo di Progetto subdirs Sottodirectory lib app Project or Scope : Progetto o Contesto : OK Cancel Annulla Default directories Cartella predefinita Dialogs: Finestre: Sources: Sorgenti: qtestlib Advanced options Opzioni avanzate Free CONFIG variables : Variabili CONFIG libere : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nuovo Valore: delete spaces or put quotes. cancella spazi o aggiungi virgolette. Modify Modifica Cancel Annulla Choose the sources location Scegli una destinazione per i sorgenti Choose the dialogs location Scegli una destinazione per le finestre Properties of %1 Proprietà del %1 The spaces aren't correctly parsed by qmake Gli spazi non sono analizzati correttamente da qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nessuna variabile si può chiamare "QT", "CONFIG" o "TEMPLATE" QObject Unable to start Assistant ! Impossibile avviare Assistant ! Loading: Caricamento: Interface translation Traduzione interfaccia Environment control Variabili d'ambiente Files on editor File sull'editor Main Window creation Creazione finestra principale Unable to establish a database connection. Impossibile stabilire una connessione al database. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop necessita il supporto di SQLite. Per piacere leggi la documentazione "Qt SQL driver" per informazioni. Current project parsing Analisi progetto corrente Plugins Estensioni Unable to start Designer ! Impossibile eseguire Designer ! Registers Form Finestra Name Nome Value Valore Apply Applica ReplaceWidget Form Finestra find: trova: Replacement: sostituisci con: &Replace Sostituisci (&R) Previous Precedente Next Successivo Case Sensitive Whole words Parole intere Prompt Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio Shortcuts Configure Shortcuts Configura scorciatoie Action Azioni Shortcut Scorciatoie Default Default OK Cancel Annulla Subclassing Qt Designer Form Subclassing Sottoclasse della Finestra Qt Designer &Create &Crea C&ancel &Annulla &New... &Nuovo... Class Na&me: &Nome classe: &File Name: Nome &File: &Location: &Destinazione: Filter &by: Fil&tro di: SubclassingImpl Choose the file location Scegli la destinazione del file &Update &Aggiorna C&reate &Crea (.h and .cpp) (.h e .cpp) TabWidget Close Tab Chiudi Tab Close Other Tabs Chiudi gli altri Tab Close All Tabs Chiudi tutti i Tab TextEdit Cancel Annulla Yes Si No No Cut Taglia Copy Copia Paste Incolla Selection Indent Indenta selezione Selection Unindent Togli la selezione dell'indentazione Select All Seleziona tutto Find... Cerca... Toggle Bookmark Inserisci/Togli Segnalibro Toggle Breakpoint Inserisci/Togli Punto d'arresto The file "%1" could not be loaded. Il file "%1" non è potuto essere caricato. Save "%1" Salva "%1" Unable to save %1 Impossibile salvare %1 Goto Implementation Vai all'implementazione Goto Declaration Vai alla Dichiarazione The Qt database building is in progress. Try to complete code later. La generazione del database Qt è in corso. Cerca di completare il codice più tardi. Reached end of page, continued from top Raggiunta la fine della pagina, continua dall'inizio ToolsControl External Tools Strumenti esterni qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Testa Please enter the path to the external programs: inserisci il percorso per i programmi esterni: Check environment on start Verifica le variabili d'ambiente all'avvio assistant: assistente: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Il percorso di Ctags è %1, ma questa versione è troppo vecchia. Ok Please select the program Per favore seleziona il programma TreeClasses Open Declaration Apri Dichiarazione Open Implementation Apri Implementazione Refresh contents Ricarica contenuti Add Method... Aggiungi Metodo... Add Variable... Aggiungi Variabile... Add get/set Methods... Aggiungi metodi get/set... TreeProject Add sub-project... Aggiungi sotto-progetto... Add New Item... Aggiungi nuovo elemento... Add Scope... Aggiungi Contesto... Add Existing Files... Aggiungi file esistenti... Open in Linguist Apri in Linguist Refresh translation files Ricarica file di traduzione Build release translation files Genera i files di traduzione "release" Open in Designer Apri in Designer Dialog Subclassing... Sotto-classe finestra... Dialog Preview Visualizzazione finestra Open Apri Show As Visualizza come Normal Normale Krawek Krawek Add New Class... Aggiungi nuova Classe... Rename... Rinomina... Properties of %1... Proprietà del %1... Remove from project Rimuovere dal progetto Warning Dialog Finestra TextLabel Etichetta con testo OK OK Don't show anymore Non mostrare più qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Ukrainian.ts.svn-base0000444000175000017500000050556011362261066027560 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style=" white-space: pre-wrap; font-family:MS Shell Dlg; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt; font-style:italic;">Версія</span></p></body></html> OK Угу <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Додати існуючі файли Project or Scope : Проект або тека: File : Файл: Copy files here: Скопіювати файли сюди: ... ... OK Угу Cancel Відмінити AddExistantImpl Enter a filename. Введіть ім’я файлу. Cancel Відміна Enter a location destination. Введіть місце призначення. Choose a directory Вкажіть теку Choose the file to add Вкажіть файл, який необхідно додати The file %1 doesn't exist. Unable to copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Додати новий файл Files Файли Translation Переклади Resources Ресурси Dialog Діалог Header Заголовок Sources Вихідні коди Project or Scope: Проект або Тека: File Name : Ім’я файлу: Location : Шлях: ... ... OK Угу Cancel Відмінити newfile.cpp newfile.cpp AddNewClass OK Угу Cancel Відмінити Inheritance Наслідування Inherits another class Наслідування іншого класу Ancestor: Батьківський клас: Ancestor's include filename: Ім’я файлу батьківського класу: Scope: Тип наслідування: Filenames Імена файлів Header filename: Ім’я файлу заголовка: Implementation filename: Ім’я файлу реалізації: Location : Шлях: ... ... Project or Scope: Проект або Тека: Class name: Ім’я класу: Constructor arguments: Параметри конструктора: Virtual destructor Віртуальний деструктор Add New Class Додати новий клас AddNewClassImpl Choose the file location Вкажіть місцезнаходження файлу Cancel Відмінити Unable to create file. Не можу створити файл. The file "%1" already exists. AddNewClassMethod Add New Method Method Name: Return type: Parameters: Scope: Тип наслідування: Inline Virtual Static Pure OK Угу Cancel Відмінити AddNewClassMethodImpl Add New Method in class %1 An implementation file is required. Cancel Відмінити %1 already exists in class %2. AddNewClassVariable Add New Variable Create get/set methods inline set method get method OK Угу Cancel Відмінити Variable Name: Type: Scope: Тип наслідування: AddNewClassVariableImpl Cancel Відмінити %1 already exists in class %2. AddNewImpl Choose the file location Вкажіть місцезнаходження файлу The suffix of the file is not correct. Невірне розширення файлу. Cancel Відмінити header заголовка Yes Так No Ні Also create the file %1 in same location ? source AddScope Add New Scope Додати нову теку New Scope Нова тека win32 win32 debug debug unix unix release release mac mac other інші Project or Scope : Проект або Тека: OK Угу Cancel Відмінити AddSetGet Add get/set methods OK Угу Cancel Відмінити Create get/set methods for inline set method get method AddSetGetImpl Cancel Відмінити BreakpointCondition Dialog Dialog Condition : is true (breakpoint) has changed (watchpoint) Build Update project Оновити проект Clean Project Очистити проект Build Збирання Build stopped Збирання припинене Compilation of %1... Debug Running... Запуск... Exited normally Нормальне завершення Debug... Відладка... Debug exited Відладка завершена Error: Unable to evaluate value Помилка: неможливо розрахувати значення Exited with error code %1 Editor Refresh classes and methods lists Оновити списки класів і методів What do you want to do? Що Ви хочете зробити? Overwrite Перезаписати Reload File Перезагрузити файл The file "%1" was modified outside editor. Open %1 %1 replacement(s) made. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Угу Cancel Відмінити Choose program to Debug : Вкажіть програму для відладки: Don't ask question anymore Більше не задавати питань FindFile Find in Files Пошук у файлі Pattern: Шаблон: Case Sensitive Враховувати регістр Whole words Усе слово Recursive Рекурсивно *.cpp; *.h *.cpp;*.h *.ui; *.qrc; *.txt *.ui;*.qrc;*.txt Files: Файли: ... ... Find in: Шукати в: &Find &Пошук &Close &Закрити Replace found text Replace with: FindFileImpl Choose a directory Вкажіть теку &Find &Шукати &Stop &Стоп Line Стрічка File Файл Cannot open temporary file %1 FindWidget Form Форма Previous Минула Next Наступна Case Sensitive Враховувати регістр Whole words Усе слово Reached end of page, continued from top При досягненні кінця стрінки шукає з початку GotoLine Goto Line Перейти на стрічку <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Перейти на стрічку:</span></p></body></html> OK Угу Cancel Відмінити InitCompletion Unable to launch %1 Unable to open %1 LineNumbers Toogle Bookmark Вкл/Викл закладку Toogle Breakpoint Вкл/Викл точку зупинки Breakpoint Condition... LogBuild error warning error Compiler message undefined reference to Linker message warning Compiler message Main &? &? &File &Файл &Project &Проект &Build &Збірка &Debug &Відладка &View &Вигляд &Edit &Редагувати Outputs Вивід Build Збірка Project Explorer Склад проекту Files toolbar Панель Файли Edit Toolbar Панель Редагування &New Project... &Новий Проект... &New File... &Новий Файл... New File Новий файл &File... &Файл... &Close All Files &Закрити всі файли &Save File &Зберегти файл Ctrl+S Ctrl+S &Quit &Вихід Undo Відмінити Ctrl+Z Ctrl+Z Redo Повторити Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Виділити все Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Додати новий Add Existing Files Додати існуючий New Folder Нова тека Project Properties Властивості проекту F7 F7 Clean Очистити Rebuild Перезібрати Compile File Компіляція файлу Shift+F7 Shift+F7 Start Program Старт програми Shift+F5 Shift+F5 Step Into Крок в середину F11 F11 Step Over Крок F10 F10 &Open... &Відкрити... Ctrl+O Ctrl+O F3 F3 Stop Стоп F6 F6 Breakpoints... Точки зупинки... Indent selection Встановити виділення Tab Табуляція Unindent selection Зняти виділення Shift+Tab Shift+Tab F1 F1 Files Файли Save Project As... Зберегти проект як... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Закоментувати Uncomment Розкоментувати Complete Code Автодоповнення коду Ctrl+Space Ctrl+Space QDevelop QDevelop Name Ім’я Type Тип Address Адреса Value Значення ... ... Classes Класи Calls Stack Стек викликів Toggle &Bookmark Встановити &Закладку Toggle Bookmark Вкл/Викл закладку Ctrl+B Ctrl+B Clear &All Bookmarks Прибрати &всі закладки &Open Project... &Відкрити Проект... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Goto matching bracket Перейти до парной скобки Ctrl+[ Ctrl+[ Plugins Додатки Ctrl+N Ctrl+N Foo Foo &Print... &Друк... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Last Projects B&uild Las&t Files &Tools &Plugins settings Ed&itors 1 Build and Debug Toolbar Call Stacks Registers Save File &as... Save A&ll &Undo &Redo Cu&t &Copy &Paste &Find... &Replace... &Find in Files... Add New &Item... Add Existing &Files... Project &Properties... &Clean &Rebuild S&tart Program Step &Into Step O&ver &Calls Stack &Options... &Parameters... &About... About &Qt... Find &Next &Stop &Стоп &Stop Build &Help Current Qt Word &Reset Executables List &Save Project C&lose Project Add &Scope... Step &Out &Close Current Editor &Next Tab &Previous Tab &Switch to Header/Sources Set &Focus to Editor Toggle &breakpoint Goto &Methods List Configure &Shortcuts... &Goto Line... Toggle Co&mments E&xternal Tools... &Next Bookmark &Previous Bookmark Find Pr&evious Goto matching &bracket Add New &Class... Open F&ile in project... Goto &Implementation Goto &Declaration &Rebuild Qt classes database Execute &qmake Show Maximized &Editor mode Ctrl+E Next Warning/Error F4 F4 Previous Warning/Error Shift+F4 Shift+F4 Clear all Warnings/Errors &Toolbars Dock windows Local Variables Other Variables Find in files Full view Minimal view DocksWindow Dock Windows New submenu > a En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create Виберіть файл для створення Files Файли Cancel Відмінити Yes Так No Ні Choose a file to open Виберіть файл для відкриття Sources Вихідні коди Projects Проекти Texts Тексти All Files Всі файли Files (*.cpp *.h *.txt *.* *) Файли (*.cpp *.h *.txt *.* *) Stop Стоп Start Старт The project has been modified, do you want to save your changes ? Проект був змінений, зберегти зміни? Stop debugging ? Зупинити відладку? run Build. запустіть Збирання. Ok Угу Shift+F5 Shift+F5 F5 F5 Abort Перервати Stopping is not possible under Windows. Put breakpoints. Зупинка неможлива у Windows. Встановіть точки зупинки. Continue Продовжити &%1 %2 &%1 %2 Do you want to quit QDevelop ? Ви дійсно хочете вийти з QDevelop? New Variable: Нова змінна: Choose a project to open Виберіть проект для відкриття Build finished without error Збір завершений без помилок Build finished with Збір завершений з error(s) помилками and і warning(s) попередження The file "%1" already exists in directory. Unable to create %1 The project %1 doesn't exist. Properties of %1... The program doesn't exist, The variable "%1" already exists. The Qt include directory doesn't exist, You can change in Options dialog. The Qt database building is already in progress. The Qt classes database build is ended. Version %1 Cannot launch Linguist NewImplementation New Implementation Нова реалізація Class Name : Ім’я класу: Location : Шлях: File Name : Ім’я файлу: ... ... &Ok &Угу C&ancel &Відміна NewProject New project creation Створення нового проекту Template Шаблон Application with Dialog Програма з формою Application with Main Window Програма з головним вікном Properties Властивості Parent project : Батьківський проект: Project name : Ім’я проекту: Location : Шлях: ... ... Project creation on : Створити проект в: Version Версія Debug Version Налагоджувальна версія Release Version Кінцева версія OK Угу Cancel Відміна Sub-directories підтеки Dialogs: Форми: Executable: Виконуємі: ui ui bin bin sources: Вихідні коди: Objects: Об’єкти: src src build build Inheritance subclassing Наслідування форм Object name: Ім’я об’єкту: File name: Ім’я файлу: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Форма:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Клас:</span></p></body></html> Empty or master project NewProjectImpl Choose the project directory Вкажіть теку проекту The directory "%1" cannot be created Cancel Відмінити The project cannot be created Проект не може бути створений Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Діалог OK Угу Cancel Відміна Qt Variables Змінні Qt User Variable Змінні користувача Variable : Змінні: New Variable : Нова змінна: Operator : = += -= *= ~= OpenFile Open File in Project OK Угу Cancel Відмінити Options Options Налаштування General Головне Prompt before quit Підтвердження перед виходом Editor Редактор Font: Шрифт: End of line Кінец стрічки Tab size Величина відступу Current line background Фон вибраної стрічки Text background Фон тексту Default За умовчанням Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Замінювати відступи пробілами ... ... options опції Line numbers Номера стрічок Syntax highlighting Підсвітка синтаксису Auto-Brackets Автоскобки Selection border Границя виділення Complete Code Автодоповнення коду Autoindent Автовиділення Function/method names : Імена функцій/методів: Preprocessor : Препроцесор: Qt words : Ключові слова Qt: Keywords : Ключові слова: Single comments : Однострічний коментар: Multiline comments : Багатострічний коментар: Quotation strings : Стрічки в лапках: Show classes explorer Показати класи Interval between updates: Інтервал між оновленням: seconds секунд Default projects directory: Тека проектів за умовчанням: Matching ( and { Пошук ( і { User plugins directory: Тека з додатками користувача: Save all before build Automatic compilation Qt include directory: Qt documentation directory: Make extra parameters: Reload last project when the application starts Close button in each tab (does not work with all styles) Display editor toolbars Display white spaces Files encoding: Text color Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Вкажіть теку проекту Param Program parameters Параметри програми Run with these arguments: Запускати з аргументами: Working directory (leave empty to use project directory): Робоча тека: ... ... Environment variables (NAME=value): Змінні оточення (ІМ’Я=значення): Name Ім’я Value Значення &Edit &Редагувати &Add &Додати &Delete &Видалити &Sort &Сортувати &Default За &умовчанням &OK &Угу &Cancel &Відмінити ParametersImpl Choose the project location Выберіть місцезнаходження проекту Cancel Відмінити The variable "%1" already exists. ProjectManager Save project changes ? Зберегти зміни в проекті? Yes Так No Ні Cancel Відмінити Forms: Форми: Unable to create file. Не можу створити файл. Ok Угу Sub-project creation Створення підпроекту Sub-Projects Підпроект Sub-projects Підпроекти Headers Заголовки Sources Вихідні коди Dialogs Діалоги Translations Переклади Resources Ресурси Project parsing Розбір проекту New name: Нове ім’я: The kind of the new and the old filename is different ! Типи нового і старого імені файлу різні! Rename Переіменувати The file already exists in directory. The file already exists. This file is not permitted. Unable to rename the file to "%1" The only available version for "%1" is %2 Run on %1 Cannot remove the main project. Do you want to remove "%1" from the project ? File not found: "%1" ProjectPropertie Dialog Діалог Configuration Конфігурація General : Головне: Version Версія build_all зібрати все debug відлагоджувальна release кінцева debug_and_release відлагоджувальна і кінцева Warnings Попередження warn_off вимкнути попередження warn_on увімкнути попередження Qt Libraries Бібліотеки Qt core ядро network мережа sql sql xml xml gui графічний інтерфейс opengl opengl svg svg qt3support підтримка qt3 Advanced Options Додаткові опції app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables Змінні Variable : Змінна: ... ... Values : Значення: Project Template Шаблон проекту subdirs підтеки lib lib app app Project or Scope : Проект або Тека: OK Угу Cancel Відмінити Default directories Теки за умовчанням Dialogs: Форми: Sources: Вихідні коди: qtestlib Advanced options Free CONFIG variables : script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Нове значення: delete spaces or put quotes. приберіть пробіли або замініть лапками. Modify Змінити Cancel Відмінити Choose the sources location Выберіть мізцезнаходження вихідних кодів Choose the dialogs location Выберіть місцезнаходження діалогів Properties of %1 The spaces aren't correctly parsed by qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" QObject Loading: Завантаження: Interface translation Переклад інтерфейсу Environment control Керування оточенням Files on editor Файли в редакторі Main Window creation Створення головного вікна Unable to start Assistant ! Не можу запустити Assistant! Unable to establish a database connection. Неможливо підключитися до бази даних. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop вимагає підтримки SQLite. Будьласка, прочитайте документацію Qt SQL driver для збору. Current project parsing Розбір даного проекту Plugins Додатки Unable to start Designer ! Registers Form Форма Name Ім’я Value Значення Apply ReplaceWidget Form Форма find: Replacement: &Replace &Замінити Previous Минула Next Наступна Case Sensitive Враховувати регістр Whole words Усе слово Prompt Reached end of page, continued from top При досягненні кінця стрінки шукає з початку Shortcuts Configure Shortcuts Налаштування гарячих клавіш Action Дія Shortcut Гаряча клавіша Default За умовчанням OK Угу Cancel Відмінити Subclassing Qt Designer Form Subclassing Наслідування від форм Qt дизайнера &New... &Новий... &Create &Створити C&ancel &Відмінити Class Na&me: &Назва класу: &File Name: Ім’я &файлу: &Location: &Знаходження: Filter &by: &Фільтр: SubclassingImpl Choose the file location Вкажіть місцезнаходження файлу &Update &Оновити C&reate &Створити (.h and .cpp) (.h і .cpp) TabWidget Close Tab Закрити вкладку Close Other Tabs Закрити інші вкладки Close All Tabs Закрити всі вкладки TextEdit Cancel Відмінити Yes Так No Ні Cut Вирізати Copy Копіювати Paste Вставити Selection Indent Початок виділення Selection Unindent Зняти виділення Select All Виділити все Find... Знайти... Toggle Bookmark Вкл/Викл закладку Toggle Breakpoint Вкл/Викл точку зупину The file "%1" could not be loaded. Save "%1" Unable to save %1 Goto Implementation Goto Declaration The Qt database building is in progress. Try to complete code later. Reached end of page, continued from top При досягненні кінця стрінки шукає з початку ToolsControl External Tools Зовнішні інструменти &Test &Тест ... ... lrelease: lrelease: make: make: qmake: qmake: designer: designer: ctags: ctags: lupdate: lupdate: gdb: gdb: linguist: linguist: Please enter the path to the external programs: Будьласка, введіть шлях до програм: Check environment on start Перевіряти оточення при старті assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ok Угу Please select the program TreeClasses Open Declaration Перейти до оголошення Open Implementation Перейти до реалізації Refresh contents Оновити зміст Add Method... Add Variable... Add get/set Methods... TreeProject Add sub-project... Додати підпроект... Add New Item... Додати новий файл... Add Scope... Додати теку... Add Existing Files... Додати існуючі файли... Open in Linguist Відкрити в Linguist Refresh translation files Оновлювати файли перекладу Build release translation files Зібрати файли перекладу Open in Designer Відкрити в Designer Dialog Subclassing... Об’єкти діалогу... Dialog Preview Попередній перегляд діалогу Open Відкрити Show As Показати як Normal Нормальний Krawek Krawek Add New Class... Додати новий клас... Rename... Перейменувати... Properties of %1... Remove from project Warning Dialog Діалог TextLabel Текстова мітка OK Угу Don't show anymore Більше не показувати qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Vietnamese.ts.svn-base0000444000175000017500000046002411362261066027732 0ustar jlbrdjlbrd About QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK Chấp nhận <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Thêm tập tin có sẳn OK Chấp nhận Cancel Hủy bỏ Project or Scope : Dự án hoặc Phạm vi : File : Tập tin : ... ... Copy files here: Copy các tập tin này: AddExistantImpl Choose the file to add Chọn tập tin thêm vào Enter a filename. Nhập vào tên tập tin. Cancel Hủy bỏ Enter a location destination. Nhập vào nơi đến. Choose a directory Chọn thư mục The file %1 doesn't exist. Tập tin %1 không tồn tại. Unable to copy %1 Không thể copy %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Thêm mục mới Files Tập tin Translation Phiên dịch Resources Tài nguyên Dialog Bản hội thoại Header Tiêu đề Sources Nguồn Project or Scope: Dự án hoặc Phạm vi : File Name : Tên tập tin : Location : Vị trí : ... ... OK Chấp nhận Cancel Hủy bỏ newfile.cpp tap_tin_moi.cpp AddNewClass OK Chấp nhận Cancel Hủy bỏ Inheritance Thừa kế Inherits another class Thừa kế từ 1 lớp khác Ancestor: Lớp được thừa kế: Ancestor's include filename: Tên tập tin tiêu đề của lớp được thừa kế: Scope: Phạm vi: Filenames Tên tập tin Header filename: Tên tập tin tiêu đề: Implementation filename: Tên tập tin thi hành: Location : Vị trí : ... ... Project or Scope: Dự án hoặc phạm vi : Class name: Tên lớp: Constructor arguments: Các thông số của hàm xây dựng: Virtual destructor Hàm kết thúc ảo Add New Class Thêm lớp mới AddNewClassImpl Choose the file location Chọn vị trí tập tin Cancel Hủy bỏ Unable to create file. Không thể tạo tập tin. The file "%1" already exists. Tập tin "%1" đã có sẵn. AddNewClassMethod Add New Method Thêm hàm mới Method Name: Tên Hàm: Return type: Kiểu giá trị trả về: Parameters: Các thông số: Scope: Phạm vi: Inline Virtual Static Pure OK Chấp nhận Cancel Hủy bỏ AddNewClassMethodImpl Add New Method in class %1 Thêm hàm mới vào lớp %1 An implementation file is required. Cần 1 tập tin thực hiện. Cancel Hủy bỏ %1 already exists in class %2. %1 đã tồn tại trong lớp %2. AddNewClassVariable Add New Variable Thêm biến mới Create get/set methods Tạo các hàm get/set inline set method hàm set get method hàm get OK Chấp nhận Cancel Hủy bỏ Variable Name: Tên Biến: Type: Loại: Scope: Phạm vi: AddNewClassVariableImpl Cancel Hủy bỏ %1 already exists in class %2. %1 đã có trong lớp %2. AddNewImpl Choose the file location Chọn vị trí tập tin The suffix of the file is not correct. Đuôi tên tập tin sai. Cancel Hủy bỏ header tiêu đề Yes Vâng No Không Also create the file %1 in same location ? Cũng sẽ tạo tập tin %1 trong cùng 1 nơi? source nguồn AddScope Add New Scope Thêm phạm vi New Scope Phạm vi mới win32 debug unix release mac other khác Project or Scope : Dự án hay Phạm vi : OK Chấp nhận Cancel Hủy bỏ AddSetGet Add get/set methods Thêm các hàm get/set OK Chấp nhận Cancel Hủy bỏ Create get/set methods for Tạo các hàm get/set cho inline set method hàm set get method hàm get AddSetGetImpl Cancel Hủy bỏ BreakpointCondition Dialog Bản hội thoại Condition : Điều kiện : is true (breakpoint) là đúng (điểm ngừng) has changed (watchpoint) đã thay đổi (điểm kiểm tra) Build Update project Cập nhật dự án Clean Project Dọn sạch dự án Build Khởi tạo Build stopped Việc khởi tạo bị dừng Compilation of %1... Việc biên dịch của %1... Debug Running... Đang chạy... Exited normally Thoát bình thường Debug... Tìm lỗi... Debug exited Việc tìm lỗi kết thúc Error: Unable to evaluate value Lỗi: không thể xác định giá trị Exited with error code %1 Editor Refresh classes and methods lists Làm mới danh sách các lớp và hàm What do you want to do? Bạn muốn làm gì? Overwrite Ghi đè lên Reload File Tải lại tập tin The file "%1" was modified outside editor. Tập tin "%1" đã được thay đổi bên ngoài trình biên soạn. Open %1 Mở %1 %1 replacement(s) made. %1 thay thế được thực hiện. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop OK Chấp nhận Cancel Hủy bỏ Choose program to Debug : Chọn chương trình để tìm lỗi : Don't ask question anymore Đừng hỏi nữa FindFile Find in Files Tìm trong các tập tin Pattern: Dạng mẫu: Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Recursive Đệ huy *.cpp; *.h *.ui; *.qrc; *.txt Files: Tập tin: ... ... Find in: Tìm trong: &Find &Tìm &Close &Đóng Replace found text Replace with: FindFileImpl Choose a directory Chọn thư mục Line Dòng File Tập tin &Find &Tìm &Stop &Dừng Cannot open temporary file %1 FindWidget Form Khuôn mẫu Previous Về trước Next Về sau Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Reached end of page, continued from top Hết trang, tiếp tục lên đầu GotoLine Goto Line Đến dòng <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Đi đến dòng:</span></p></body></html> OK Chấp nhận Cancel Hủy bỏ InitCompletion Unable to launch %1 Không thể chạy %1 Unable to open %1 Không thể mở %1 LineNumbers Toogle Bookmark Bật tắt thẻ đánh dấu Toogle Breakpoint Bật tắt điếm dừng Breakpoint Condition... Điều kiện cho điểm dừng... LogBuild error lỗi warning cảnh báo error Compiler message lỗi undefined reference to Linker message warning Compiler message cảnh báo Main QDevelop &? &? Build Khởi tạo &Edit &Biên soạn &File &Tập tin Outputs Kết quả Files Tập tin Files toolbar Thanh công cụ tập tin Edit Toolbar Thanh công cụ biên soạn &New Project... &Dự án mới... &File... &Tập tin... &Close All Files Đón&g tất cả các tập tin &Save File &Lưu tập tin Ctrl+S &Quit Th&oát Ctrl+Z Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Chọn tất cả Ctrl+F Add New Item Thêm mục mới Add Existing Files Thêm tập tin sẵn có New Folder Thư mục mới Project Properties Đặc tính của dự án F7 Clean Dọn sạch Rebuild Tái khởi tạo Shift+F7 Start Program Khởi động chương trình Shift+F5 Step Into Bước vào F11 Step Over Bước qua F10 &Open... &Mở... F3 Stop Dừng F6 Breakpoints... Điểm dừng... Indent selection Chọn thụt vào Tab Unindent selection Hủy bỏ thụt vào Shift+Tab F1 Project Explorer Bộ quản lý dự án Save Project As... Lưu dự án như... Compile File Biên dịch tập tin Ctrl+W Alt+Right Alt+Left Shift+F12 Shift+F11 Esc Thoát Undo Hủy động tác Redo Làm lại F9 &View &Xem &Project &Dự án &Build &Khởi tạo &Debug &Tìm lỗi Ctrl+A Ctrl+O Ctrl+G Ctrl+R Complete Code Hoàn thành mã lệnh Ctrl+Space Ctrl+D &New File... &Tập tin mới... New File Tập tin mới Comment Chú thích Uncomment Hủy chú thích Classes Lớp Calls Stack Gọi stack Name Tên Type Loại Address Địa chỉ Value Giá trị ... ... Toggle &Bookmark &Bật tắt thẻ đánh dấu Toggle Bookmark Bật tắt thẻ đánh dấu Ctrl+B Clear &All Bookmarks &Xóa tất cả thẻ đánh dấu &Open Project... &Mở Dự án... Ctrl+F2 F2 Shift+F2 Shift+F3 Plugins Chương trình cắm vào Ctrl+N Goto matching bracket Đến dấu ngoặc cùng cặp Ctrl+[ Foo &Print... &In ấn... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Thẻ đánh dấu &Last Projects &Các dự án vừa qua B&uild &Khởi tạo Las&t Files Các &tập tin vừa qua &Tools &Công cụ &Plugins settings &Thiết lập chương trình cắm vào Ed&itors Trình &biên soạn 1 Build and Debug Toolbar Thanh công cụ khởi tạo và tìm lỗi Call Stacks Gọi stack Registers Các thanh ghi Save File &as... Lưu tập tin &như... Save A&ll Lưu tất &cả &Undo &Hủy động tác &Redo &Làm lại Cu&t C&ắt &Copy &Copy &Paste &Dán &Find... &Tìm... &Replace... Th&ay thế... &Find in Files... &Tìm trong các tập tin... Add New &Item... &Thêm mục mới... Add Existing &Files... Thêm các tập tin &sẵn có... Project &Properties... Đặc &tính của dự án... &Clean Dọn &sạch &Rebuild &Tái khởi tạo S&tart Program &Chạy chương trình Step &Into &Bước vào Step O&ver Bước &qua &Calls Stack &Gọi stack &Options... Tùy &chọn... &Parameters... Các thông &số... &About... &Giới thiệu.... About &Qt... Giới thiệu về &Qt.... Find &Next Tìm tiế&p &Stop &Dừng &Stop Build &Dừng việc khởi tạo &Help Current Qt Word Giú&p đỡ về từ khóa của Qt &Reset Executables List Đặt &lại danh sách thực thi &Save Project &Lưu dự án C&lose Project Đón&g dự án Add &Scope... Thêm &phạm vi... Step &Out Bước &Ra &Close Current Editor Đóng trình biên &soạn hiện hành &Next Tab &Qua tab sau &Previous Tab &Về tab phía trước &Switch to Header/Sources &Chuyển sang tiêu đề/nguồn Set &Focus to Editor &Tập trung vào trình biên soạn Toggle &breakpoint &Bật tắt điểm dừng Goto &Methods List Đến &danh sách các hàm Configure &Shortcuts... Điều chỉnh các &phím tắc... &Goto Line... Đến dòn&g... Toggle Co&mments &Bật tắt các chú thích E&xternal Tools... Công cụ &bên ngoài... &Next Bookmark Thẻ đánh dấu &kế tiếp &Previous Bookmark Thẻ đánh dấu &phía trước Find Pr&evious Tìm &về trước Goto matching &bracket Đến dấu &ngoặc cùng cặp Add New &Class... Thêm lớp mớ&i... Open F&ile in project... &Mở tập tin trong dự án... Goto &Implementation Đến phần thực &hiện Goto &Declaration Đến phần &khai báo &Rebuild Qt classes database Tái &khởi tạo dữ liệu lớp của Qt Execute &qmake Thực thi &qmake Show Maximized Xem phóng to &Editor mode Chế độ &soạn thảo Ctrl+E Next Warning/Error Cảnh báo/Lỗi kế tiếp F4 Previous Warning/Error Cảnh báo/Lỗi phía trước Shift+F4 Clear all Warnings/Errors Xóa hết các cảnh báo/lỗi &Toolbars &Công cụ Dock windows Gắn các cửa sổ Local Variables Biến địa phương Other Variables Các biến khác Find in files Tìm trong các tập tin Full view Vùng nhìn tối đa Minimal view Vùng nhìn tối thiểu DocksWindow Cửa sổ được gắn Dock Windows Cửa sổ được gắn New submenu > Menu con mới > a một En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Cancel Hủy bỏ Choose a file to open Mở tập tin Choose the file to create Tạo tập tin Files (*.cpp *.h *.txt *.* *) Tập tin (*.cpp *.h *.txt *.* *) Stop Dừng Start Bắt đầu The project has been modified, do you want to save your changes ? Dự án đã bị thay đổi, bạn có muốn lưu lại các thay đổi không? Yes Vâng No Không run Build. thực hiện việc khởi tạo. Ok Chấp nhận Stop debugging ? Dừng việc tìm lỗi ? Abort Dứt bỏ Continue Tiếp tục &%1 %2 &%1 %2 Do you want to quit QDevelop ? Bạn có muốn thoát khỏi QDevelop không ? Shift+F5 F5 Files Tập tin Sources Nguồn Projects Dự án Texts Văn bản All Files Tất cả các tập tin Stopping is not possible under Windows. Put breakpoints. Không thể dừng trong Windows. Hãy đặt điểm dừng. New Variable: Biến số mới: Choose a project to open Mở dự án Build finished without error Khởi tạo kết thúc thành công Build finished with Khởi tạo kết thúc với error(s) lỗi and warning(s) cảnh báo The file "%1" already exists in directory. Tập tin "%1" đã tồn tại trong thư mục. Unable to create %1 Không thể tạo %1 The project %1 doesn't exist. Dự án %1 không tồn tại. Properties of %1... Đặc tính của %1... The program doesn't exist, Chương trình không tồn tại, The variable "%1" already exists. Biến số "%1" đã có sẵn. The Qt include directory doesn't exist, You can change in Options dialog. Thư mục include của Qt không tồn tại. Bạn có thể sửa đổi trong bản đối thoại Tùy Chọn. The Qt database building is already in progress. Dữ liệu của Qt đang được tạo. The Qt classes database build is ended. Dữ liệu lớp của Qt đã được tạo xong. Version %1 Phiên bản %1 Cannot launch Linguist NewImplementation New Implementation Phần thực thi mới &Ok &Chấp nhận C&ancel &Hủy bỏ File Name : Tên tập tin : Class Name : Tên lớp : Location : Vị trí : ... ... NewProject New project creation Tạo dự án mới Parent project : Dự án mẹ : Project name : Tên dự án : Location : Vị trí : ... ... Project creation on : Tạo dự án dự theo : OK Chấp nhận Cancel Hủy bỏ Template Mẫu Application with Dialog Ứng dụng với bản đối thoại (dialog) Application with Main Window Ứng dụng với cửa sổ chính (main window) Properties Đặc tính Version Phiên bản Debug Version Bản dễ tìm lỗi (debug version) Release Version Bản phát hành (release version) Sub-directories Thư mục con Dialogs: Bản đối thoại: Executable: Tập tin thực thi: ui bin sources: nguồn: Objects: Đối tượng: src build Inheritance subclassing Lớp con thừa kế Object name: Tên đối tượng: File name: Tên tập tin: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Dự án trống hoặc chủ NewProjectImpl Choose the project directory Chọn thư mục cho dự án The directory "%1" cannot be created Không thể tạo thư mục "%1" Cancel Hủy bỏ The project cannot be created Không thể tạo dư án Project file "%1" already exists The directory "%1" already exists. Do you want to create project anyway? NewVariable Dialog Bản đối thoại OK Chấp nhận Cancel Hủy bỏ Qt Variables Các biến số của Qt User Variable Các biến số của người dùng Variable : Biến số : New Variable : Biến số mới : Operator : Toán tử : = += -= *= ~= OpenFile Open File in Project Mở tập tin trong dự án OK Chấp nhận Cancel Hủy bỏ Options Options Tùy chọn General Tổng quát Editor Trình biên soạn Line numbers Số dòng Selection border Chọn đường biên Autoindent Tự động thụt vào Syntax highlighting Làm nổi bật cú pháp Function/method names : Tên hàm : Preprocessor : Từ khóa tiền xử lý : Qt words : Từ khóa riêng của Qt : Keywords : Từ khóa của C và C++ : Single comments : Chú thích đơn : Multiline comments : Chú thích trên nhiều dòng : Quotation strings : Chuỗi trích dẫn : ... ... Default Mặc định Replace Tab by spaces Thay Tab bằng các khoảng trống Unix Dos/Windows Complete Code Hoàn thành Mã lệnh Prompt before quit Báo trước khi thoát Font: Phông chữ: End of line Cuối dòng options tùy chọn Auto-Brackets Tự động đóng ngoặc Tab size Kích thước Tab Current line background Màu nền của dòng hiện hành Text background Màu nền của văn bản Show classes explorer Mở bộ quản lý dự án Interval between updates: Thời gian giữa các lần cập nhật: seconds giây Default projects directory: Thư mục mặc định của dự án: Matching ( and { Đối xứng cặp ( và { User plugins directory: Thư mục trình cắm vào của người dùng: Save all before build Lưu tất cả trước khi khởi tạo Automatic compilation Biên dịch tự động Qt include directory: Thư mục include của Qt: Qt documentation directory: Thư mục tài liệu của Qt: Make extra parameters: Các thông số bổ xung của Make: Reload last project when the application starts Tải lại dự án cuối cùng khi chương trình bắt đầu Close button in each tab (does not work with all styles) Nút đóng ở mỗi tab (không làm việc với tất cả các kiểu) Display editor toolbars Hiển thị các thanh công cụ soạn thảo Display white spaces Hiển thị các khoảng trắng Files encoding: Bản mã của tập tin: Text color Màu của văn bản Right margin line Column: Auto-Comments <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory Chọn thư mục cho dự án Param Program parameters Thông số cho dự án Run with these arguments: Thực thi với các thông số này: Working directory (leave empty to use project directory): Thư mục làm việc (chừa trống nếu dùng chung thư mục của dự án): ... ... Environment variables (NAME=value): Biến môi trường (TÊN=giá trị): Name Tên Value Giá trị &Add &Thêm &Delete &Xóa &Sort Xế&p thứ tự &Default &Mặc định &OK &Chấp nhận &Cancel &Hủy bỏ &Edit &Sửa ParametersImpl Choose the project location Chọn vị trí của dự án Cancel Hủy bỏ The variable "%1" already exists. Biến số "%1" đã có sẵn. ProjectManager Save project changes ? Lưu các thay đổi của dự án ? Yes Vâng No Không Cancel Hủy bỏ Forms: Khuôn mẫu: Unable to create file. Không thể tạo tập tin. Ok Nhận Sub-project creation Tạo dự án con Sub-Projects Dự án con Sub-projects Dự án con Headers Tiêu đề Sources Nguồn Dialogs Bản đối thoại Translations Dịch Resources Tài nguyên Project parsing Phân tích dự án New name: Tên mới: The kind of the new and the old filename is different ! Tên tập tin mới và cũ thuộc loại khác nhau ! Rename Đổi tên The file already exists in directory. Tập tin đã tồn tại trong thư mục. The file already exists. Tập tin đã có sẵn. This file is not permitted. Tập tin này không có phép. Unable to rename the file to "%1" Không thể đổi tên tập tin thành "%1" The only available version for "%1" is %2 Chỉ có phiên bản duy nhất %2 cho "%1" Run on %1 Thực thi trên %1 Cannot remove the main project. Không thể loại bỏ dự án chính. Do you want to remove "%1" from the project ? Bạn có muốn loại bỏ "%1" khỏi dự án không? File not found: "%1" ProjectPropertie Dialog Bản hội thoại Configuration Điều chỉnh General : Tổng quát : Version Phiên bản build_all debug release debug_and_release Warnings Cảnh báo warn_off warn_on Qt Libraries Thư viện của Qt core network sql xml gui opengl svg qt3support Advanced Options Tùy chọn Cao cấp app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Biến số Variable : Biến số : ... ... Values : Giá trị : Project Template Khuôn mẫu dự án subdirs lib app Project or Scope : Dự án hoặc Phạm vi : OK Chấp nhận Cancel Hủy bỏ Default directories Thư mục mặc định Dialogs: Bản đối thoại: Sources: Nguồn: qtestlib Advanced options Các tùy chọn cao cấp Free CONFIG variables : Các biến CONFIG tự do : script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Giá trị mới: delete spaces or put quotes. xóa các khoảng trống hoặc đoạn trích. Modify Sửa Cancel Hủy bỏ Choose the sources location Chọn vị trí của nguồn Choose the dialogs location Chọn vị trí của bản đối thoại Properties of %1 Đặc tính của %1 The spaces aren't correctly parsed by qmake qmake không thể phân tích đúng các khoảng trắng A new variable can not be "QT", "CONFIG" or "TEMPLATE" Biến mới không thể là "QT", "CONFIG" hay "TEMPLATE" QObject Unable to start Assistant ! Không thể chạy trình Assistant ! Loading: Tải: Interface translation Giao diện phiên dịch Environment control Điều khiển môi trường Files on editor Tập tin trong trình biên soạn Main Window creation Tạo cửa sổ chính Unable to establish a database connection. Không thể thiết lập kết nối cơ sở dữ liệu. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop cần có hổ trợ của SQLite. Vui lòng đọc tài liệu trình điều khiển của Qt SQL để biết cách xây dựng. Current project parsing Phân tích dự án hiện tại Plugins Trình cắm vào Unable to start Designer ! Không thể chạy trình Designer ! Registers Form Khuôn mẫu Name Tên Value Giá trị Apply Áp dụng ReplaceWidget Form Khuôn mẫu find: tìm: Replacement: Thay thế: &Replace &Thay thế Previous Về trước Next Về sau Case Sensitive Phân biệt chữ hoa và thường Whole words Nguyên từ Prompt Dấu nhắc Reached end of page, continued from top Hết trang, tiếp tục lên đầu Shortcuts Configure Shortcuts Điều chỉnh các phím tắc Action Hành động Shortcut Phím tắc Default Mặc định OK Chấp nhận Cancel Hủy bỏ Subclassing Qt Designer Form Subclassing Mẫu Qt Designer của lớp con &Create Tạ&o C&ancel &Hủy bỏ &New... Tạo &mới... Class Na&me: Tên &lớp: &File Name: &Tên tập tin: &Location: &Vị trí: Filter &by: Lọc &bởi: SubclassingImpl Choose the file location Chọn vị trí tập tin &Update &Cập nhật C&reate &Tạo (.h and .cpp) (.h và .cpp) TabWidget Close Tab Đóng Tab Close Other Tabs Đóng các Tab khác Close All Tabs Đóng tất cả các Tab TextEdit Cancel Hủy bỏ Yes Vâng No Không Cut Cắt Copy Paste Dán Selection Indent Chọn thụt vào Selection Unindent Hủy bỏ thụt vào Select All Chọn tất cả Find... Tìm... Toggle Bookmark Bật tắt thẻ đánh dấu Toggle Breakpoint Bật tắt điểm dừng The file "%1" could not be loaded. Không thể nạp tập tin "%1". Save "%1" Lưu "%1" Unable to save %1 Không thể lưu %1 Goto Implementation Đến phần thực hiện Goto Declaration Đến phần khai báo The Qt database building is in progress. Try to complete code later. Dữ liệu của Qt đang được tạo. Hãy cố gắng hoàn thành mã lệnh sau đó. Reached end of page, continued from top Đến hết trang, trở lại từ đầu ToolsControl External Tools Công cụ bên ngoài qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: lrelease: designer: designer: ... ... &Test &Kiểm tra Please enter the path to the external programs: Vui lòng nhập đường dẫn đến chương trình bên ngoài: Check environment on start Kiểm tra môi trường khi bắt đầu assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Ctags được tìn thấy ở %1, nhưng phiên bản này quá cũ. Ok Chấp nhận Please select the program TreeClasses Open Declaration Mở phần khai báo Open Implementation Mở phần thực thi Refresh contents Cập nhật nội dung Add Method... Thêm hàm mới... Add Variable... Thêm biến mới... Add get/set Methods... Thêm các hàm get/set... TreeProject Add sub-project... Thêm dự án con... Add New Item... Thêm mục mới... Add Scope... Thêm phạm vi... Add Existing Files... Thêm tập tin sẵn có... Open in Linguist Mở trong trình Linguist Refresh translation files Cập nhật tập tin phiên dịch Build release translation files Khởi tạo tập tin phiên dịch phát hành Open in Designer Mở trong Designer Dialog Subclassing... Lớp con của bản đối thoại... Dialog Preview Duyệt trước bản đối thoại Open Mở Show As Cho xem theo Normal Thông thường Krawek Danh sách kiểu Krawek Add New Class... Thêm lớp mới... Rename... Đổi tên... Properties of %1... Đặc tính của %1... Remove from project Loại bỏ khỏi dự án Warning Dialog Bản đối thoại TextLabel OK Chấp nhận Don't show anymore Đừng hiền thị nữa qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Chinese.ts.svn-base0000444000175000017500000045233411362261066027215 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">版本</span></p></body></html> OK OK <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files 添加文件 OK 确定 Cancel 取消 Project or Scope : 工程或域 : File : 文件 : ... ... Copy files here: 把文件复制到这里: AddExistantImpl Choose the file to add 选择要添加的文件 Enter a filename. 输入文件名. Cancel 取消 Enter a location destination. 输入目标地址。 Choose a directory 选择目录 The file %1 doesn't exist. 文件%1不存在. Unable to copy %1 不能复制%1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item 添加新项 Files 文件 Translation 翻译 Resources 资源 Dialog 对话框 Header 头文件 Sources 源文件 Project or Scope: 工程或域: File Name : 文件名 : Location : 位置 : ... ... OK 确定 Cancel 取消 newfile.cpp newfile.cpp AddNewClass OK 确定 Cancel 取消 Inheritance 继承 Inherits another class 继承其他类 Ancestor: 祖先: Ancestor's include filename: 祖先的include文件: Scope: 域: Filenames 文件名 Header filename: 头文件名: Implementation filename: 实现文件名: Location : 位置: ... ... Project or Scope: 工程或域: Class name: 类名: Constructor arguments: 构造函数参数: Virtual destructor 虚拟析构函数 Add New Class 添加新类 AddNewClassImpl Choose the file location 选择文件位置 Cancel 取消 Unable to create file. 不能创建文件. The file "%1" already exists. 文件 "%1" 已经存在. AddNewClassMethod Add New Method 添加新方法 Method Name: 方法名: Return type: 返回类型: Parameters: 参数: Scope: 域: Inline Inline Virtual Virtual Static Static Pure Pure OK 确定 Cancel 取消 AddNewClassMethodImpl Add New Method in class %1 在类 %1里添加新函数 An implementation file is required. 要求一个实现文件. Cancel 取消 %1 already exists in class %2. 在类%2里已经存在%1. AddNewClassVariable Add New Variable 添加新变量 Create get/set methods 创建 get/set 方法 inline inline set method set 方法 get method get 方法 OK 确定 Cancel 取消 Variable Name: 变量名: Type: 类型: Scope: 域: AddNewClassVariableImpl Cancel 取消 %1 already exists in class %2. 在类 %2里已经存在%1. AddNewImpl Choose the file location 选择文件位置 The suffix of the file is not correct. 文件扩展名不正确. Cancel 取消 header 头文件 Yes No Also create the file %1 in same location ? 也在同一位置创建%1? source 源文件 AddScope Add New Scope 添加新域 New Scope 新域 win32 win32 debug debug unix unix release release mac mac other 其他 Project or Scope : 工程或域 : OK 确定 Cancel 取消 AddSetGet Add get/set methods 添加get/set 方法 OK 确定 Cancel 取消 Create get/set methods for 为创建get/set 方法 inline inline set method set 方法 get method get 方法 AddSetGetImpl Cancel 取消 BreakpointCondition Dialog 对话框 Condition : 条件: is true (breakpoint) 真(断点) has changed (watchpoint) 已改变(指示点) Build Update project 更新工程 Clean Project 清理工程 Build 构建 Build stopped 构建已停止 Compilation of %1... 编译 of %1... Debug Running... 正运行... Exited normally 正常退出 Debug... 调试... Debug exited 调试器已退出 Error: Unable to evaluate value 错误: 不能计算值 Exited with error code %1 Editor Refresh classes and methods lists 刷新类与函数列表 What do you want to do? 你想怎么处理? Overwrite 覆盖 Reload File 重新装入 The file "%1" was modified outside editor. 文件 "%1" 已经在编辑器外被更改. Open %1 打开 %1 %1 replacement(s) made. 已替换 %1 个. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK 确定 Cancel 取消 Choose program to Debug : 选择要调试的程序: Don't ask question anymore 以后不要再询问 FindFile Find in Files 在多个文件中查找 Pattern: 模式: Case Sensitive 大小写敏感 Whole words 整词匹配 Recursive 递归查找 *.cpp; *.h *.ui; *.qrc; *.txt Files: 文件: ... ... Find in: 查找的目录: &Find 查找(&F) &Close 关闭(&C) Replace found text Replace with: FindFileImpl Choose a directory 选择目录 &Find 查找(&F) &Stop 停止(&S) Line File 文件 Cannot open temporary file %1 FindWidget Form 表单 Previous 前一个 Next 后一个 Case Sensitive 大小写敏感 Whole words 整词匹配 Reached end of page, continued from top 到达页尾,从头开始 GotoLine Goto Line 跳到行号 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">跳到行号:</span></p></body></html> OK 确定 Cancel 取消 InitCompletion Unable to launch %1 不能启动 %1 Unable to open %1 不能打开 %1 LineNumbers Toogle Bookmark 添加/去除书签 Toogle Breakpoint 添加/去除断点 Breakpoint Condition... 断点条件... LogBuild error 错误 warning 警告 error Compiler message 错误 undefined reference to Linker message warning Compiler message 警告 Main QDevelop QDevelop &? &? &Project 工程(&P) &View 视图(&V) &Debug 调试(&D) &Build 编译(&B) &File 文件(&F) &Edit 编辑(&E) Outputs 输出 Build 编译 Name 名称 Type 类型 Address 地址 Value ... ... Project Explorer 工程浏览器 Files 文件 Classes Files toolbar 文件工具栏 Edit Toolbar 编辑工具栏 &New Project... 新建工程(&N)... &New File... 新建文件(&N)... New File 新建文件 &File... 文件(&F)... &Close All Files 关闭所有文件(&C) &Save File 保存文件(&S) Ctrl+S Ctrl+S &Quit 退出(&Q) Undo 撤销 Ctrl+Z Ctrl+Z Redo 重做 Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All 全选 Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item 添加新项 Add Existing Files 添加已存在的文件 New Folder 新建目录 Project Properties 工程属性 Clean 清理 Rebuild 重新构建 Compile File 编译文件 Shift+F7 Shift+F7 Start Program 启动程序 Shift+F5 Shift+F5 Step Into 跳入 F11 F11 Step Over 跳过 F10 F10 Calls Stack 调用栈 &Open... 打开(&O)... Ctrl+O Ctrl+O F3 F3 Stop 停止 F6 F6 Breakpoints... 断点... Indent selection 缩进选中的文字 Tab Tab Unindent selection 反缩进选中的文字 Shift+Tab Shift+Tab F1 F1 Save Project As... 工程保存为... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Right Alt+Left Alt+Left Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment 注释 Uncomment 去除注释 Complete Code 补全代码 Ctrl+Space Ctrl+Space Toggle &Bookmark 添加/去除书签(&B) Toggle Bookmark 添加/去除书签 Ctrl+B Ctrl+B Clear &All Bookmarks 清除所有书签(&A) &Open Project... 打开工程(&O)... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Ctrl+N Ctrl+N Goto matching bracket 跳转到匹配的括号 Ctrl+[ Ctrl+[ Plugins 插件 F7 F7 Foo Foo &Print... 打印(&P)... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Alt+Shift+O &Bookmarks &书签 &Last Projects &前工程 B&uild 编译(&B) Las&t Files 最近的文件(&T) &Tools 工具(&T) &Plugins settings 插件设置(&P) Ed&itors 编辑器(&E) 1 1 Build and Debug Toolbar 构建和调试工具栏 Call Stacks 调用栈 Registers 寄存器 Save File &as... 文件另存为(&A)... Save A&ll 保存全部(&A) &Undo 撤销(&U) &Redo 重做(&R) Cu&t 剪切(&T) &Copy 复制(&C) &Paste 粘贴(&P) &Find... 查找(&F)... &Replace... 替换(&R)... &Find in Files... 在文件中查找(&F)... Add New &Item... 添加新项(&I)... Add Existing &Files... 添加已有的文件(&F)... Project &Properties... 工程属性(&P)... &Clean 清理(&C) &Rebuild 重新构建(&R) S&tart Program 启动程序(&S) Step &Into 跳入(&I) Step O&ver 跳过(&O) &Calls Stack 调用栈(&C) &Options... 选项(&O)... &Parameters... 参数(&P)... &About... 关于(&A)... About &Qt... 关于&Qt... Find &Next 查找下一个(&N) &Stop 停止(&S) &Stop Build 停止编译(&S) &Help Current Qt Word 当前Qt关键字帮助(&H) &Reset Executables List 重设可执行列表(&R) &Save Project 保存工程(&S) C&lose Project 关闭工程(&C) Add &Scope... 添加域(&S)... Step &Out 跳出(&O) &Close Current Editor 关闭当前编辑器(&C) &Next Tab 下一个Tab(&N) &Previous Tab 前一个Tab(&P) &Switch to Header/Sources 切换到头文件/源文件(&S) Set &Focus to Editor 设置编辑器焦点(&F) Toggle &breakpoint 添加去除断点(&b) Goto &Methods List 跳到方法列表(&M) Configure &Shortcuts... 配置快捷键(&S)... &Goto Line... 跳到行号(&G)... Toggle Co&mments 添加/去除注释(&M) E&xternal Tools... 外部工具(&E)... &Next Bookmark 下一个书签(&N) &Previous Bookmark 前一个书签(&P) Find Pr&evious 查找前一个(&E) Goto matching &bracket 跳转到匹配的括号(&B) Add New &Class... 添加新类(&C)... Open F&ile in project... 打开工程里的文件(&F)... Goto &Implementation 跳到实现(&I) Goto &Declaration 跳到声明(&D) &Rebuild Qt classes database 重编译Qt类数据库(&R) Execute &qmake 执行qmake(&Q) Show Maximized 最大化显示 &Editor mode 编辑器模式(&E) Ctrl+E Ctrl+E Next Warning/Error 下一个警告/错误 F4 F4 Previous Warning/Error 前一个警告/错误 Shift+F4 Shift+F4 Clear all Warnings/Errors 清除所有警告/错误 &Toolbars 工具栏(&T) Dock windows 停靠窗口 Local Variables 本地变量 Other Variables 其他变量 Find in files 在文件寻找 Full view 完全视图 Minimal view 精简视图 DocksWindow 停靠窗口 Dock Windows 停靠窗口 New submenu > 新建子菜单 a 一个 En&force qmake mode &Debug mode &Release mode &Forget last used mode MainImpl Choose the file to create 选择要创建的文件 Files 文件 Cancel 取消 Do you want to quit QDevelop ? 你要退出QDevelop吗? Yes No Choose a file to open 选择要打开的文件 Sources 源文件 Projects 工程 Texts 文本 All Files 所有文件 Files (*.cpp *.h *.txt *.* *) 文件 (*.cpp *.h *.txt *.* *) Stop 停止 Start 开始 The project has been modified, do you want to save your changes ? 工程已经被更改,你愿意保存改动吗? Stop debugging ? 停止调试? run Build. 运行编译。 Ok 确定 Shift+F5 Shift+F5 F5 F5 Abort 中止 Stopping is not possible under Windows. Put breakpoints. Windows中无法停下,请设置断点。 Continue 继续 &%1 %2 &%1 %2 New Variable: 新变量: Choose a project to open 选择要打开的工程 Build finished without error 编译结束没有错误 Build finished with 编译结束 error(s) 错误 and warning(s) 警告 The file "%1" already exists in directory. 文件 "%1" 在目录里已经存在. Unable to create %1 不能创建%1 The project %1 doesn't exist. 工程%1不存在. Properties of %1... %1属性... The program doesn't exist, 程序不存在, The variable "%1" already exists. 变量 "%1" 已经存在. The Qt include directory doesn't exist, You can change in Options dialog. Qt include目录不存在,你可以在选项对话框里修改. The Qt database building is already in progress. Qt数据库正在创建中. The Qt classes database build is ended. Qt类数据库创建结束. Version %1 版本 %1 Cannot launch Linguist NewImplementation New Implementation 新建实现 Class Name : 类名: File Name : 文件名: Location : 位置: ... ... &Ok 确定(&O) C&ancel 取消(&A) NewProject New project creation 新建工程 Template 模板 Application with Dialog 带对话框的工程 Application with Main Window 带主窗口的工程 Properties 属性 Parent project : 父工程: Project name : 工程名: Location : 位置: ... ... Project creation on : 工程创建于: Version 版本 Debug Version Debug版本 Release Version Release版本 OK 确定 Cancel 取消 Sub-directories 子目录 Dialogs: 对话框: Executable: 可执行文件: ui ui bin bin sources: 源文件: Objects: 对象: src src build build Inheritance subclassing 继承子类 Object name: 对象名: File name: 文件名: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> 对话框: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> 子类 Empty or master project 空或主要工程 NewProjectImpl Choose the project directory 选择工程目录 The directory "%1" cannot be created 不能创建目录"%1" Cancel 取消 The project cannot be created 工程不能被创建 Project file "%1" already exists 工程文件 "%1"已经存在 The directory "%1" already exists. Do you want to create project anyway? 目录"%1"已经存在.你仍想创建工程吗? NewVariable Dialog 对话框 OK 确定 Cancel 取消 Qt Variables Qt变量 User Variable 用户变量 Variable : 变量 : New Variable : 新变量 : Operator : 操作 : = = += += -= -= *= *= ~= ~= OpenFile Open File in Project 打开工程里的文件 OK 确定 Cancel 取消 Options Options 选项 General 一般 Prompt before quit 退出时提示 Show classes explorer 显示类浏览器 Interval between updates: 更新周期: seconds Editor 编辑器 Font: 字体: End of line 行尾 Tab size Tab键长度 Current line background 当前行背景色 Text background 文字背景色 Default 默认 Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces 把Tab替换成空格 ... ... options 选项 Line numbers 行号 Syntax highlighting 代码高亮 Auto-Brackets 自动加括号 Selection border 突出边框 Complete Code 补全代码 Autoindent 自动缩进 Function/method names : 函数/方法名: Preprocessor : 预处理器: Qt words : Qt关键字: Keywords : 关键字: Single comments : 单行注释: Multiline comments : 多行注释: Quotation strings : 引号内字符串: Default projects directory: 默认工程目录: Matching ( and { 匹配 ( 与 { User plugins directory: 用户插件目录: Save all before build 构建前保存一切 Automatic compilation 自动编译 Qt include directory: Qt include目录: Qt documentation directory: Qt文档目录: Make extra parameters: make额外参数: Reload last project when the application starts 当应用程序开始时载入前一工程 Close button in each tab (does not work with all styles) 每个tab栏里的关闭按钮(不是在所有风格下都有用) Display editor toolbars 显示编辑器工具栏 Display white spaces 显示空格 Files encoding: 文件编码: Text color 文字颜色 Right margin line 右边界线 Column: 栏: Auto-Comments Word wrap <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Hide Find/Replace panels after sec. Ctrl+click = Go to implementation, Meta+click = Go to declaration OptionsImpl Choose the project directory 选择工程目录 Param Program parameters 程序参数 Run with these arguments: 以下列参数运行: Working directory (leave empty to use project directory): 启动目录(如果为空,则用工程目录) ... Environment variables (NAME=value): 环境变量(NAME=value): Name 名称 Value &Edit 编辑(&E) &Add 添加(&A) &Delete 删除(&D) &Sort 排序(&S) &Default 默认(&D) &OK 确定(&O) &Cancel 取消(&C) ParametersImpl Choose the project location 选择工程路径 Cancel 取消 The variable "%1" already exists. 变量"%1"已经存在. ProjectManager Save project changes ? 保存工程的改动? Yes No Cancel 取消 Forms: 表单: Unable to create file. 不能创建文件。 Ok 确定 Sub-project creation 创建子工程 Sub-Projects 子工程 Sub-projects 子工程 Headers 头文件 Sources 源文件 Dialogs 对话框 Translations 翻译 Resources 资源 Project parsing 工程解析 New name: 新命名: The kind of the new and the old filename is different ! 新文件名和旧文件名类型不同! Rename 重命名 The file already exists in directory. 文件已经存在. The file already exists. 文件已经存在. This file is not permitted. 文件不被允许. Unable to rename the file to "%1" 不能将文件重命名为"%1" The only available version for "%1" is %2 "%1"的唯一的版本是 %2 Run on %1 启动 %1 Cannot remove the main project. 不能移动主工程. Do you want to remove "%1" from the project ? 你想从工程中删除"%1" ? File not found: "%1" ProjectPropertie Dialog 对话框 Configuration 配置 General : 一般: Version 版本 build_all 全编译 debug debug release release debug_and_release debug_and_releas Warnings 警告 warn_off 关闭警告 warn_on 启动警告 Qt Libraries Qt库 core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options 高级选项 app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables 变量 Variable : 变量: ... ... Values : 值: Project Template 工程模板 subdirs 子目录 lib lib app app Project or Scope : 工程或组: OK 确定 Cancel 取消 Default directories 默认目录 Dialogs: 对话框: Sources: 源文件: qtestlib qtestlib Advanced options 高级选项 Free CONFIG variables : 自定义CONFIG变量 : script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: 新值: delete spaces or put quotes. 去掉空格或用引号. Modify 更改 Cancel 取消 Choose the sources location 选择源文件位置 Choose the dialogs location 选择对话框位置 Properties of %1 %1属性 The spaces aren't correctly parsed by qmake 空格没有被qmake正确解析 A new variable can not be "QT", "CONFIG" or "TEMPLATE" 新变量不能是 "QT", "CONFIG" 或 "TEMPLATE" QObject Unable to start Assistant ! 不能启动Assistant! Loading: 加载中: Interface translation 接口翻译 Environment control 环境控制 Files on editor 编辑器中的文件 Main Window creation 创建主窗口 Unable to establish a database connection. 不能建立数据库连接。 QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop需要SQLite支持。编译方法请参阅Qt SQL driver的文档。 Current project parsing 解析当前工程 Plugins 插件 Unable to start Designer ! 不能启动Designer! Registers Form 表单 Name 名称 Value Apply 应用 ReplaceWidget Form 表单 find: 查找: Replacement: 替换 &Replace 替换(&R) Previous 前一个 Next 后一个 Case Sensitive 大小写敏感 Whole words 整词匹配 Prompt 提示 Reached end of page, continued from top 已到达页尾,从头开始 Shortcuts Configure Shortcuts 配置快捷键 Action 行为 Shortcut 快捷键 Default 默认 OK 确定 Cancel 取消 Subclassing Qt Designer Form Subclassing 需要子类化的Qt Designer窗口 &New... 新建(&N)... &Create 创建(&C) C&ancel 取消(&A) Class Na&me: 类名(&M): &File Name: 文件名(&F): &Location: 位置(&L): Filter &by: 筛选(&B): SubclassingImpl Choose the file location 选择文件位置 &Update 更新(&U) C&reate 创建(&R) (.h and .cpp) (.h and .cpp) TabWidget Close Tab 关闭Tab Close Other Tabs 关闭其他Tab Close All Tabs 关闭所有Tab TextEdit Cancel 取消 Yes No Cut 剪切 Copy 复制 Paste 粘贴 Selection Indent 缩进选中的文字 Selection Unindent 反缩进选中的文字 Select All 选择所有 Find... 查找... Toggle Bookmark 添加/去除书签 Toggle Breakpoint 添加/去除断点 The file "%1" could not be loaded. 文件"%1"不能被加载. Save "%1" 保存"%1" Unable to save %1 不能保存%1 Goto Implementation 跳到实现 Goto Declaration 跳到声明 The Qt database building is in progress. Try to complete code later. Qt数据库正在创建中.请稍后完成编码. Reached end of page, continued from top 已到达页尾,从头开始 ToolsControl External Tools 外部工具 qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: linguist: lupdate: lupdate: lrelease: irelease: designer: designer: ... ... &Test 测试(&T) Please enter the path to the external programs: 请输入外部工具的路径: Check environment on start 启动时检查环境 assistant: assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. ctags 已经在路径%1里被检测到,但是版本太旧了. Ok 确定 Please select the program 请选择程序 TreeClasses Open Declaration 打开声明 Open Implementation 打开实现 Refresh contents 刷新 Add Method... 添加方法... Add Variable... 添加变量... Add get/set Methods... 添加get/set 方法... TreeProject Add sub-project... 添加子工程... Add New Item... 添加新项... Add Scope... 添加域... Add Existing Files... 添加已有的文件... Open in Linguist 在Linguist中打开 Refresh translation files 刷新翻译文件 Build release translation files 编译翻译文件 Open in Designer 在Designer中打开 Dialog Subclassing... 对话框子类化... Dialog Preview 对话框预览 Open 打开 Show As 显示风格 Normal 普通 Krawek Krawek Add New Class... 添加新类... Rename... 重命名... Properties of %1... %1的属性... Remove from project 从工程中删除 Warning Dialog 对话框 TextLabel 文本标签 OK 确定 Don't show anymore 以后不要显示 qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Polish.ts.svn-base0000444000175000017500000046216311362261066027076 0ustar jlbrdjlbrd About <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Wersja</span></p></body></html> OK Ok QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Dodawanie istniejących plików OK Ok Cancel Anuluj Project or Scope : Projekt lub zakres: File : Plik: ... ... Copy files here: Skopiuj pliki do: AddExistantImpl Choose the file to add Wybierz plik do dodania Enter a filename. Wpisz nazwę pliku. Cancel Anuluj Enter a location destination. Wpisz docelową lokalizację. Choose a directory Wybierz katalog The file %1 doesn't exist. Plik %1 nie istnieje. Unable to copy %1 Próba skopiowania %1 nie powiodła się Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Pliki (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Dodawanie nowego pliku Files Pliki: Translation Tłumaczenie Resources Zasoby Dialog Widget Header Plik nagłówkowy Sources Plik z implementacją Project or Scope: Projekt lub zakres: File Name : Nazwa pliku: Location : Lokalizacja: ... ... OK Ok Cancel Anuluj newfile.cpp nowy.cpp AddNewClass OK Ok Cancel Anuluj Inheritance Dziedziczenie: Inherits another class dziedziczy po innej klasie Ancestor: Klasa bazowa: Ancestor's include filename: Plik nagłówkowy klasy bazowej: Scope: Rodzaj dziedziczenia: Filenames Pliki: Header filename: Nazwa pliku nagłówkowego: Implementation filename: Nazwa pliku z implementacją: Location : Lokalizacja: ... ... Project or Scope: Projekt lub zakres: Class name: Nazwa klasy: Constructor arguments: Argumenty konstruktora: Virtual destructor wirtualny destruktor Add New Class Dodawanie nowej klasy AddNewClassImpl Choose the file location Wybierz lokalizację pliku Cancel Anuluj Unable to create file. Próba utworzenia pliku nie powiodła się. The file "%1" already exists. Plik "%1" Już istnieje. AddNewClassMethod Add New Method Dodawanie nowej metody Method Name: Nazwa metody: Return type: Typ wartości zwracanej: Parameters: Argumenty: Scope: Zasięg: Inline rozwijana Virtual wirtualna Static statyczna Pure abstrakcyjna OK Ok Cancel Anuluj AddNewClassMethodImpl Add New Method in class %1 Dodawanie nowej metody do klasy %1 An implementation file is required. Wymagany jest plik z implementacją. Cancel Anuluj %1 already exists in class %2. Metoda %1 jest już zdefiniowana w klasie %2. AddNewClassVariable Add New Variable Dodawanie nowej zmiennej Create get/set methods Generowanie akcesora i modyfikatora: inline rozwijany set method modyfikator get method akcesor OK Ok Cancel Anuluj Variable Name: Nazwa zmiennej: Type: Typ: Scope: Zasięg: AddNewClassVariableImpl Cancel Anuluj %1 already exists in class %2. Zmienna %1 jest już zdefiniowana w klasie %2. AddNewImpl Choose the file location Wybierz lokalizację pliku The suffix of the file is not correct. Rozszerzenie nazwy pliku nie jest prawidłowe. Cancel Anuluj header nagłówkowy Yes Tak No Nie Also create the file %1 in same location ? Czy utworzyć również plik %1 w tym samym katalogu? source z implementacją AddScope Add New Scope Dodawanie nowego zakresu New Scope Nowy zakres: win32 win32 debug debug unix unix release release mac mac other inny Project or Scope : Projekt lub zakres: OK Ok Cancel Anuluj AddSetGet Add get/set methods Generowanie akcesora i modyfikatora OK Ok Cancel Anuluj Create get/set methods for Wygeneruj akcesor i modyfikator dla inline rozwijany set method modyfikator get method akcesor AddSetGetImpl Cancel Anuluj BreakpointCondition Dialog Zmiana warunku zatrzymania Condition : Warunek: is true (breakpoint) jest spełniony (pułapka) has changed (watchpoint) został zmieniony (obserwacja) Build Update project Aktualizacja projektu Clean Project Wyczyszczenie projektu Build Budowanie Build stopped Budowanie zatrzymane Compilation of %1... Kompilowanie %1... Debug Running... Uruchomiony ... Exited normally Zakończony normalnie Debug... Debugowanie... Debug exited Debugowanie zakończone Error: Unable to evaluate value Błąd: Próba wyznaczenia wartości nie powiodła się Exited with error code %1 Zakończono z kodem błędu %1 Editor Refresh classes and methods lists Odśwież listy klas i metod What do you want to do? Co chcesz zrobić? Overwrite Nadpisz Reload File Wczytaj ponownie The file "%1" was modified outside editor. Plik "%1" został zmodyfikowany poza edytorem. Open %1 Otwórz %1 %1 replacement(s) made. Liczba wykonanych zmian: %1. The file "%1" disappeared from fisk. Recreate Close ExeChoice OK Ok Cancel Anuluj Choose program to Debug : Wybierz program do debugowania: Don't ask question anymore Nie zadawaj więcej tego pytania QDevelop QDevelop FindFile Find in Files Przeszukiwanie plików Pattern: Wyrażenie: Case Sensitive rozróżniaj wielkość liter Whole words całe wyrazy Recursive rekursywnie *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Pliki: ... ... Find in: Szukaj w: &Find &Szukaj &Close &Zamknij Replace found text Zamień znaleizony tekst Replace with: Zamień na: FindFileImpl Choose a directory Wybierz katalog &Find &Szukaj &Stop &Zatrzymaj Line Linia File Plik Cannot open temporary file %1 Nie można było otworzyć pliku tymczasowego %1 FindWidget Form Previous Poprzedni Next Następny Case Sensitive rozróżniaj wielkość liter Whole words całe wyrazy Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku GotoLine Goto Line Skocz do linii <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Skocz do linii:</span></p></body></html> OK Ok Cancel Anuluj InitCompletion Unable to launch %1 Próba uruchomienia %1 nie powiodła się Unable to open %1 Próba otwarcia %1 nie powiodła się LineNumbers Toogle Bookmark Przełącz zakładkę Toogle Breakpoint Przełącz pułapkę Breakpoint Condition... Warunek zatrzymania... LogBuild error błąd warning ostrzeżenie error Compiler message błąd undefined reference to Linker message niezdefinowana referencja do warning Compiler message ostrzeżenie Main &? &? &File &Plik &Project &Projekt &Build Z&buduj &Debug &Debugowanie &View &Widok &Edit &Edycja Outputs Wyjście Build Budowanie Project Explorer Przeglądarka projektu Files Pliki Classes Klasy Files toolbar Pliki Edit Toolbar Edycja &New Project... &Nowy projekt... &New File... &Nowy plik... New File Nowy plik &File... &Plik... &Close All Files Zamknij &wszystkie pliki &Save File &Zapisz plik Ctrl+S Ctrl+S &Quit &Wyjście Undo Cofnij Ctrl+Z Ctrl+Z Redo Ponów Ctrl+Shift+Z Ctrl+Shift+Z Ctrl+X Ctrl+X Ctrl+C Ctrl+C Ctrl+V Ctrl+V Select All Zaznacz wszystko Ctrl+A Ctrl+A Ctrl+F Ctrl+F Ctrl+R Ctrl+R Add New Item Dodaj nowy plik Add Existing Files Dodaj istniejące pliki New Folder Nowy katalog Project Properties Właściwości projektu F7 F7 Clean Wyczyść Rebuild Zbuduj od nowa Compile File Skompiluj plik Shift+F7 Shift+F7 Start Program Uruchom program Shift+F5 Shift+F5 Step Into Krok do wewnątrz F11 F11 Step Over Przeskocz F10 F10 Calls Stack Stos wywołań &Open... &Otwórz... Ctrl+O Ctrl+O F3 F3 Stop Zatrzymaj F6 F6 Breakpoints... Pułapki... Indent selection Zwiększ wcięcie zaznaczonego obszaru Tab Tab Unindent selection Zmniejsz wcięcie zaznaczonego obszaru Shift+Tab Shift+Tab F1 F1 Save Project As... Zapisz projekt jako... Shift+F11 Shift+F11 Ctrl+W Ctrl+W Alt+Right Alt+Prawy Alt+Left Alt+Lewy Shift+F12 Shift+F12 Esc Esc F9 F9 Ctrl+G Ctrl+G Ctrl+D Ctrl+D Comment Zakomentuj Uncomment Odkomentuj Complete Code Uzupełnij kod Ctrl+Space Ctrl+Space QDevelop QDevelop Name Nazwa Type Typ Address Adres Value Wartość ... ... Toggle &Bookmark Przełącz &zakładkę Toggle Bookmark Przełącz zakładkę Ctrl+B Ctrl+B Clear &All Bookmarks Usuń &wszystkie zakładki &Open Project... &Otwórz projekt... Ctrl+F2 Ctrl+F2 F2 F2 Shift+F2 Shift+F2 Shift+F3 Shift+F3 Plugins Wtyczki Ctrl+N Ctrl+N Goto matching bracket Skocz do pasującego nawiasu Ctrl+[ Ctrl+[ Foo Foo &Print... &Drukuj... Ctrl+Shift+F Ctrl+Shift+F Alt+Shift+O Ctrl+Shift+O &Bookmarks &Zakładki &Last Projects Ostatnio otwierane &projekty B&uild B&udowanie Las&t Files Ostatnio otwierane &pliki &Tools &Narzędzia &Plugins settings &Ustawienia wtyczek Ed&itors &Edytory 1 1 Build and Debug Toolbar Budowanie i debugowanie Call Stacks Stos wywołań Registers Rejestry Save File &as... Zapisz plik &jako... Save A&ll Zapisz &wszystko &Undo &Cofnij &Redo &Ponów Cu&t Wy&tnij &Copy &Kopiuj &Paste &Wklej &Find... &Szukaj... &Replace... &Zamień... &Find in Files... &Szukaj w plikach... Add New &Item... Dodaj &nowy plik... Add Existing &Files... Dodaj istniejące &pliki... Project &Properties... &Właściwości projektu... &Clean Wy&czyść &Rebuild Zbuduj od &nowa S&tart Program &Uruchom program Step &Into &Krok do wewnątrz Step O&ver &Przeskocz &Calls Stack &Stos wywołań &Options... &Ustawienia... &Parameters... &Parametry... &About... &O programie... About &Qt... O &Qt... Find &Next Znajdź &następne wystąpienie &Stop &Zatrzymaj &Stop Build &Zatrzymaj budowanie &Help Current Qt Word &Dokumentacja Qt dla zaznaczonego słowa &Reset Executables List &Wyczyść listę plików wykonywalnych &Save Project &Zapisz projekt C&lose Project Zam&knij projekt Add &Scope... Dodaj &zakres... Step &Out &Wyjdź na zewnątrz &Close Current Editor Zam&knij aktualny edytor &Next Tab &Następna zakładka &Previous Tab &Poprzednia zakładka &Switch to Header/Sources &Przełącz na plik nagłówkowy/implementacji Set &Focus to Editor &Uaktywnij edytor Toggle &breakpoint Przełącz &pułapkę Goto &Methods List Przejdź do listy &metod Configure &Shortcuts... Konfiguracja &skrótów... &Goto Line... &Skocz do linii... Toggle Co&mments Przełącz ko&mentarze E&xternal Tools... &Narzędzia zewnętrzne... &Next Bookmark &Następna zakładka &Previous Bookmark &Poprzednia zakładka Find Pr&evious Znajdź &poprzenie wystąpienie Goto matching &bracket Skocz do pasującego &nawiasu Add New &Class... Dodaj &klasę... Open F&ile in project... Otwórz pl&ik z projektu... Goto &Implementation Przejdź do &implementacji Goto &Declaration Przejdź do &deklaracji &Rebuild Qt classes database P&rzebuduj bazę danych do uzupełniania kodu Execute &qmake Uruchom &qmake Show Maximized Pokaż zmaksymalizowane &Editor mode Tryb &edycji Ctrl+E Ctrl+E Next Warning/Error Następne ostrzeżenie/błąd F4 F4 Previous Warning/Error Poprzednie ostrzeżenie/błąd Shift+F4 Shift+F4 Clear all Warnings/Errors Usuń znaczniki błędów i ostrzeżeń &Toolbars &Narzędzia Dock windows Doki Local Variables Zmienne lokalne Other Variables Inne zmienne Find in files Szukaj w plikach Full view Pełny widok Minimal view Minimalny widok DocksWindow Dok Dock Windows Zadokowane okna New submenu > Nowe podmenu > a a En&force qmake mode W&ymuś tryb qmake &Debug mode Tryb &debugowania &Release mode Tryb &produkcyjny &Forget last used mode &Zapomnij ostatnio używany tryb MainImpl Choose the file to create Wybierz plik do utworzenia Files Pliki Cancel Anuluj Yes Tak No Nie Choose a file to open Wybierz plik do otworzenia Sources Źródła Projects Projekty Texts Tekstowe All Files Wszystkie pliki Files (*.cpp *.h *.txt *.* *) Pliki (*.cpp *.h *.txt *.* *) Stop Zatrzymaj Start Uruchom The project has been modified, do you want to save your changes ? Projekt został zmodyfikowany, Czy chcesz zapisać zmiany? Stop debugging ? Czy przerwać debugowanie? run Build. Zbuduj projekt. Ok Ok Shift+F5 Shift+F5 F5 F5 Abort Przerwij Stopping is not possible under Windows. Put breakpoints. Przerywanie pracy programu nie jest możliwe pod Windows &mdash; użyj pułapek. Continue Kontynuuj &%1 %2 &%1 %2 Do you want to quit QDevelop ? Czy chcesz zakończyć pracę z QDevelopem? New Variable: Nowa zmienna: Choose a project to open Wybierz projek do otworzenia Build finished without error Operacja zakończyła się bez przeszkód Build finished with Operacja zakończyła się z error(s) błęd(em/ami) and oraz warning(s) ostrzeżeni(em/ami) The file "%1" already exists in directory. Plik "%1" już instnieje w katalogu. Unable to create %1 Próba utworzenia %1 nie powiodła się The project %1 doesn't exist. Projekt %1 nie istnieje. Properties of %1... Właściwości %1... The program doesn't exist, Program nie istnieje, The variable "%1" already exists. Zmienna "%1" już instnieje. The Qt include directory doesn't exist, You can change in Options dialog. Katalog z plikami nagłówkowymi Qt nie istnieje. Możesz ustawić inny katalog w oknie dialogowym "Opcje". The Qt database building is already in progress. Tworzenie bazy danych do uzupełniania kodu już trwa. The Qt classes database build is ended. Zakończono tworzenie bazy danych do uzupełniania kodu. Version %1 Wersja %1 Cannot launch Linguist NewImplementation New Implementation Tworzenie nowej implementacji Class Name : Nazwa klasy: File Name : Nazwa pliku: Location : Lokalizacja: ... ... &Ok &Ok C&ancel &Anuluj NewProject New project creation Tworzenie nowego projektu Parent project : Projekt nadrzędny: Project name : Nazwa projektu: Location : Lokalizacja: ... ... Project creation on : Ścieżka projektu: OK Ok Cancel Anuluj Template Szablon: Application with Dialog aplikacja z oknem dialogowym Application with Main Window aplikacja z oknem głównym Properties Właściwości: Version Wersja: Debug Version uruchomieniowa Release Version produkcyjna Sub-directories Podkatalogi: Dialogs: Widgety: Executable: Pliki wykonywalne: ui ui bin bin sources: Źródła: Objects: Pliki pośrednie: src src build build Inheritance subclassing Tworzenie podklas: Object name: Nazwa klasy: File name: Nazwa pliku: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Okno dialogowe:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Podklasa:</span></p></body></html> Empty or master project pusty lub główny projekt NewProjectImpl Choose the project directory Wybierz katalog projektu The directory "%1" cannot be created Próba utworzenia katalogu "%1" nie powiodła się Cancel Anuluj The project cannot be created Próba utworzenia nowego projektu nie powiodła się Project file "%1" already exists Projek "%1" już istnieje The directory "%1" already exists. Do you want to create project anyway? Katalog "%1" już istnieje. Czy chesz mimo tego kontynuować? NewVariable Dialog OK Ok Cancel Anuluj Qt Variables Zmienna Qt: User Variable Zmienna użytkownika: Variable : Nazwa: New Variable : Nowa zmienna: Operator : Operator: = = += += -= -= *= *= ~= ~= OpenFile Open File in Project Otwieranie pliku z projektu OK Ok Cancel Anuluj Options Options Zmiana ustawień General Główne Prompt before quit pytaj przed wyjściem Show classes explorer pokaż przeglądarkę klas Interval between updates: Aktualizuj przeglądarkę co: seconds sek. Editor Edytor Font: Font: End of line Kodowanie końców linii: Tab size Szerokość tabulatora: Current line background Tło bieżącej linii: Text background Tło tekstu: Default Domyślne Unix Unix Dos/Windows DOS/Windows Replace Tab by spaces zamieniaj tabulatory na spacje ... ... options Ustawienia: Line numbers numery linii Syntax highlighting Podświetlanie składni Auto-Brackets automatyczne nawiasy Selection border podświetlaj krawędź zaznaczenia Complete Code uzupełnianie kodu Autoindent automatyczne wcięcia Function/method names : Nazwy funkcji i metod: Preprocessor : Dyrektywy preprocesora: Qt words : Słowa kluczowe i klasy Qt: Keywords : Słowa kluczowe: Single comments : Komentarze jednoliniowe: Multiline comments : Komentarze wieloliniowe: Quotation strings : Napisy: Default projects directory: Domyślny katalog projektów: Matching ( and { podświetlaj pasujące ( oraz { User plugins directory: Katalog z wtyczkami użytkownika: Save all before build zapisz wszystko przed budowaniem Automatic compilation automatyczna kompilacja Qt include directory: Katalog z plikami nagłówkowymi Qt: Qt documentation directory: Katalog z dokumentacją Qt: Make extra parameters: Dodatkowe parametry dla make'a: Reload last project when the application starts przeładuj projekt po uruchomieniu programu Close button in each tab (does not work with all styles) wyświetlaj przycisk "Zamknij" przy każdej zakładce (nie działa z niektórymi stylami) Display editor toolbars wyświetlaj paski narzędziowe edytora Display white spaces wyświetlaj białe znaki Files encoding: Kodowanie plików: Text color Kolor tekstu: Right margin line Prawy margines Column: Kolumna: Auto-Comments Automatyczne komentarze <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hide Find/Replace panels after Ukryj panele Znajdź/Zamień po sec. sek. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+kliknięcie = Idź do definicji, Meta+kliknięcie Idź do deklaracji OptionsImpl Choose the project directory Wybierz katalog projektu Param Program parameters Zmiana parametrów programu Run with these arguments: Uruchamiaj z tymi parametrami: Working directory (leave empty to use project directory): Katalog roboczy (zostaw pusty, aby użyć katalogu projektu): ... ... Environment variables (NAME=value): Zmienne środowiskowe (NAZWA=wartość): Name Nazwa Value Wartość &Edit &Edytuj &Add Dod&aj &Delete &Usuń &Sort &Sortuj &Default &Domyślne &OK &Ok &Cancel &Anuluj ParametersImpl Choose the project location Wybierz lokalizację projektu Cancel Anuluj The variable "%1" already exists. Zmienna "%1" jest już zdefiniowana. ProjectManager Save project changes ? Czy zapisać zmiany w projekcie? Yes Tak No Nie Cancel Anuluj Forms: Widget bazowy: Unable to create file. Próba utworzenia pliku nie powiodła się. Ok Ok Sub-project creation Tworzenie podprojektu Sub-Projects Podprojekty Sub-projects Podprojekty Headers Pliki nagłówkowe Sources Pliki z implementacją Dialogs Widgety Translations Tłumaczenia Resources Zasoby Project parsing Parsowanie projektu New name: Nowa nazwa: The kind of the new and the old filename is different ! Typy nowego i starego spliku różnią się! Rename Zmień nazwę The file already exists in directory. Plik już istnieje w katalogu. The file already exists. Plik już istnieje. This file is not permitted. Ten plik nie jest dozwolony. Unable to rename the file to "%1" Próba zmiany nazwy pliku "%1" nie powiodła się The only available version for "%1" is %2 Jedyną dostępną wersją dla "%1" jest %2 Run on %1 Uruchom w %1 Cannot remove the main project. Próba usunięcia głównego projektu nie powiodła się. Do you want to remove "%1" from the project ? Czy chcesz usunąć "%1" z projektu? File not found: "%1" Plik nie został znaleziony "%1" ProjectPropertie Dialog Configuration Konfiguracja General : Główne: Version Wersja: build_all buduj w obu wersjach debug uruchomieniowa release produkcyjna debug_and_release uruchomieniowa i produkcyjna Warnings Ostrzeżenia: warn_off wyłączone warn_on włączone Qt Libraries Biblioteki Qt: core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support Advanced Options Opcje zaawansowane: app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions exceptions lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt resources resources rtti rtti staticlib staticlib stl stl thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Variables Zmienne Variable : Zmienna: ... ... Values : Wartości: Project Template Szablon projektu: subdirs podkatalogi lib biblioteka app aplikacja Project or Scope : Projekt lub zakres: OK Ok Cancel Anuluj Default directories Domyślne katalogi: Dialogs: Widgety: Sources: Źródła: qtestlib qtestlib Advanced options Opcje zaawansowane Free CONFIG variables : Dowolne wpisy w CONFIG: script script webkit webkit phonon phonon xmlpatterns xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl New Value: Nowa wartość: delete spaces or put quotes. usuń spacje lub wstaw cudzysłowy. Modify Modyfikuj Cancel Anuluj Choose the sources location Wybierz lokalizację źródeł Choose the dialogs location Wybierz lokalizację widgetów Properties of %1 Właściwości %1 The spaces aren't correctly parsed by qmake qmake nie parsuje poprawnie spacji A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nowa wartoś nie może wynosić "QT", "CONFIG" ani "TEMPLATE" QObject Unable to start Assistant ! Próba uruchomienia Qt Assistant nie powiodła się! Loading: Wczytywanie: Interface translation Tłumaczenie interfejsu Environment control Sprawdzanie środowiska Files on editor Pliki w edytorze Main Window creation Tworzenie głównego okna Unable to establish a database connection. Próba ustanowienia połączenia z bazą danych nie powiodła się. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop wymaga sterownika SQLite. Przeczytaj dokumentację sterowników SQL dla Qt, by dowiedzieć się jak go zbudować. Current project parsing Parsowanie projektu Plugins Wtyczki Unable to start Designer ! Próba uruchomienia Qt Designer nie powiodła się! Registers Form Rejestry Name Nazwa Value Wartość Apply Zastosuj ReplaceWidget Form Rejestry find: znajdź: Replacement: Zamiennik: &Replace Za&mień Previous Poprzedni Next Następny Case Sensitive Rozróżniaj wielkość liter Whole words Całe wyrazy Prompt Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku Shortcuts Configure Shortcuts Konfiguracja skrótów Action Akcja Shortcut Skrót Default Domyślne OK Ok Cancel Anuluj Subclassing Qt Designer Form Subclassing Tworzenie podklasy widgeta &New... &Nowa... &Create U&twórz C&ancel &Anuluj Class Na&me: Nazwa &klasy: &File Name: Nazwa &pliku: &Location: &Lokalizacja: Filter &by: &Filtruj po: SubclassingImpl Choose the file location Wybierz lokalizację pliku &Update Zakt&ualizuj C&reate Utwó&rz (.h and .cpp) (.h oraz .cpp) TabWidget Close Tab Zamknij zakładkę Close Other Tabs Zamknij pozostałe zakładki Close All Tabs Zamknij wszystkie zakładki TextEdit Cancel Anuluj Yes Tak No Nie Cut Wytnij Copy Kopiuj Paste Wklej Selection Indent Zwiększ wcięcie zaznaczonego obszaru Selection Unindent Zmniejsz wcięcie zaznaczonego obszaru Select All Zaznacz wszystko Find... Znajdź... Toggle Bookmark Przełącz zakładkę Toggle Breakpoint Przełącz pułapkę The file "%1" could not be loaded. Próba wczytania pliku "%1" nie powiodła się. Save "%1" Czy zapisać "%1"? Unable to save %1 Próba zapisania %1 nie powiodła się Goto Implementation Przejdź do implementacji Goto Declaration Przejdź do deklaracji The Qt database building is in progress. Try to complete code later. Trwa tworzenie bazy danych o Qt. Spróbuj uzupełnić kod później. Reached end of page, continued from top Osiągnięto koniec pliku, kontynuacja od początku ToolsControl External Tools Konfiguracja narzędzi zewnętrznych qmake: qmake: make: make: gdb: gdb: ctags: ctags: linguist: Qt Linguist: lupdate: lupdate: lrelease: lrelease: designer: Qt Designer: ... ... &Test &Sprawdź Please enter the path to the external programs: Wpisz ścieżki do narzędzi zewnętrznych: Check environment on start sprawdzaj środowisko przy starcie assistant: Qt Assistant: ToolsControlImpl Ctags was detected in path %1, but this version is too old. Program ctags został znaleziony w %1, ale jego wersja jest zbyt stara. Ok Ok Please select the program Wybierz program TreeClasses Open Declaration Otwórz deklarację Open Implementation Otwórz implementację Refresh contents Odśwież zawartość Add Method... Dodaj metodę... Add Variable... Dodaj zmienną... Add get/set Methods... Wygeneruj akcesor i modyfikator... TreeProject Add sub-project... Dodaj podprojekt... Add New Item... Dodaj nowy plik... Add Scope... Dodaj zakres... Add Existing Files... Dodaj istniejące pliki... Open in Linguist Otwórz w Qt Linguist Refresh translation files Odśwież Build release translation files Skompiluj Open in Designer Otwórz w Qt Designer Dialog Subclassing... Utwórz podklasę widgeta... Dialog Preview Podgląd widgeta Open Otwórz Show As Styl wyświetlania Normal Normalny Krawek Krawek Add New Class... Dodaj klasę... Rename... Zmień nazwę... Properties of %1... Właściwości %1... Remove from project Usuń z projektu Warning Dialog Uwaga! TextLabel OK Ok Don't show anymore Nie pokazuj więcej tego ostrzeżenia qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Czech.ts.svn-base0000444000175000017500000050132011362261066026661 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> OK OK <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Hlavní Vývojář: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Doplňování kódu: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Vývojář: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Vývojář: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Vývojář: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Vývojář: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Vývojář: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Český překlad: Tomáš Hanák &lt;<a href="mailto:tomas.hanak@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">tomas.hanak@gmail.com</span></a><a href="mailto:tomas.hanak@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Sestavení instalací: Daniel Rocher &lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><br /><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Přidat existující soubory Project or Scope : Projekt nebo kontext: File : Soubory: Copy files here: Kopírovat soubory sem: ... OK OK Cancel Storno AddExistantImpl Enter a filename. Zadejte jméno souboru. Cancel Storno Enter a location destination. Vyberte složku, kam kopírovat. Choose a directory Vyberte složku Choose the file to add Vyberte soubor, který chcete přidat The file %1 doesn't exist. Soubor %1 neexistuje. Unable to copy %1 Nelze kopírovat %1 Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Soubory (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Přidat novou položku Files Soubory Translation Překlad Resources Resource Dialog Dialog Header Hlavičkový soubor Sources Zdrojový soubor Project or Scope: Projekt nebo kontext: File Name : Jméno souboru: Location : Umístění: newfile.cpp newfile.cpp ... OK OK Cancel Storno AddNewClass Add New Class Přidat novou třídu OK OK Cancel Storno Inheritance Dědičnost Inherits another class Dědit z jiné třídy Ancestor: Předek: Ancestor's include filename: Jméno souboru předka: Scope: Viditelnost: Filenames Názvy souborů Header filename: Jméno hlavičkového souboru: Implementation filename: Jméno zdrojového souboru: Location : Umístění: ... Project or Scope: Projekt nebo kontext: Class name: Jméno třídy: Constructor arguments: Argumenty konstruktoru: Virtual destructor Virtuální destruktor AddNewClassImpl Choose the file location Vyberte umístění souboru Cancel Storno Unable to create file. Nelze vytvořit soubor. The file "%1" already exists. Soubor "%1" už existuje. AddNewClassMethod Add New Method Přidat novou metodu Method Name: Jméno metody: Return type: Návratový typ: Parameters: Parametry: Scope: Kontext: Inline Virtual Static Pure OK OK Cancel Storno AddNewClassMethodImpl Cancel Storno Add New Method in class %1 Přidat novou metodu do třídy %1 An implementation file is required. Je požadován nějaký zdrojový soubor. %1 already exists in class %2. %1 už existuje ve třídě %2. AddNewClassVariable Add New Variable Přidat novou proměnnou Create get/set methods Vytvořit get/set metody inline set method set metoda get method get metoda OK OK Cancel Storno Variable Name: Jméno proměnné: Type: Typ: Scope: Viditelnost: AddNewClassVariableImpl Cancel Storno %1 already exists in class %2. %1 už existuje ve třídě %2. AddNewImpl Choose the file location Vyberte umístění souboru The suffix of the file is not correct. Přípona souboru je nesprávná. Cancel Storno header hlavičkový soubor Yes Ano No Ne Also create the file %1 in same location ? Vytvořit soubor %1 ve stejném adresáři ? source zdrojový soubor AddScope Add New Scope Přidat nový kontext New Scope Nový kontext win32 debug unix release mac other jiný Project or Scope : Projekt nebo kontext: OK OK Cancel Storno AddSetGet Add get/set methods Přidat get/set metody OK OK Cancel Storno Create get/set methods for Vytvořit get/set metody pro inline set method set metoda get method get metoda AddSetGetImpl Cancel Storno BreakpointCondition Dialog Dialog Condition : Podmínka: is true (breakpoint) je splněna (breakpoint) has changed (watchpoint) je změněna (watchpoint) Build Update project Aktualizace projektu Clean Project Vyčištění projektu Build Sestavování Build stopped Sestavování zastaveno Compilation of %1... Kompilace %1... Debug Running... Běží... Exited normally Ukončeno normálně Debug... Ladění... Debug exited Ladění ukončeno Error: Unable to evaluate value Chyba: Není možné určit hodnotu Exited with error code %1 Ukončeno s chybou %1 Editor Refresh classes and methods lists Obnovit seznamy tříd a metod What do you want to do? Co chcete provést? Overwrite Přepsat Reload File Znovu nahrát The file "%1" was modified outside editor. Soubor "%1" byl upraven mimo editor. Open %1 Otevřít %1 %1 replacement(s) made. Provedeno %1 nahrazení. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK OK Cancel Storno Choose program to Debug : Vyberte program k ladění: Don't ask question anymore Přístě se už nedotazovat FindFile Find in Files Najít v souborech Pattern: Dotaz: Case Sensitive Rozlišovat velikost Whole words Celá slova Recursive Rekurzivně *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Soubory: ... Find in: Hledat v: &Find &Hledat &Close &Zavřít Replace found text Nahradit nalezený text Replace with: Nahradit: FindFileImpl Choose a directory Vyberte složku &Find &Hledat &Stop &Stop Line Řádek File Soubor Cannot open temporary file %1 Nelze otevřít dočasný soubor %1 FindWidget Form Formulář Previous Předchozí Next Další Case Sensitive Rozlišovat velikost Whole words Celá slova Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku GotoLine Goto Line Jít na řádek <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Jít na řádek:</span></p></body></html> OK OK Cancel Storno InitCompletion Unable to launch %1 Nelze spustit %1 Unable to open %1 Nelze otevřít %1 LineNumbers Toogle Bookmark Vložit záložku Toogle Breakpoint Vložit zarážku Breakpoint Condition... Podmínka zarážky... LogBuild error chyba warning varování error Compiler message chyba undefined reference to Linker message nedefinovaná reference na warning Compiler message varování Main QDevelop QDevelop &? &? &Debug &Ladění &Build &Sestavit &Edit Ú&pravy Plugins Pluginy &View &Zobrazení &Project &Projekt &File &Soubor Outputs Výstupy Build Sestavování Name Jméno Type Typ Address Adresa Value Hodnota ... Project Explorer Projekt explorer Files Soubory Classes Třídy Files toolbar Lišta souborů Edit Toolbar Lišta editoru &New Project... &Nový projekt... &New File... &Nový soubor... New File Nový soubor &File... &Soubor... &Open Project... &Otevřít projekt... &Close All Files &Zavřít všechny soubory &Save File Uložit &soubor Ctrl+S &Quit &Konec Undo Zpět Ctrl+Z Redo Opakovat Ctrl+Shift+Z Ctrl+X Ctrl+C Ctrl+V Select All Vybrat vše Ctrl+A Ctrl+F Ctrl+R Add New Item Přidat novou položku Ctrl+N Add Existing Files Přidat existující soubory New Folder Nová složka Project Properties Vlastnosti projektu Clean Vyčistit Rebuild Sestavit znovu Compile File Kompilovat soubor Shift+F7 Start Program Spustit program Shift+F5 Step Into Krok dovnitř F11 Step Over Krok přes F10 Calls Stack Zásobník volání &Open... &Otevřít... Ctrl+O F3 Stop Stop F6 Breakpoints... Zarážky... Indent selection Zvětšit odsazení Tab Unindent selection Zmenšit odsazení Shift+Tab F1 F7 Save Project As... Uložit projekt jako... Shift+F11 Ctrl+W Alt+Right Alt+Left Shift+F12 Esc F9 Ctrl+G Ctrl+D Comment Zakomentovat Uncomment Zrušit komentář Complete Code Dokončit kód Ctrl+Space Toggle &Bookmark Vložit/zrušit &záložku Toggle Bookmark Vložit/zrušit záložku Ctrl+B Clear &All Bookmarks Vym&azat všechny záložky Ctrl+F2 F2 Shift+F2 Shift+F3 Goto matching bracket Najít párovou závorku Ctrl+[ Foo Foo &Print... &Tisk... Ctrl+Shift+F Alt+Shift+O &Bookmarks &Záložky &Last Projects Pos&lední projekty B&uild &Sestavení Las&t Files Posle&dní soubory &Tools &Nástroje &Plugins settings Nastavení &pluginů Ed&itors Ed&itory 1 Build and Debug Toolbar Lišta sestavování a ladění Call Stacks Zásobník volání Registers Registry Save File &as... Uložit soubor j&ako... Save A&ll U&ložit vše &Undo &Zpět &Redo &Opakovat Cu&t Vyjmou&t &Copy &Kopírovat &Paste &Vložit &Find... &Najít... &Replace... Nah&radit... &Find in Files... &Najít v souborech... Add New &Item... Přidat novou &položku... Add Existing &Files... Přidat existující &soubory... Project &Properties... Vlastnosti &projektu... &Clean &Vyčistit &Rebuild Sestavit &znovu S&tart Program Spus&tit program Step &Into Krok &dovnitř Step O&ver Krok &přes &Calls Stack &Zásobník volání &Options... Nastavení pr&ostředí... &Parameters... &Parametry... &About... O progr&amu... About &Qt... O &Qt... Find &Next Najít &další &Stop Za&stavit &Stop Build Přerušit &sestavování &Help Current Qt Word &Nápověda pro stávající klíčové slovo Qt &Reset Executables List &Save Project &Uložit projekt C&lose Project &Zavřít projekt Add &Scope... Přidat &kontext... Step &Out Krok &ven &Close Current Editor &Zavřít stávající editor &Next Tab &Další panel &Previous Tab &Předchozí panel &Switch to Header/Sources Přejít na hlavičkový/zdrojový &soubor Set &Focus to Editor Předat &fokus editoru Toggle &breakpoint Vložit/zrušit &zarážku Goto &Methods List Přejít na seznam &metod Configure &Shortcuts... Nastavit klávesové &zkratky... &Goto Line... &Jít na řádek... Toggle Co&mments Vložit/zrušit ko&mentář E&xternal Tools... E&xterní nástroje... &Next Bookmark &Další záložka &Previous Bookmark &Předchozí záložka Find Pr&evious Najít &předchozí Goto matching &bracket Jít na odpovídající &závorku Add New &Class... Přidat novou &třídu... Open F&ile in project... Otevřít so&ubor v projektu... Goto &Implementation Jít k &implementaci Goto &Declaration Jít k &deklaraci &Rebuild Qt classes database Aktualizovat &databázi Qt tříd Execute &qmake Spustit &qmake Show Maximized Ukázat maximalizované &Editor mode Mód &editoru Ctrl+E Next Warning/Error Další varování/chyba F4 Previous Warning/Error Předchozí varování/chyba Shift+F4 Clear all Warnings/Errors Vymazat všechny varování/chyby &Toolbars Lišty nás&trojů Dock windows Dokovací okna Local Variables Lokální proměnné Other Variables Ostatní proměnné Find in files Najít v souborech Full view Plný pohled Minimal view Minimální pohled DocksWindow Dokovací okna Dock Windows Dokovací okna New submenu > Nové podmenu > a En&force qmake mode Vy&nutit qmake mód &Debug mode &Debug mód &Release mode &Release mód &Forget last used mode &Zapomenout poslední použitý mód MainImpl Choose the file to create Vyberte soubor, který chcete vytvořit Files Soubory Cancel Storno Do you want to quit QDevelop ? Chcete ukončit QDevelop? Yes Ano No Ne Choose a file to open Vyberte soubor, který chcete otevřít Sources Zdrojové soubory Projects Projekty Texts Textové soubory All Files Všechny soubory Choose a project to open Vyberte projekt, který chcete otevřít Files (*.cpp *.h *.txt *.* *) Soubory (*.cpp *.h *.txt *.* *) Stop Stop Build finished without error Sestavování dokončeno bez chyb Build finished with Sestavování dokončeno s error(s) chybami (chybou) and a warning(s) varováním(i) Start Start The project has been modified, do you want to save your changes ? Projekt byl pozměněn, chcete své změny uložit? Stop debugging ? Ukončit ladění? run Build. Proveďte jeho sestavení. Ok OK Shift+F5 F5 Abort Přerušit Stopping is not possible under Windows. Put breakpoints. Přerušení není po Windows možné. Použijte zarážky. Continue Pokračovat &%1 %2 &%1 %2 New Variable: Nová proměnná: The file "%1" already exists in directory. Soubor "%1" už v adresáři existuje. Unable to create %1 Nelze vytvořit %1 The project %1 doesn't exist. Projekt %1 neexistuje. Properties of %1... Vlastnosti %1... The program doesn't exist, Program neexistuje, The variable "%1" already exists. Proměnná "%1" už existuje. The Qt include directory doesn't exist, You can change in Options dialog. Adresář s hlavičkovými soubory Qt neexistuje. Můžete jej změnit v dialogu s nastavením prostředí. The Qt database building is already in progress. Databáze Qt tříd se právě vytváří. The Qt classes database build is ended. Vytváření databáze Qt tříd bylo dokončeno. Version %1 Verze %1 Cannot launch Linguist NewImplementation New Implementation Nová implementace Class Name : Jméno třídy: File Name : Jméno souboru: Location : Umístění: ... &Ok &OK C&ancel &Storno NewProject New project creation Vytvoření nového projektu Template Šablona Application with Dialog Aplikace s dialogem Application with Main Window Aplikace s hlavním oknem Properties Vlastnosti Parent project : Rodičovský projekt: Project name : Název projektu: Location : Umístění: ... Project creation on : Vytvořit projekt v: Version Verze Debug Version Debug verze Release Version Release verze OK OK Cancel Storno Sub-directories Podadresáře Dialogs: Dialogy: Executable: Spustitelné: ui bin sources: Zdrojové soubory: Objects: Přeložené soubory: src build Inheritance subclassing Subclassing Object name: Jméno objektu: File name: Jméno souboru: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> Empty or master project Prázdný nebo hlavní projekt NewProjectImpl Choose the project directory Vyberte složku pro projekt The directory "%1" cannot be created Adresář "%1" nemůže být vytvořen Cancel Storno The project cannot be created Nelze vytvořit projekt Project file "%1" already exists Projekt "%1" již existuje The directory "%1" already exists. Do you want to create project anyway? Adresář "%1" již existuje. Chcete i přesto projekt vytvořit? NewVariable Dialog Dialog OK OK Cancel Storno Qt Variables Qt proměnná User Variable Uživatelská proměnná Variable : Proměnná: New Variable : Nová proměnná: Operator : Operátor: = += -= *= ~= OpenFile Open File in Project Otevřít soubor v projektu OK OK Cancel Storno Options Options Nastavení prostředí General Obecné Prompt before quit Zeptat se před ukončením Show classes explorer Zobrazit prohlížeč tříd Interval between updates: Interval mezi aktualizacemi: seconds sekund Default projects directory: Výchozí složka s projekty: User plugins directory: Složka s vlastními pluginy: ... Editor Editor options Volby Matching ( and { Odpovídající ( a { Complete Code Doplňování kódu Selection border Okraj pro výběr řádku Line numbers Čísla řádků Syntax highlighting Zvýrazňování syntaxe Autoindent Automatické odsazování Auto-Brackets Automaticky závorky Font: Font: End of line Konec řádku Tab size Velikost tabulátoru Current line background Pozadí aktuálního řádku Text background Pozadí textu Default Výchozí Unix Unix Dos/Windows Dos/Windows Replace Tab by spaces Nahradit tabulátor mezerami Function/method names : Názvy funkcí/metod: Preprocessor : Preprocessor: Qt words : Qt klíčová slova: Keywords : Klíčová slova: Single comments : Jednoduché komentáře: Multiline comments : Víceřádkové komentáře: Quotation strings : Řetězce: Save all before build Uložit vše před sestavováním Automatic compilation Automaticky překládat Qt include directory: Adresář s hlavičkovými soubory Qt: Qt documentation directory: Adresář s dokumentací Qt: Make extra parameters: Extra parametry pro make: Reload last project when the application starts Otevřít poslední projekt při spuštění aplikace Close button in each tab (does not work with all styles) Uzavírací tlačítko na každém panelu (nefunguje se všemi styly) Display editor toolbars Zobrazit lištu nástrojů editoru Display white spaces Zobrazit bílé znaky Files encoding: Znaková sada: Text color Barva textu Right margin line Pravá okrajová linka Column: Sloupec: Auto-Comments Automatické komentáře <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Víceřádkový</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* komentář</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Jednořádkový komentář</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "mezi uvozovkami";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Zalamování slov Hide Find/Replace panels after Skrýt panely Hledat/Nahradit za sec. sekund Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+klik = Jít k implementaci, Meta+klik = Jít k declaraci OptionsImpl Choose the project directory Vyberte složku pro projekt Param Program parameters Parametry programu Run with these arguments: Spustit s těmito argumenty: Working directory (leave empty to use project directory): Pracovní složka (ponechte prázdné, chcete-li použít složku s projektem): ... Environment variables (NAME=value): Proměnné prostředí (JMÉNO=hodnota): Name Jméno Value Hodnota &Edit &Upravit &Add &Přidat &Delete &Smazat &Sort Se&třídit &Default &Výchozí &OK &OK &Cancel &Storno ParametersImpl Choose the project location Vyberte složku pro projekt Cancel Storno The variable "%1" already exists. Proměnná "%1" už existuje. ProjectManager Project parsing Analýza projektu Save project changes ? Uložit změny v projektu ? Yes Ano No Ne Cancel Storno Forms: Formuláře: Unable to create file. Nelze vytvořit soubor. Ok OK Sub-project creation Vytvoření podprojektu Sub-Projects Podprojekty New name: Nové jméno: The kind of the new and the old filename is different ! Přípona nového a starého souboru se nehodují ! Rename Přejmenovat Sub-projects Podprojekty Headers Hlavičkové soubory Sources Zdrojové soubory Dialogs Dialogy Translations Překlady Resources Resource soubory The file already exists in directory. Soubor už v adresáři existuje. The file already exists. Soubor už existuje. This file is not permitted. Tento soubor není povolen. Unable to rename the file to "%1" Soubor nelze přejmenovat na "%1" The only available version for "%1" is %2 Jediná dostupná verze pro "%1" je %2 Run on %1 Spustit %1 Cannot remove the main project. Nelze odebrat hlavní projekt. Do you want to remove "%1" from the project ? Chcete odebrat "%1" z projektu? File not found: "%1" Soubor nenalezen: "%1" ProjectPropertie Dialog Dialog Project Template Šablona projektu app lib subdirs Project or Scope : Projekt nebo kontext: Default directories Výchozí složky Dialogs: Dialogy: ... Sources: Zdrojové soubory: Configuration Konfigurace General : Obecné: Version Verze build_all debug release debug_and_release Warnings warn_off warn_on Qt Libraries Qt knihovny core network sql xml gui opengl svg qt3support Advanced Options Rozšířené volby app_bundle assistant console designer dll exceptions lib_bundle no_lflags_merge plugin ppc qaxcontainer qaxserver qt qtestlib resources rtti staticlib stl thread uic3 uitools windows x11 x86 Variables Proměnné Variable : Proměnná: Values : Hodnoty: OK OK Cancel Storno Advanced options Rozšířené volby Free CONFIG variables : Další CONFIG proměnné: script webkit phonon xmlpatterns link_pkgconfig ProjectPropertieImpl New Value: Nová hodnota: delete spaces or put quotes. Vymažte mezery nebo vložte do uvozovek. Modify Upravit Cancel Storno Choose the sources location Vyberte složku pro zdrojové soubory Choose the dialogs location Vyberte složku pro soubory s dialogy Properties of %1 Vlastnosti %1 The spaces aren't correctly parsed by qmake Mezery nejsou zpracovávány korektně pomocí qmake A new variable can not be "QT", "CONFIG" or "TEMPLATE" Nová proměnná nemůže být "QT", "CONFIG" nebo "TEMPLATE" QObject Unable to start Assistant ! Nelze spustit Assistant ! Loading: Nahrávám : Interface translation Překlad rozhraní Environment control Ovládání prostředí Files on editor Soubory v editoru Plugins Pluginy Main Window creation Vytvoření hlavního okna Unable to establish a database connection. Nelze se spojit s databází. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. QDevelop potřebuje SQLite. Jak toho dosáhnout se dočtěte si v dokumentaci k Qt SQL driveru. Current project parsing Analýza stávajícího projektu Unable to start Designer ! Nelze spustit Designer ! Registers Form Formulář Name Jméno Value Hodnota Apply Použít ReplaceWidget Form Formulář find: Najít: Replacement: Nahradit: &Replace Nah&radit Previous Předchozí Next Další Case Sensitive Rozlišovat velikost Whole words Celá slova Prompt Dotazovat se Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku Shortcuts Configure Shortcuts Nastavit klávesové zkratky Action Akce Shortcut Klávesová zkratka Default Výchozí OK OK Cancel Storno Subclassing Qt Designer Form Subclassing Subclassing formulářů Qt Designeru Class Na&me: Jméno &třídy: &New... &Nová... &File Name: &Jméno souboru: &Location: &Umístění: Filter &by: &Filtrovat: &Create &Vytvořit C&ancel &Storno SubclassingImpl &Update &Aktualizovat C&reate &Vytvořit (.h and .cpp) (.h a .cpp) Choose the file location Vyberte umístění souboru TabWidget Close Tab Zavřít panel Close Other Tabs Zavřít ostatní panely Close All Tabs Zavřít všechny panely TextEdit Cancel Storno Yes Ano No Ne Cut Vyjmout Copy Kopírovat Paste Vložit Selection Indent Zvětšit odsazení Selection Unindent Zmenšit odsazení Select All Vybrat vše Find... Najít... Toggle Bookmark Vložit/zrušit záložku Toggle Breakpoint Vložit/zrušit zarážku The file "%1" could not be loaded. Soubor "%1" nelze nahrát. Save "%1" Uložit "%1" Unable to save %1 Nelze uložit %1 Goto Implementation Jít k implementaci Goto Declaration Jít k deklaraci The Qt database building is in progress. Try to complete code later. Qt databáze se právě vytváří. Zkuste použít doplňování kódu později. Reached end of page, continued from top Dosažen konec souboru, pokračuje se od začátku ToolsControl External Tools Externí nástroje Check environment on start Zkontrolovat po spuštění &Test &Test Please enter the path to the external programs: Prosím, zadejte cestu k externím programům: ctags: ctags: ... linguist: linguist: assistant: assistant: gdb: gdb: designer: designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: ToolsControlImpl Ok OK Ctags was detected in path %1, but this version is too old. Ctags byl nalezen v %1, ale tato verze je příliš stará. Please select the program Prosím vyberte program TreeClasses Open Declaration Otevřít hlavičkový soubor Open Implementation Otevřít zdrojový soubor Add Method... Přidat metodu... Add Variable... Přidat proměnnou... Add get/set Methods... Přidat get/set metody... Refresh contents Obnovit TreeProject Add sub-project... Přidat podprojekt... Add New Item... Přidat novou položku... Add Scope... Přidat kontext... Add New Class... Přidat novou třídu... Add Existing Files... Přidat existující soubory... Open in Linguist Otevřít pomocí Linquist Refresh translation files Aktualizovat soubory s překladem Build release translation files Přeložit soubory s překladem Open in Designer Otevřít pomocí Designer Dialog Subclassing... Subclassing dialogu... Dialog Preview Náhled na dialog Open Otevřít Rename... Přejmenovat... Show As Zobraz jako Normal Normálně Krawek Krawek Properties of %1... Vlastnosti %1... Remove from project Odebrat z projektu Warning Dialog Dialog TextLabel OK OK Don't show anymore Přístě už nezobrazovat qdevelop-v0.28/resources/translations/.svn/text-base/QDevelop_Hungarian.ts.svn-base0000444000175000017500000050322311362261066027545 0ustar jlbrdjlbrd About QDevelop QDevelop <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:29pt; font-weight:600;">QDevelop</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Version</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:MS Shell Dlg 2; font-size:8pt;"><span style=" font-size:10pt;">Verzió:</span></p></body></html> OK Rendben <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Main Developer: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Code completion: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Developer: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Developer: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Developer: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Packager: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><title>QDevelop</title><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><span style=" font-size:10pt;">Open Source Edition - Copyright (C)2006-2009</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;">Fő fejlesztő: Jean-Luc Biord &lt;<a href="mailto:jl.biord@free.fr"><span style=" text-decoration: underline; color:#0000ff;">jl.biord@free.fr</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt; color:#000000;"Kódkiegészítés: Frederic Julian &lt;<a href="mailto:fred.julian@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">fred.julian@gmail.com</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Fejlesztő: Diego Iastrubni </span>&lt;<a href="mailto:diegoiast@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">elcuco@kde.org</span></a><span style=" color:#000000;">&gt;</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><span style=" color:#000000;">Fejlesztő: Trent Zhou </span>&lt;<a href="mailto:trent.zhou@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">trent.zhou@gmail.com</span></a>&gt;<br /><span style=" color:#000000;">Fejlesztő: Daniel Kacer </span>&lt;<a href="mailto:kacer@aceslovakia.sk"><span style=" text-decoration: underline; color:#0000ff;">kacer@aceslovakia.sk</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Fejlesztő: Ralf Jung &lt;<a href="mailto:ralfjung-e@gmx.de"><span style=" text-decoration: underline; color:#0000ff;">ralfjung-e@gmx.de</span></a>&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;">Fejlesztő: Dmitrij "Divius" Tantsur &lt;<a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#0000ff;">divius.inside@gmail.com</span></a><a href="mailto:divius.inside@gmail.com"><span style=" text-decoration: underline; color:#000000;">&gt;</span></a><br /><span style=" color:#000000;">Csomagkészítő: Daniel Rocher </span>&lt;<a href="mailto:daniel.rocher@adella.org"><span style=" text-decoration: underline; color:#0000ff;">daniel.rocher@adella.org</span></a>&gt;<br /></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:10pt;"><a href="http://qdevelop.org"><span style=" text-decoration: underline; color:#0000ff;">http://qdevelop.org</span></a></p></body></html> AddExistant Add Existing Files Létező fájlok hozzáadása Project or Scope : Projekt vagy fordítási feladat hozzáadása: File : Fájl: Copy files here: Ide másold a fájlokat: ... ... OK Rendben Cancel Mégsem AddExistantImpl Enter a filename. Írd be a fájlnevet. Cancel Mégsem Enter a location destination. Írd be a cél elérési útját. The file %1 doesn't exist. A %1 fájl nem létezik. Unable to copy %1 Nem lehet másolni a %1 -t Choose a directory Válassz mappát Choose the file to add Vállaszd ki a hozzáadni kívánt fájlt Files (*.cpp *.h *.hpp *.ui *.qrc *.ts) Fájlok (*.cpp *.h *.hpp *.ui *.qrc *.ts) AddNew Add New Item Új elem hozzáadása Files Fájlok Translation Fordítás Resources Erőforrások Dialog Dialógus Header Fejléc Sources Források Project or Scope: Projekt vagy fordítási feladat: File Name : Féjl név: Location : Elérési út: newfile.cpp ujfajl.cpp ... ... OK Rendben Cancel Mégsem AddNewClass Add New Class Új osztály hozzáadása OK Rendben Cancel Mégsem Inheritance Inheritás Inherits another class Inheritál egy másik osztályt Ancestor: Előd: Ancestor's include filename: Előd fejléc fájlja: Scope: Fordítási feladat: Filenames Fájlnevek Header filename: Fejéc fájlneve: Implementation filename: Implementáció fájlneve: Location : Elérési út: ... ... Project or Scope: Projekt vagy feladat: Class name: Osztály név: Constructor arguments: Konstruktor argumentumai: Virtual destructor Virtuális destruktor AddNewClassImpl Choose the file location Vállaszd ki a fájlt The file "%1" already exists. A %1 fájl már létezik. Cancel Mégsem Unable to create file. Nem lehet a fájlt létrehozni. AddNewClassMethod Add New Method Új metódus hozzáadása Method Name: Metódus neve: Return type: Visszatérési értéke: Parameters: Paraméterek: Scope: Feladat: Inline Sorban Virtual Virtual Static Static Pure Pure OK Rendben Cancel Mégsem AddNewClassMethodImpl Add New Method in class %1 Új metódus hozzáadása a(z) %1 osztályhoz An implementation file is required. Implementációs fájl hiányzik. Cancel Mégsem %1 already exists in class %2. %1 már létezik a %2 osztályban. AddNewClassVariable Add New Variable Új változó hozzáadása Create get/set methods Get/set metódusok létrehozása inline sorban set method set metódus get method get metódus OK Rendben Cancel Mégsem Variable Name: Változó neve: Type: Típus: Scope: Feladat: AddNewClassVariableImpl Cancel Mégsem %1 already exists in class %2. %1 már létezik a %2 osztályban. AddNewImpl Choose the file location Vállaszd ki a fájlt The suffix of the file is not correct. A fájl kiterjesztése nem megfelelő. Cancel Mégsem header Fejléc source Forrás Also create the file %1 in same location ? Létrehozzak egy %1 fájlt is itt? Yes Igen No Nem AddScope Add New Scope Új feladatkör hozzáadása New Scope Új feladatkör win32 win32 debug debug unix unix release release mac mac other egyéb Project or Scope : Projekt vagy feladat: OK Rendben Cancel Mégsem AddSetGet Add get/set methods Get/set metódusok hozzáadása OK Rendben Cancel Mégsem Create get/set methods for Get/set metódusok létrehozása inline sorban set method set metódus get method get metódus AddSetGetImpl Cancel Mégsem BreakpointCondition Dialog Dialógus Condition : Feltétel: is true (breakpoint) ha igaz (töréspont) has changed (watchpoint) a watchpoint megváltozott Build Update project Projekt frissítése Clean Project Projekt takarítása Compilation of %1... %1 fordítása ... Build Build Build stopped A build megállítva Debug Running... Futtatás... Exited normally A program hiba nélkül leállt Debug... Hibakereső mód... Debug exited A program kilépett Error: Unable to evaluate value HIba: nem lehet a változó értékét meghatározni Exited with error code %1 Kilépett a következő hibakóddal %1 Editor Refresh classes and methods lists Osztályok és metódusok frissítése Open %1 %1 megnyitása The file "%1" was modified outside editor. A %1 módosult a programon kívül. What do you want to do? Mit szeretnél tenni? Overwrite Felülírás Reload File Újratöltés %1 replacement(s) made. %1 csere történt. The file "%1" disappeared from fisk. Recreate Close ExeChoice QDevelop QDevelop OK Rendben Cancel Mégsem Choose program to Debug : Válaszd ki a hibakereséshez a programot : Don't ask question anymore Ne kérdezze meg többé FindFile Find in Files Keresés a fájlokban Pattern: Minta: Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Recursive Rekurzívan *.cpp; *.h *.cpp; *.h *.ui; *.qrc; *.txt *.ui; *.qrc; *.txt Files: Fájlok: ... ... Find in: Keresés ebben: &Find &Keres &Close &Becsuk Replace found text A csere megfelelő szöveget talált Replace with: Csere erre: FindFileImpl Choose a directory Vállassz könyvtárat &Find &Keres &Stop &Megállít Line Sor File Fájl Cannot open temporary file %1 Nem tudom megnyitni az átmeneti fájlt %1 FindWidget Form Form Previous Előző Next Következő Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről GotoLine Goto Line Ugrás sorhoz <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Goto Line:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Ugrás sorhoz:</span></p></body></html> OK Rendben Cancel Mégsem InitCompletion Unable to launch %1 %1 futtatása sikertelen Unable to open %1 %1 megnyitása sikertelen LineNumbers Toogle Bookmark Könyvjelző ki-bekapcsolása Toogle Breakpoint Breakpoint ki-bekapcsolása Breakpoint Condition... Breakpoint feltétele... LogBuild error hiba warning igyelmeztetés error Compiler message hiba undefined reference to Linker message undefined reference to warning Compiler message figyelmeztetés Main QDevelop QDevelop &Edit &Szerkesztés &Bookmarks &Könyvjelzők &Debug &Hibakeresés &? &? &Project &Projekt &Last Projects &Legutóbbi projektek B&uild É&pítés &File &Fájl Las&t Files Legutóbb&i Fájlok &View &Nézet &Toolbars &Eszköztárak Dock windows Dokkolt ablakok &Tools &Eszközök &Plugins settings &Plugin beállítások Plugins Pluginok Ed&itors Sz&erkesztők Files toolbar Fájl eszköztár Edit Toolbar Szerkesztő eszköztár Build and Debug Toolbar Fordítási, és hibakeresési eszköztár Call Stacks Stack hívása Registers Regiszterek Build Építés Outputs Kimenetek Local Variables Helyi változók Name Név Type Típus Address Cím Value Érték Other Variables Egyéb változók ... ... Find in files Keresés a fájlokban Files Fájlok Classes Osztályok 1 1 &New Project... &Új projekt... &New File... &Új fájl... New File Új Fájl &File... &Fájl... &Open Project... &Projekt megnyitása... &Close All Files &Összes megnyitott fájl bezárása &Save File &Fájl mentése Ctrl+S Ctrl+S Save File &as... Mentés m&ásként... Save A&ll Mindent me&nt &Quit &Kilépés &Undo &Visszavonás Undo Visszavonás Ctrl+Z Ctrl+Z &Redo &Újra Redo Újra Ctrl+Shift+Z Ctrl+Shift+Z Cu&t Ki&vágás Ctrl+X Ctrl+X &Copy &Másolás Ctrl+C Ctrl+C &Paste &Beillesztés Ctrl+V Ctrl+V Select All Mindet kijelöl Ctrl+A Ctrl+A &Find... &Keres... Ctrl+F Ctrl+F &Replace... &Kicserél... Ctrl+R Ctrl+R &Find in Files... &Keresés a fájlokban... Ctrl+Shift+F Ctrl+Shift+F Add New &Item... Új elem &hozzáadása... Add New Item Új elem hozzáadása Ctrl+N Ctrl+N Add Existing &Files... Létező fájlok h&ozzáadása... Add Existing Files Létező fájlok hozzáadása New Folder Új mappa Project &Properties... Projekt t&ulajdonságai... Project Properties Projekt tulajdonságai &Clean &Takarít Clean Takarít &Rebuild &Újrabuild Rebuild Újrabuild Compile File Fájl fordítása Shift+F7 Shift+F7 S&tart Program P&rogram indítása Start Program Program indítása Shift+F5 Shift+F5 Step &Into Ugrás &ide Step Into Ugrás ide F11 F11 Step O&ver Át&ugrás Step Over Átugrás F10 F10 &Calls Stack &Stack hívása Calls Stack Stack hívása &Options... &Beállítások... &Parameters... &Paraméterek... &About... &A QDevelopról... About &Qt... A &Qt -ről... &Open... &Megnyitás... Ctrl+O Ctrl+O Find &Next Keresd a &következőt F3 F3 &Stop &Állj Stop Megállít F6 F6 Breakpoints... Breakpointok... &Stop Build &Build megállítása Indent selection Azonosak kijelölése Tab Fül Unindent selection Kijelölés megszűntetése Shift+Tab Shift+Tab &Help Current Qt Word &Súgó az adott Qt kifejezéshez F1 F1 &Reset Executables List &Binárisok listájának törlése Project Explorer Projekt nézőke &Build &Build F7 F7 &Save Project &Projekt mentése Save Project As... Projekt mentése másként... C&lose Project Projekt &bezárása Add &Scope... Feladat &hozzáadása... Step &Out Ki&ugrás Shift+F11 Shift+F11 &Close Current Editor &Aktuális szerkesztő bezárása Ctrl+W Ctrl+W &Next Tab &Következő fül Alt+Right Alt+Jobb &Previous Tab &Előző fül Alt+Left Alt+Bal &Switch to Header/Sources &Váltás a forrásokoz/headerekhez Shift+F12 Shift+F12 Set &Focus to Editor Fók&uszálj a szerkesztőre Esc Esc Toggle &breakpoint Break&point ki-bekapcsolása F9 F9 Goto &Methods List Ugrás a &metódus listára Configure &Shortcuts... Gyorsbillentyű&k beállítása... &Goto Line... &Ugrás sorhoz... Ctrl+G Ctrl+G Toggle Co&mments M&egjegyzés ki-bekapcsolása Ctrl+D Ctrl+D Comment Megjegyzés Uncomment Megjegyzés kikapcsolása Complete Code Kódkiegészítés Ctrl+Space Ctrl+Space Toggle &Bookmark &Jelzőke ki-bekapcsolása Toggle Bookmark Jelzőke ki-bekapcsolása Ctrl+B Ctrl+B Clear &All Bookmarks &Összes jelzőke kikapcsolása Ctrl+F2 Ctrl+F2 E&xternal Tools... K&ülső eszközök... &Next Bookmark &Következő jelzőke F2 F2 &Previous Bookmark &Előző jelzőke Shift+F2 Shift+F2 Find Pr&evious E&lőző keresése Shift+F3 Shift+F3 Goto matching &bracket Ugrás a megfelelő &zárójelekhez Goto matching bracket Ugrás a megfelelő zárójelekhez Ctrl+[ Ctrl+[ Foo Foo Add New &Class... Új &osztály hozzáadása... &Print... &Nyomtatás... Open F&ile in project... Fájl megnyitása a &projektben... Alt+Shift+O Alt+Shift+O Goto &Implementation Ugrás az &implementációhoz Goto &Declaration Ugrás az &deklarációhoz &Rebuild Qt classes database &Qt osztályadatbázis újraindexelése Execute &qmake &Qmake futtatása Show Maximized Maximális nézet &Editor mode &Szerkesztői mód Ctrl+E Ctrl+E Next Warning/Error Következő figyelmeztetés/hiba F4 F4 Previous Warning/Error Előző figyelmeztetés/hiba Shift+F4 Shift+F4 Clear all Warnings/Errors Összes figyelmeztetés/hibaüzenet törlése Full view Teljes nézet Minimal view Minimális nézet DocksWindow DokkolóAblak Dock Windows Dokkoló ablakok New submenu > Következő almenü > a a En&force qmake mode Erőltetett q&make mód &Debug mode &Debug mód &Release mode &Kiadási mód &Forget last used mode &Felejtsd el a legutóbb használt módot MainImpl Choose the file to create Vállaszd ki a létrehozni kívánt fájlt Files Fájlok The file "%1" already exists in directory. A %1 fájl már létezik a könyvtárban. Cancel Mégsem Unable to create %1 Nem lehet a%1-t létrehozni The Qt include directory doesn't exist, You can change in Options dialog. A Qt include mappája nem létezik Állítsd be az Opcióknál. Ok Rendben Do you want to quit QDevelop ? Valóban ki akarsz lépni a QDevelopból? Yes Igen No Nem Choose a file to open Vállaszd ki a megnyitni kívánt fájlt Sources Források Projects Projektek Texts Szövegek All Files Összes fájl Choose a project to open Vállaszd ki a megnyitni kívánt projektet The project %1 doesn't exist. A %1 projekt nem létezik. Properties of %1... %1 tulajdonságai... Files (*.cpp *.h *.txt *.* *) Fájlok (*.cpp *.h *.txt) Stop Megállít Build finished without error A build hiba nélkül lefutott Build finished with A build lefutott némi error(s) hibával and és warning(s) figyelmeztetéssel Start Indít The project has been modified, do you want to save your changes ? A projekt megváltozott, kívánod menteni? Stop debugging ? Valóban leállítsam a hibakeresést? The program doesn't exist, A program már nem fut, run Build. nyomd meg a Buildet. Shift+F5 Shift+F5 F5 F5 Abort Megszakít Stopping is not possible under Windows. Put breakpoints. A program megállítása nem lehetséges Winfos alatt. Használj breakpontokat. Continue Folytatás &%1 %2 &%1 %2 Version %1 %1-es verzió New Variable: Új változó: The variable "%1" already exists. A "%1" változó már létezik. The Qt database building is already in progress. A Qt osztályadatbázis létrehozása folyamatban. The Qt classes database build is ended. A Qt osztályadatbázis létrehozása befejeződött. Cannot launch Linguist NewImplementation New Implementation Új implementáció Class Name : Osztály neve: File Name : Fájl neve: Location : Elérési út : ... ... &Ok &Rendben C&ancel M&égsem NewProject New project creation Új projekt létrehozása Template Minta Empty or master project Üres vagy fő projekt Application with Dialog Alkalmazás párbeszédpanellel Application with Main Window Alkalmazás főablakkal Properties Tulajdonságok Parent project : Szülő projekt: Project name : Projekt neve: Location : Elérési út : ... ... Project creation on : Új projekt létrehozása itt: Version Verzió Debug Version Hibakereső verzió Release Version Kiadási verzió OK Rendben Cancel Mégsem Sub-directories Al könyvtárak Dialogs: Dialógusok: Executable: Futtatható: ui ui bin bin sources: források: Objects: Objektumok: src src build build Inheritance subclassing Alosztály inheritálása Object name: Objektum neve: File name: Fájl név: <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialog:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Dialógus:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Subclass:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Sans Serif; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Alosztály:</span></p></body></html> NewProjectImpl Choose the project directory Vállaszd ki a projekt mappáját The directory "%1" cannot be created A %1 könyvtárat nem lehet létrehozni Cancel Mégsem The project cannot be created A projektet nem lehet létrehozni Project file "%1" already exists A %1 projektfájl már létezik The directory "%1" already exists. Do you want to create project anyway? A %1 mappa már létezik. Valóban létre kívánod hozni a projektet? NewVariable Dialog Dialógus New Variable : Új változó: Qt Variables Qt változól User Variable Felhasználói változó Variable : Változó : Operator : Operátor : = = += += -= -= *= *= ~= ~= OK Rendben Cancel Mégsem OpenFile Open File in Project Fájl megnyitása a projektben OK Rendben Cancel Mégsem Options Options Beállítások General Általános Save all before build Mentés a build előtt Automatic compilation Automatikus fordítás Qt include directory: Qt include mappa: ... ... Default projects directory: Alapértelmezett projekt mappa: Qt documentation directory: Qt doksi mappája: Make extra parameters: Make extra paraméterei: User plugins directory: Felhasználói pluginok könyvtára: Prompt before quit Kérdezzem mielőtt kilép Reload last project when the application starts Utolsó projekt betöltése indításokor Show classes explorer Mutassa az osztály tallózót Interval between updates: Frissítések közti időtartam: seconds másodperc Close button in each tab (does not work with all styles) Minden fülön legyen becsuk gomb (nem működik minden témával) Editor Szerkesztő options opciók Selection border Kijelölés kerete Auto-Brackets Automata kapcsos-zárójelek Matching ( and { ( és { párok megjelölése Complete Code Kódkiegészítés Autoindent Automata azonosítás Line numbers Sorszámok Syntax highlighting Szintakszis kiemelése Display editor toolbars Szerkesztő eszköztár megjelenítése Display white spaces Ne látszódjon a szóköz Font: Berűtípus: End of line Sorvég Tab size Fül mérete Files encoding: Fájlok enkódolása: Current line background Aktuális sor háttere Text background Szöveg háttere Text color Szöveg színe Default Alapértelmezett Unix Unix Dos/Windows Dos/Winfos Replace Tab by spaces Tabokat cserélje szóközökre Function/method names : Függvény/metódusnevek: Preprocessor : Előfordító: Qt words : Qt szavak: Keywords : Kulcsszavak: Single comments : Egysoros kommentek: Multiline comments : Többsoros kommentek: Quotation strings : Idézőjeles szövegek: Right margin line Jobb margó vonal Column: Mező: Auto-Comments Automata komment <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:8pt;"><span style=" font-size:10pt;">/*</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* Multi-line</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">* comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">*/</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">#include &lt;QApplication&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">// Single line comments </p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">int main(int argc, char *argv[])</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">{</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QApplication app(argc, argv);</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QString chaine = "between quotations";</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> QDialog *main = new QDialog;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> main-&gt;show();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;"> return app.exec();</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS'; font-size:10pt;">}</p></body></html> Word wrap Hosszú sorok tördelése Hide Find/Replace panels after Rejtsd el a keresés/csere panelt a művelet után sec. mp. Ctrl+click = Go to implementation, Meta+click = Go to declaration Ctrl+balklikk = ugrás az implementációhoz Meta+balklikk = ugrás a deklarációhoz OptionsImpl Choose the project directory Vállaszd ki a projekt mappáját Param Program parameters Program paraméterek Run with these arguments: Futtasd ezekkel az argumentumokkal: Working directory (leave empty to use project directory): Munkamappa (hagyd üresen ha a projekt mappát kívánod használni): ... ... Environment variables (NAME=value): Környezeti változók (NÉV=érték): Name Név Value Érték &Edit &Szerkesztés &Add &Hozzáadás &Delete &Törlés &Sort &Rendezés &Default &Alapértelmezett &OK &Rendben &Cancel &Mégsem ParametersImpl Choose the project location Vállaszd ki a projekt elérési útját The variable "%1" already exists. A "%1" változó már létezik. Cancel Mégsem ProjectManager Project parsing Projekt elemzés Save project changes ? Mented a projekt változásait? Yes Igen No Nem Cancel Mégsem The file already exists in directory. A fájl már létezik a könyvtárban. Forms: Formok: Unable to create file. Nem lehet a fájlt létrehozni. The file already exists. A fájl már létezik. This file is not permitted. Nincs jogod a fájl megnyitásához. Ok Rendben Sub-project creation Alprojekt létrehozása Sub-Projects Al-projektek New name: Új név: The kind of the new and the old filename is different ! Az új és a régi fájl kiterjesztése különbözik ! Rename Átnevezés Unable to rename the file to "%1" Nem lehet a fájlt átnevezni "%1" -re Cannot remove the main project. A főprojektet nem lehet eltávolítani. Do you want to remove "%1" from the project ? Valóban el akarod távolítani a "%1" -t a projektből? Sub-projects Al-projektek Headers Fejlécek Sources Források Dialogs Dialógusok Translations Fordítások Resources Erőforrások The only available version for "%1" is %2 Az %2 elérhető verziója %1 Run on %1 Futtatás %1-en File not found: "%1" A %1 fájl nem található ProjectPropertie Dialog Dialógus Project Template Projekt minta app app lib lib subdirs subdirs Project or Scope : Projekt vagy feladat: Default directories Alapértelmezett könyvtárak Dialogs: Dialógusok: ... ... Sources: Források: Configuration Beállítások General : Általános : Version Verzió build_all build_all debug Hibakeresési (debug) release Kiadási debug_and_release Mindekettő Warnings Figyelmeztetések warn_off Figyelmeztetések ki warn_on Figyenlmeztetések be Qt Libraries Qt könyvtárak core core network network sql sql xml xml gui gui opengl opengl svg svg qt3support qt3support webkit webkit Variables Változók Variable : Változó : Values : Értékek : Advanced options Több beállítás Advanced Options Több beállítás app_bundle app_bundle assistant assistant console console designer designer dll dll exceptions kivételek lib_bundle lib_bundle no_lflags_merge no_lflags_merge plugin plugin ppc ppc qaxcontainer qaxcontainer qaxserver qaxserver qt qt qtestlib qtestlib resources resources rtti rtti staticlib staticlib stl slt thread thread uic3 uic3 uitools uitools windows windows x11 x11 x86 x86 Free CONFIG variables : Egyéb CONFIG változók : OK Rendben Cancel Mégsem script script phonon phonon xmlpatterns xmlpatterns link_pkgconfig link_pkgconfig ProjectPropertieImpl Properties of %1 %1 tulajdonságai New Value: Új érték : The spaces aren't correctly parsed by qmake A szóközöket nem rendesen ellenőrízte a qmake delete spaces or put quotes. töröld a szóközöket vagy használj idézőjeleket. Modify Módosít Cancel Mégsem Choose the sources location Vállaszd ki a forrás elérési útját Choose the dialogs location Vállaszd ki a dilaógus elérési útját A new variable can not be "QT", "CONFIG" or "TEMPLATE" Az új változó nem lehet "QT", "CONFIG" vagy "TEMPLATE" QObject Unable to establish a database connection. Nem tudatam létrehozni a kapcsolatot az adatbázissal. QDevelop needs SQLite support. Please read the Qt SQL driver documentation for information how to build it. A QDevelopnak szüksége van SQLite támogatásra. További információkért ismerkedj a Qt SQL driver doksijával. Unable to start Assistant ! Nem tudtam a Qt-Assistantot elindítani ! Unable to start Designer ! Nem tudtam a Qt-Designert elindítani ! Loading: Töltés: Interface translation Fordítás betöltése Environment control Környezet ellenőrzése Files on editor Fájlok betöltése a szerkeszőbe Plugins Pluginok Main Window creation Főablak létrehozása Current project parsing Projekt ellenőrzése Registers Form Form Name Név Value Érték Apply Elfogad ReplaceWidget Form Form find: keres: Replacement: Helyettesítő: &Replace &Kicserél Previous Előző Next Következő Case Sensitive Kis-nagybetű érzékeny Whole words Teljes szóra Prompt Kérdezzen Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről Shortcuts Configure Shortcuts Gyorsbillentyűk beállítása Action Művelet Shortcut Gyorsbillentyű Default ALapértelmezett OK Rendben Cancel Mégsem Subclassing Qt Designer Form Subclassing Qt Designer Formokból alosztály készítése Class Na&me: Osztály n&év: &New... &Új... &File Name: &Fájl név: &Location: &Elérési út: Filter &by: Szű&rő: &Create &Létrehozás C&ancel M&égsem SubclassingImpl &Update &Frissítés C&reate &Létrehozás (.h and .cpp) (.h és .cpp) Choose the file location Vállaszd ki a fájlt TabWidget Close Tab Fül bezárása Close Other Tabs Többi fül bezárása Close All Tabs Összes fül bezárása TextEdit The Qt database building is in progress. Try to complete code later. A Qt osztályadatbázis létrehozása folyamatban. Várj a kódkiegészítéssel amíg befejeződik. The file "%1" could not be loaded. A %1 fájlt nem lehet betölteni. Cancel Mégsem Save "%1" "%1" mentése Yes Igen No Nem Unable to save %1 %1 mentése sikertelen Reached end of page, continued from top Elértem a fájl végét, kezdem az elejéről Goto Implementation Ugrás az implementációhoz Goto Declaration Ugrás az deklarációhoz Cut Kivágás Copy Másolás Paste Beillesztés Selection Indent Azonosak kijelölése Selection Unindent Kijelölés megszűntetése Select All Mindet kijelöl Find... Keres... Toggle Bookmark Jelzőke ki-bekapcsolása Toggle Breakpoint Breakpoint ki-bekapcsolása ToolsControl External Tools Külső eszközök Please enter the path to the external programs: Kérlek add meg a kért külső programok elérési útját: ctags: ctags: ... ... linguist: Qt Linguist: assistant: Qt Assistant: gdb: gdb: designer: Qt Designer: lupdate: lupdate: lrelease: lrelease: qmake: qmake: make: make: Check environment on start Ellenőrízd ezek meglétét induláskor &Test &Ellenőrzés ToolsControlImpl Ctags was detected in path %1, but this version is too old. Megtaláltam a Ctagsot itt "%1", de sajnos túl régi veziójú. Ok Rendben Please select the program Válaszd ki a programot TreeClasses Open Declaration Deklaráció megnyitása Open Implementation Implementáció megnyitása Add Method... Metódus hozzáadása... Add Variable... Változó hozzáadása... Add get/set Methods... Get/set metódusok hozzáadása... Refresh contents Tartalom frissítése TreeProject Add sub-project... Alprojekt hozzáadása... Add New Item... Új elem hozzáadása... Add Scope... Feladat hozzáadása... Add New Class... Új osztály hozzáadása... Add Existing Files... Létező fájlok hozzáadása... Open in Linguist Megnyitás Linguist-al Refresh translation files Nyelvi fájlok frissítése Build release translation files Kiadási nyelvi fordítások generálása Open in Designer Megnyitás Designerben Dialog Subclassing... Alosztály képzése a dialógusból... Dialog Preview Dialógus előnézet Open Megnyitás Rename... Átnevezés... Remove from project Eltávolítás a projektből Properties of %1... %1 tulajdonságai... Show As Mutasd Normal mezei módban Krawek Krawek módban Warning Dialog Dialógus TextLabel TextLabel OK Rendben Don't show anymore Ne mutasd többé qdevelop-v0.28/plugins/formatting-astyle/translations/.svn/entries0000444000175000017500000000132411362261064024556 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/plugins/formatting-astyle/translations http://qdevelop.googlecode.com/svn 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd AStyle_German.ts file 2010-04-17T07:24:36.586876Z a4f3f5b4c369853ec9c3ed72a8ce0d8f 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 10536 AStyle_Russian.ts file 2010-04-17T07:24:36.590879Z b81212449f4ffcd288d2b569b65ffb88 2009-03-28T16:40:37.564432Z 445 Lord.Divius 10785 AStyle_French.ts file 2010-04-17T07:24:36.590879Z 312d204496866bd111548a7fe99e112e 2009-03-28T16:40:37.564432Z 445 Lord.Divius 9264 qdevelop-v0.28/plugins/formatting-astyle/translations/.svn/all-wcprops0000444000175000017500000000103011362261064025342 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 67 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/translations END AStyle_German.ts K 25 svn:wc:ra_dav:version-url V 84 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/translations/AStyle_German.ts END AStyle_Russian.ts K 25 svn:wc:ra_dav:version-url V 85 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/translations/AStyle_Russian.ts END AStyle_French.ts K 25 svn:wc:ra_dav:version-url V 84 /svn/!svn/ver/465/tags/v0.28/plugins/formatting-astyle/translations/AStyle_French.ts END qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyle.ui.svn-base0000444000175000017500000004303011362261064025712 0ustar jlbrdjlbrd AStyleDialog 0 0 800 535 Artistic Style Formatter Plugin 9 6 0 0 Sample 9 6 QTextEdit::NoWrap true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> 40 false 0 0 0 Style 9 6 Qt::Vertical 20 40 6 0 Styles 9 6 GNU ANSI true Custom Linux Java K&&R Qt::Vertical 20 40 Indentation 9 6 Qt::Vertical 20 40 Indent multi-line preprocessor definitions Indent labels Indent namespaces Indent blocks Indent brackets Converts TABs to spaces Force using TABs 6 0 Indentation size (in spaces) 2 20 4 Qt::Horizontal QSizePolicy::Expanding 40 20 Indent classes (keywords public:, protected: and private:) Indent case: statement in switches (commands under case:) Use TABs instead of spaces Fill empty lines with the whitespace of their previous lines Indent switches (keyword case:) Formatting 9 6 6 0 Brackets (None, Break, Attach or Linux): none break attach linux Qt::Horizontal QSizePolicy::Preferred 40 20 Pad empty lines around header blocks (e.g. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Insert space padding around operators Insert space padding around parenthesis 0 0 6 0 0 0 6 0 Don't break complex statements and multiple statements residing in a single line Don't break one-line blocks Qt::Vertical 20 40 6 0 &About Qt::Horizontal 131 31 &OK &Cancel true okButton clicked() AStyleDialog accept() 391 401 96 254 cancelButton clicked() AStyleDialog reject() 474 401 179 282 qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/ASResource.cpp.svn-base0000444000175000017500000003307411362261064026600 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASResource.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" namespace astyle { const string ASResource::AS_IF = string("if"); const string ASResource::AS_ELSE = string("else"); const string ASResource::AS_FOR = string("for"); const string ASResource::AS_DO = string("do"); const string ASResource::AS_WHILE = string("while"); const string ASResource::AS_SWITCH = string("switch"); const string ASResource::AS_CASE = string("case"); const string ASResource::AS_DEFAULT = string("default"); const string ASResource::AS_CLASS = string("class"); const string ASResource::AS_STRUCT = string("struct"); const string ASResource::AS_UNION = string("union"); const string ASResource::AS_INTERFACE = string("interface"); const string ASResource::AS_NAMESPACE = string("namespace"); const string ASResource::AS_EXTERN = string("extern"); const string ASResource::AS_PUBLIC = string("public"); const string ASResource::AS_PROTECTED = string("protected"); const string ASResource::AS_PRIVATE = string("private"); const string ASResource::AS_STATIC = string("static"); const string ASResource::AS_SYNCHRONIZED = string("synchronized"); const string ASResource::AS_OPERATOR = string("operator"); const string ASResource::AS_TEMPLATE = string("template"); const string ASResource::AS_TRY = string("try"); const string ASResource::AS_CATCH = string("catch"); const string ASResource::AS_FINALLY = string("finally"); const string ASResource::AS_THROWS = string("throws"); const string ASResource::AS_CONST = string("const"); const string ASResource::AS_ASM = string("asm"); const string ASResource::AS_BAR_DEFINE = string("#define"); const string ASResource::AS_BAR_INCLUDE = string("#include"); const string ASResource::AS_BAR_IF = string("#if"); const string ASResource::AS_BAR_EL = string("#el"); const string ASResource::AS_BAR_ENDIF = string("#endif"); const string ASResource::AS_OPEN_BRACKET = string("{"); const string ASResource::AS_CLOSE_BRACKET = string("}"); const string ASResource::AS_OPEN_LINE_COMMENT = string("//"); const string ASResource::AS_OPEN_COMMENT = string("/*"); const string ASResource::AS_CLOSE_COMMENT = string("*/"); const string ASResource::AS_ASSIGN = string("="); const string ASResource::AS_PLUS_ASSIGN = string("+="); const string ASResource::AS_MINUS_ASSIGN = string("-="); const string ASResource::AS_MULT_ASSIGN = string("*="); const string ASResource::AS_DIV_ASSIGN = string("/="); const string ASResource::AS_MOD_ASSIGN = string("%="); const string ASResource::AS_OR_ASSIGN = string("|="); const string ASResource::AS_AND_ASSIGN = string("&="); const string ASResource::AS_XOR_ASSIGN = string("^="); const string ASResource::AS_GR_GR_ASSIGN = string(">>="); const string ASResource::AS_LS_LS_ASSIGN = string("<<="); const string ASResource::AS_GR_GR_GR_ASSIGN = string(">>>="); const string ASResource::AS_LS_LS_LS_ASSIGN = string("<<<="); const string ASResource::AS_RETURN = string("return"); const string ASResource::AS_EQUAL = string("=="); const string ASResource::AS_PLUS_PLUS = string("++"); const string ASResource::AS_MINUS_MINUS = string("--"); const string ASResource::AS_NOT_EQUAL = string("!="); const string ASResource::AS_GR_EQUAL = string(">="); const string ASResource::AS_GR_GR = string(">>"); const string ASResource::AS_GR_GR_GR = string(">>>"); const string ASResource::AS_LS_EQUAL = string("<="); const string ASResource::AS_LS_LS = string("<<"); const string ASResource::AS_LS_LS_LS = string("<<<"); const string ASResource::AS_ARROW = string("->"); const string ASResource::AS_AND = string("&&"); const string ASResource::AS_OR = string("||"); const string ASResource::AS_COLON_COLON = string("::"); const string ASResource::AS_PAREN_PAREN = string("()"); const string ASResource::AS_BLPAREN_BLPAREN = string("[]"); const string ASResource::AS_PLUS = string("+"); const string ASResource::AS_MINUS = string("-"); const string ASResource::AS_MULT = string("*"); const string ASResource::AS_DIV = string("/"); const string ASResource::AS_MOD = string("%"); const string ASResource::AS_GR = string(">"); const string ASResource::AS_LS = string("<"); const string ASResource::AS_NOT = string("!"); const string ASResource::AS_BIT_OR = string("|"); const string ASResource::AS_BIT_AND = string("&"); const string ASResource::AS_BIT_NOT = string("~"); const string ASResource::AS_BIT_XOR = string("^"); const string ASResource::AS_QUESTION = string("?"); const string ASResource::AS_COLON = string(":"); const string ASResource::AS_COMMA = string(","); const string ASResource::AS_SEMICOLON = string(";"); const string ASResource::AS_FOREACH = string("foreach"); const string ASResource::AS_LOCK = string("lock"); const string ASResource::AS_UNSAFE = string("unsafe"); const string ASResource::AS_FIXED = string("fixed"); const string ASResource::AS_GET = string("get"); const string ASResource::AS_SET = string("set"); const string ASResource::AS_ADD = string("add"); const string ASResource::AS_REMOVE = string("remove"); const string ASResource::AS_CONST_CAST = string("const_cast"); const string ASResource::AS_DYNAMIC_CAST = string("dynamic_cast"); const string ASResource::AS_REINTERPRET_CAST = string("reinterpret_cast"); const string ASResource::AS_STATIC_CAST = string("static_cast"); /** * Build the vector of assignment operators. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param assignmentOperators a reference to the vector to be built. */ void ASResource::buildAssignmentOperators(vector &assignmentOperators) { assignmentOperators.push_back(&AS_ASSIGN); assignmentOperators.push_back(&AS_PLUS_ASSIGN); assignmentOperators.push_back(&AS_MINUS_ASSIGN); assignmentOperators.push_back(&AS_MULT_ASSIGN); assignmentOperators.push_back(&AS_DIV_ASSIGN); assignmentOperators.push_back(&AS_MOD_ASSIGN); assignmentOperators.push_back(&AS_OR_ASSIGN); assignmentOperators.push_back(&AS_AND_ASSIGN); assignmentOperators.push_back(&AS_XOR_ASSIGN); // Java assignmentOperators.push_back(&AS_GR_GR_GR_ASSIGN); assignmentOperators.push_back(&AS_GR_GR_ASSIGN); assignmentOperators.push_back(&AS_LS_LS_ASSIGN); // Unknown assignmentOperators.push_back(&AS_LS_LS_LS_ASSIGN); assignmentOperators.push_back(&AS_RETURN); } /** * Build the vector of C++ cast operators. * Used by ONLY ASFormatter.cpp * * @param castOperators a reference to the vector to be built. */ void ASResource::buildCastOperators(vector &castOperators) { castOperators.push_back(&AS_CONST_CAST); castOperators.push_back(&AS_DYNAMIC_CAST); castOperators.push_back(&AS_REINTERPRET_CAST); castOperators.push_back(&AS_STATIC_CAST); } /** * Build the vector of header words. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param headers a reference to the vector to be built. */ void ASResource::buildHeaders(vector &headers) { headers.push_back(&AS_IF); headers.push_back(&AS_ELSE); headers.push_back(&AS_FOR); headers.push_back(&AS_WHILE); headers.push_back(&AS_DO); headers.push_back(&AS_SWITCH); headers.push_back(&AS_CASE); headers.push_back(&AS_DEFAULT); headers.push_back(&AS_TRY); headers.push_back(&AS_CATCH); headers.push_back(&AS_TEMPLATE); headers.push_back(&AS_CONST); headers.push_back(&AS_STATIC); headers.push_back(&AS_EXTERN); // C# and Java headers.push_back(&AS_FINALLY); // Java headers.push_back(&AS_SYNCHRONIZED); // C# headers.push_back(&AS_FOREACH); headers.push_back(&AS_LOCK); headers.push_back(&AS_UNSAFE); headers.push_back(&AS_FIXED); headers.push_back(&AS_GET); headers.push_back(&AS_SET); headers.push_back(&AS_ADD); headers.push_back(&AS_REMOVE); } /** * Build the vector of non-assignment operators. * Used by ONLY ASBeautifier.cpp * * @param nonParenHeaders a reference to the vector to be built. */ void ASResource::buildNonAssignmentOperators(vector &nonAssignmentOperators) { nonAssignmentOperators.push_back(&AS_EQUAL); nonAssignmentOperators.push_back(&AS_PLUS_PLUS); nonAssignmentOperators.push_back(&AS_MINUS_MINUS); nonAssignmentOperators.push_back(&AS_NOT_EQUAL); nonAssignmentOperators.push_back(&AS_GR_EQUAL); nonAssignmentOperators.push_back(&AS_GR_GR_GR); nonAssignmentOperators.push_back(&AS_GR_GR); nonAssignmentOperators.push_back(&AS_LS_EQUAL); nonAssignmentOperators.push_back(&AS_LS_LS_LS); nonAssignmentOperators.push_back(&AS_LS_LS); nonAssignmentOperators.push_back(&AS_ARROW); nonAssignmentOperators.push_back(&AS_AND); nonAssignmentOperators.push_back(&AS_OR); } /** * Build the vector of header non-paren headers. * Used by BOTH ASFormatter.cpp and ASBeautifier.cpp * * @param nonParenHeaders a reference to the vector to be built. */ void ASResource::buildNonParenHeaders(vector &nonParenHeaders) { nonParenHeaders.push_back(&AS_ELSE); nonParenHeaders.push_back(&AS_DO); nonParenHeaders.push_back(&AS_CASE); nonParenHeaders.push_back(&AS_DEFAULT); nonParenHeaders.push_back(&AS_TRY); nonParenHeaders.push_back(&AS_TEMPLATE); nonParenHeaders.push_back(&AS_CONST); nonParenHeaders.push_back(&AS_STATIC); nonParenHeaders.push_back(&AS_EXTERN); // C# and Java nonParenHeaders.push_back(&AS_FINALLY); // C# nonParenHeaders.push_back(&AS_UNSAFE); nonParenHeaders.push_back(&AS_GET); nonParenHeaders.push_back(&AS_SET); nonParenHeaders.push_back(&AS_ADD); nonParenHeaders.push_back(&AS_REMOVE); } /** * Build the vector of operators. * Used by ONLY ASFormatter.cpp * * @param operators a reference to the vector to be built. */ void ASResource::buildOperators(vector &operators) { operators.push_back(&AS_PLUS_ASSIGN); operators.push_back(&AS_MINUS_ASSIGN); operators.push_back(&AS_MULT_ASSIGN); operators.push_back(&AS_DIV_ASSIGN); operators.push_back(&AS_MOD_ASSIGN); operators.push_back(&AS_OR_ASSIGN); operators.push_back(&AS_AND_ASSIGN); operators.push_back(&AS_XOR_ASSIGN); operators.push_back(&AS_EQUAL); operators.push_back(&AS_PLUS_PLUS); operators.push_back(&AS_MINUS_MINUS); operators.push_back(&AS_NOT_EQUAL); operators.push_back(&AS_GR_EQUAL); operators.push_back(&AS_GR_GR_GR_ASSIGN); operators.push_back(&AS_GR_GR_ASSIGN); operators.push_back(&AS_GR_GR_GR); operators.push_back(&AS_GR_GR); operators.push_back(&AS_LS_EQUAL); operators.push_back(&AS_LS_LS_LS_ASSIGN); operators.push_back(&AS_LS_LS_ASSIGN); operators.push_back(&AS_LS_LS_LS); operators.push_back(&AS_LS_LS); operators.push_back(&AS_ARROW); operators.push_back(&AS_AND); operators.push_back(&AS_OR); operators.push_back(&AS_COLON_COLON); //// BUGFIX: removed the folowing lines //// operators.push_back(&AS_PAREN_PAREN); //// operators.push_back(&AS_BLPAREN_BLPAREN); operators.push_back(&AS_PLUS); operators.push_back(&AS_MINUS); operators.push_back(&AS_MULT); operators.push_back(&AS_DIV); operators.push_back(&AS_MOD); operators.push_back(&AS_QUESTION); operators.push_back(&AS_COLON); operators.push_back(&AS_ASSIGN); operators.push_back(&AS_LS); operators.push_back(&AS_GR); operators.push_back(&AS_NOT); operators.push_back(&AS_BIT_OR); operators.push_back(&AS_BIT_AND); operators.push_back(&AS_BIT_NOT); operators.push_back(&AS_BIT_XOR); operators.push_back(&AS_OPERATOR); operators.push_back(&AS_COMMA); // operators.push_back(&AS_SEMICOLON); operators.push_back(&AS_RETURN); } /** * Build the vector of pre-block statements. * Used by ONLY ASBeautifier.cpp * * @param preBlockStatements a reference to the vector to be built. */ void ASResource::buildPreBlockStatements(vector &preBlockStatements) { preBlockStatements.push_back(&AS_CLASS); preBlockStatements.push_back(&AS_STRUCT); preBlockStatements.push_back(&AS_UNION); preBlockStatements.push_back(&AS_INTERFACE); preBlockStatements.push_back(&AS_NAMESPACE); preBlockStatements.push_back(&AS_THROWS); preBlockStatements.push_back(&AS_EXTERN); } /** * Build the vector of pre-command headers. * Used by ONLY ASFormatter.cpp * * @param preCommandHeaders a reference to the vector to be built. */ void ASResource::buildPreCommandHeaders(vector &preCommandHeaders) { preCommandHeaders.push_back(&AS_EXTERN); preCommandHeaders.push_back(&AS_THROWS); preCommandHeaders.push_back(&AS_CONST); } /** * Build the vector of pre-definition headers. * Used by ONLY ASFormatter.cpp * * @param preDefinitionHeaders a reference to the vector to be built. */ void ASResource::buildPreDefinitionHeaders(vector &preDefinitionHeaders) { preDefinitionHeaders.push_back(&AS_CLASS); preDefinitionHeaders.push_back(&AS_INTERFACE); preDefinitionHeaders.push_back(&AS_NAMESPACE); preDefinitionHeaders.push_back(&AS_STRUCT); } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/README.txt.svn-base0000444000175000017500000000211111362261064025543 0ustar jlbrdjlbrd AStyle Formatting plugin for QDevelop (C) 2006-2009 Jean-Luc Biord Installation ~~~~~~~~~~~~ 1.`cd' to the directory containing the plugins's source code and type `qmake' (`qmake -recursive' with Qt 4.2.x) to generate the Makefile for your system. 2. Type `make' on Linux or `mingw32-make` on Windows to compile the package. 3. The library is built on bin/plugins/ directory of the QDevelop tree. Copy the file (.dll) or (.so) in plugins subdirectory where QDevelop program is installed. License ~~~~~~~~~~~~~ Copyright (C) 2006-2009 Jean-Luc Biord Astyle plugin for QDevelop 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. qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyledialogimpl.h.svn-base0000444000175000017500000000476711362261064027604 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef ASTYLEDIALOGIMPL_H #define ASTYLEDIALOGIMPL_H // #include "ui_astyle.h" #include // class AStyleDialogImpl : public QDialog, public Ui::AStyleDialog { Q_OBJECT public: AStyleDialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); private slots: void on_aboutButton_clicked(); void on_comboBox_currentIndexChanged(QString ); void on_checkBox13_toggled(bool checked); void on_checkBox14_toggled(bool checked); void on_checkBox16_toggled(bool checked); void on_checkBox17_toggled(bool checked); void on_checkBox15_toggled(bool checked); void on_checkBox18_toggled(bool checked); void on_checkBox12_toggled(bool checked); void on_checkBox11_toggled(bool checked); void on_checkBox10_toggled(bool checked); void on_checkBox9_toggled(bool checked); void on_checkBox8_toggled(bool checked); void on_checkBox3_toggled(bool checked); void on_checkBox2_toggled(bool checked); void on_spacesSize_valueChanged(int ); void on_qt_spinbox_lineedit_textChanged(QString ); void on_checkBox5_toggled(bool checked); void on_checkBox7_toggled(bool checked); void on_checkBox1_toggled(bool checked); void on_checkBox4_toggled(bool checked); void on_checkBox6_toggled(bool checked); void on_gnu_toggled(bool checked); void on_ansi_toggled(bool checked); void on_Linux_toggled(bool checked); void on_java_toggled(bool checked); void on_kr_toggled(bool checked); void on_okButton_clicked(); void on_custom_toggled(bool checked); private: void sample(); QStringList args(); QString m_textSample; }; #endif qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/COPYING.svn-base0000444000175000017500000004311011362261064025104 0ustar jlbrdjlbrd GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/ASFormatter.cpp.svn-base0000444000175000017500000014201511362261064026750 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASFormatter.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #include // can trace only if _DEBUG is defined (Visual C) #ifdef _DEBUG // #define TRACEunpad // #define TRACEcomment // #define TRACEheader #if defined(TRACEunpad) || defined(TRACEcomment) || defined(TRACEheader) ofstream *traceOutF; #define TRACEF #endif #endif #ifdef TRACEunpad #define TRunpad(a,b,c) if(b > 0 || c > 0) *traceOutF << inLineNumber << " " << b << a << c << endl; #else #define TRunpad(a,b,c) ((void)0) #endif #ifdef TRACEcomment #define TRcomment(a) *traceOutF << inLineNumber << " " << a << endl; #else #define TRcomment(a) ((void)0) #endif #ifdef TRACEheader #define TRxtra(a) *traceOutF << inLineNumber << " " << a << endl; #else #define TRxtra(a) ((void)0) #endif #define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } #define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container); } #define IS_A(a,b) ( ((a) & (b)) == (b)) using namespace std; namespace astyle { bool ASFormatter::calledInitStatic = false; vector ASFormatter::headers; vector ASFormatter::nonParenHeaders; // vector ASFormatter::preprocessorHeaders; vector ASFormatter::preDefinitionHeaders; vector ASFormatter::preCommandHeaders; vector ASFormatter::operators; vector ASFormatter::assignmentOperators; vector ASFormatter::castOperators; /** * Constructor of ASFormatter */ ASFormatter::ASFormatter() { staticInit(); preBracketHeaderStack = NULL; bracketTypeStack = NULL; parenStack = NULL; lineCommentNoIndent = false; // ***************** lineCommentNoBeautify = false; // ***************** sourceIterator = NULL; bracketFormatMode = NONE_MODE; shouldPadOperators = false; shouldPadParensOutside = false; shouldPadParensInside = false; shouldUnPadParens = false; shouldBreakOneLineBlocks = true; shouldBreakOneLineStatements = true; shouldConvertTabs = false; shouldBreakBlocks = false; shouldBreakClosingHeaderBlocks = false; shouldBreakClosingHeaderBrackets = false; shouldBreakElseIfs = false; #ifdef TRACEF // create a trace text file string filename = "trace.txt"; char* env = getenv("HOME"); if (env != NULL) filename = string(env) + string("/tracef.txt"); else { env = getenv("USERPROFILE"); if (env != NULL) filename = string(env) + string("\\My Documents\\tracef.txt"); else { cout << "\nCould not open trace.txt\n" << endl; exit(1); } } traceOutF = new ofstream(filename.c_str()); #endif } /** * Destructor of ASFormatter */ ASFormatter::~ASFormatter() { DELETE_CONTAINER(preBracketHeaderStack); #ifdef TRACEF delete traceOutF; #endif } /** * initialization of static data of ASFormatter. */ void ASFormatter::staticInit() { if (calledInitStatic) return; calledInitStatic = true; ASResource::buildHeaders(headers); ASResource::buildNonParenHeaders(nonParenHeaders); ASResource::buildAssignmentOperators(assignmentOperators); ASResource::buildOperators(operators); ASResource::buildPreDefinitionHeaders(preDefinitionHeaders); ASResource::buildPreCommandHeaders(preCommandHeaders); ASResource::buildCastOperators(castOperators); // preprocessorHeaders.push_back(&AS_BAR_DEFINE); //// DEVEL: removed the folowing lines ////preprocessorHeaders.push_back(&AS_BAR_INCLUDE); ////preprocessorHeaders.push_back(&AS_BAR_IF); // #if or #ifdef ////preprocessorHeaders.push_back(&AS_BAR_EL); // #else or #elif ////preprocessorHeaders.push_back(&AS_BAR_ENDIF); } /** * initialize the ASFormatter. * * init() should be called every time a ASFormatter object is to start * formatting a NEW source file. * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object * that will be used to iterate through the source code. This object will be * deleted during the ASFormatter's destruction, and thus should not be * deleted elsewhere. * * @param iter a pointer to the DYNAMICALLY CREATED ASSourceIterator object. */ void ASFormatter::init(ASSourceIterator *si) { ASBeautifier::init(si); ASEnhancer::init(getIndentLength(), getIndentString(), getCStyle(), getCaseIndent()); sourceIterator = si; INIT_CONTAINER(preBracketHeaderStack, new vector); INIT_CONTAINER(bracketTypeStack, new vector); bracketTypeStack->push_back(DEFINITION_TYPE); INIT_CONTAINER(parenStack, new vector); parenStack->push_back(0); currentHeader = NULL; currentLine = string(""); formattedLine = ""; currentChar = ' '; previousCommandChar = ' '; previousNonWSChar = ' '; quoteChar = '"'; charNum = 0; spacePadNum = 0; previousOperator = NULL; inLineNumber = 0; // for debugging isVirgin = true; isInLineComment = false; isInComment = false; isInPreprocessor = false; doesLineStartComment = false; isInQuote = false; isSpecialChar = false; isNonParenHeader = true; foundPreDefinitionHeader = false; foundPreCommandHeader = false; foundCastOperator = false; foundQuestionMark = false; isInLineBreak = false; endOfCodeReached = false; isLineReady = false; isPreviousBracketBlockRelated = true; isInPotentialCalculation = false; shouldReparseCurrentChar = false; passedSemicolon = false; passedColon = false; isInTemplate = false; isInBlParen = false; shouldBreakLineAfterComments = false; isImmediatelyPostComment = false; isImmediatelyPostLineComment = false; isImmediatelyPostEmptyBlock = false; isPrependPostBlockEmptyLineRequested = false; isAppendPostBlockEmptyLineRequested = false; prependEmptyLine = false; foundClosingHeader = false; previousReadyFormattedLineLength = 0; isImmediatelyPostHeader = false; isInHeader = false; #ifdef TRACEF *traceOutF << "New file -------------" << endl; #endif } /** * get the next formatted line. * * @return formatted line. */ string ASFormatter::nextLine() { const string *newHeader; bool isCharImmediatelyPostComment = false; bool isPreviousCharPostComment = false; bool isCharImmediatelyPostLineComment = false; bool isInVirginLine = isVirgin; bool isCharImmediatelyPostOpenBlock = false; bool isCharImmediatelyPostCloseBlock = false; bool isCharImmediatelyPostTemplate = false; bool prevIsParenHeader = false; while (!isLineReady) { if (shouldReparseCurrentChar) shouldReparseCurrentChar = false; else if (!getNextChar()) { breakLine(); return beautify(readyFormattedLine); } else // stuff to do when reading a new character... { // make sure that a virgin '{' at the begining ofthe file will be treated as a block... if (isInVirginLine && currentChar == '{') previousCommandChar = '{'; isPreviousCharPostComment = isCharImmediatelyPostComment; isCharImmediatelyPostComment = false; isCharImmediatelyPostTemplate = false; // isCharImmediatelyPostHeader = false; } if (isInLineComment) { appendCurrentChar(); // explicitely break a line when a line comment's end is found. if (charNum + 1 == (int) currentLine.length()) { isInLineBreak = true; isInLineComment = false; isImmediatelyPostLineComment = true; currentChar = 0; //make sure it is a neutral char. } continue; } else if (isInComment) { if (isSequenceReached("*/")) { isInComment = false; isImmediatelyPostComment = true; appendSequence(AS_CLOSE_COMMENT); goForward(1); } else appendCurrentChar(); continue; } // not in line comment or comment else if (isInQuote) { if (isSpecialChar) { isSpecialChar = false; appendCurrentChar(); } else if (currentChar == '\\') { isSpecialChar = true; appendCurrentChar(); } else if (quoteChar == currentChar) { isInQuote = false; appendCurrentChar(); } else { appendCurrentChar(); } continue; } // handle white space - needed to simplify the rest. if (isWhiteSpace(currentChar) || isInPreprocessor) { appendCurrentChar(); continue; } /* not in MIDDLE of quote or comment or white-space of any type ... */ if (isSequenceReached("//")) { // check for windows line marker if (currentLine[charNum+2] == '\xf2') isAppendPostBlockEmptyLineRequested = false; isInLineComment = true; //// if (shouldPadOperators) //// appendSpacePad(); // do not indent if in column 1 or 2 if (lineCommentNoIndent == false) { if (charNum == 0) lineCommentNoIndent = true; else if (charNum == 1 && currentLine[0] == ' ') lineCommentNoIndent = true; } // move comment if spaces were added or deleted if (lineCommentNoIndent == false && spacePadNum != 0) { size_t len = formattedLine.length(); // if spaces were removed, need to add spaces before the comment if (spacePadNum < 0) { int adjust = -spacePadNum; // make the number positive if (formattedLine[len-1] != '\t') // don't adjust if a tab formattedLine.append(adjust, ' '); else adjust = 0; TRcomment(adjust); // trace macro } // if spaces were added, need to delete spaces before the comment, if possible else { int adjust = spacePadNum; if (formattedLine.find_last_not_of(' ') < len - adjust - 1 && formattedLine[len-1] != '\t') // don't adjust a tab formattedLine.resize(len - adjust); // the following are commented out to avoid a Borland compiler warning // else // adjust = 0; TRcomment(-adjust); // trace macro } } appendSequence(AS_OPEN_LINE_COMMENT); goForward(1); continue; } else if (isSequenceReached("/*")) { isInComment = true; //// if (shouldPadOperators) //// appendSpacePad(); appendSequence(AS_OPEN_COMMENT); goForward(1); continue; } else if (currentChar == '"' || currentChar == '\'') { isInQuote = true; quoteChar = currentChar; //// if (shouldPadOperators) // BUGFIX: these two lines removed. seem to be unneeded, and interfere with L" //// appendSpacePad(); // BUFFIX: TODO make sure the removal of these lines doesn't reopen old bugs... appendCurrentChar(); continue; } /* not in quote or comment or white-space of any type ... */ // check if in preprocessor // ** isInPreprocessor will be automatically reset at the begining // of a new line in getnextChar() if (currentChar == '#') { isInPreprocessor = true; appendCurrentChar(); continue; } /* not in preprocessor ... */ if (isImmediatelyPostComment) { isImmediatelyPostComment = false; isCharImmediatelyPostComment = true; } if (isImmediatelyPostLineComment) { isImmediatelyPostLineComment = false; isCharImmediatelyPostLineComment = true; } if (shouldBreakLineAfterComments) { shouldBreakLineAfterComments = false; shouldReparseCurrentChar = true; breakLine(); continue; } // reset isImmediatelyPostHeader information if (isImmediatelyPostHeader) { isImmediatelyPostHeader = false; // Make sure headers are broken from their succeeding blocks // (e.g. // if (isFoo) DoBar(); // should become // if (isFoo) // DoBar; // ) // But treat else if() as a special case which should not be broken! if (shouldBreakOneLineStatements) { // if may break 'else if()'s, then simply break the line if (shouldBreakElseIfs) isInLineBreak = true; } } if (passedSemicolon) { passedSemicolon = false; if (parenStack->back() == 0) { shouldReparseCurrentChar = true; isInLineBreak = true; continue; } } if (passedColon) { passedColon = false; if (parenStack->back() == 0) { shouldReparseCurrentChar = true; isInLineBreak = true; continue; } } // Check if in template declaration, e.g. foo or foo // If so, set isInTemplate to true // if (!isInTemplate && currentChar == '<') { int templateDepth = 0; const string *oper; for (size_t i = charNum; i < currentLine.length(); i += (oper ? oper->length() : 1)) { oper = ASBeautifier::findHeader(currentLine, i, operators); if (oper == &AS_LS) { templateDepth++; } else if (oper == &AS_GR) { templateDepth--; if (templateDepth == 0) { // this is a template! // isInTemplate = true; break; } } else if (oper == &AS_COMMA // comma, e.g. A || oper == &AS_BIT_AND // reference, e.g. A || oper == &AS_MULT // pointer, e.g. A || oper == &AS_COLON_COLON) // ::, e.g. std::string { continue; } else if (!isLegalNameChar(currentLine[i]) && !isWhiteSpace(currentLine[i])) { // this is not a template -> leave... // isInTemplate = false; break; } } } // handle parenthesies // if (currentChar == '(' || currentChar == '[' || (isInTemplate && currentChar == '<')) { parenStack->back()++; if (currentChar == '[') isInBlParen = true; } else if (currentChar == ')' || currentChar == ']' || (isInTemplate && currentChar == '>')) { parenStack->back()--; if (isInTemplate && currentChar == '>') { isInTemplate = false; isCharImmediatelyPostTemplate = true; } // check if this parenthesis closes a header, e.g. if (...), while (...) // if (isInHeader && parenStack->back() == 0) { isInHeader = false; isImmediatelyPostHeader = true; } if (currentChar == ']') isInBlParen = false; if (currentChar == ')') foundCastOperator = false; } // handle brackets // BracketType bracketType = NULL_TYPE; if (currentChar == '{') { bracketType = getBracketType(); foundPreDefinitionHeader = false; foundPreCommandHeader = false; isInPotentialCalculation = false; // %%%%%%%%%%%% bracketTypeStack->push_back(bracketType); preBracketHeaderStack->push_back(currentHeader); currentHeader = NULL; isPreviousBracketBlockRelated = !IS_A(bracketType, ARRAY_TYPE); } else if (currentChar == '}') { // if a request has been made to append a post block empty line, // but the block exists immediately before a closing bracket, // then there is not need for the post block empty line. // isAppendPostBlockEmptyLineRequested = false; if (!bracketTypeStack->empty()) { bracketType = bracketTypeStack->back(); bracketTypeStack->pop_back(); isPreviousBracketBlockRelated = !IS_A(bracketType, ARRAY_TYPE); } if (!preBracketHeaderStack->empty()) { currentHeader = preBracketHeaderStack->back(); preBracketHeaderStack->pop_back(); } else currentHeader = NULL; } if (!IS_A(bracketType, ARRAY_TYPE)) { if (currentChar == '{') { parenStack->push_back(0); } else if (currentChar == '}') { if (!parenStack->empty()) { parenStack->pop_back(); } } if (currentChar == '{') { if ((bracketFormatMode == ATTACH_MODE || bracketFormatMode == BDAC_MODE && bracketTypeStack->size() >= 2 && IS_A((*bracketTypeStack)[bracketTypeStack->size()-2], COMMAND_TYPE) /*&& isInLineBreak*/) && !isCharImmediatelyPostLineComment) { appendSpacePad(); if (!isCharImmediatelyPostComment // do not attach '{' to lines that end with /**/ comments. && previousCommandChar != '{' && previousCommandChar != '}' && previousCommandChar != ';') // '}' , ';' chars added for proper handling of '{' immediately after a '}' or ';' appendCurrentChar(false); else appendCurrentChar(true); continue; } else if (bracketFormatMode == BREAK_MODE || bracketFormatMode == BDAC_MODE && bracketTypeStack->size() >= 2 && IS_A((*bracketTypeStack)[bracketTypeStack->size()-2], DEFINITION_TYPE)) { if (shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) breakLine(); appendCurrentChar(); continue; } else if (bracketFormatMode == NONE_MODE) { if (lineBeginsWith('{')) // is opening bracket broken? appendCurrentChar(true); else appendCurrentChar(false); continue; } } else if (currentChar == '}') { // mark state of immediately after empty block // this state will be used for locating brackets that appear immedately AFTER an empty block (e.g. '{} \n}'). if (previousCommandChar == '{') isImmediatelyPostEmptyBlock = true; if ((!(previousCommandChar == '{' && isPreviousBracketBlockRelated)) // this '{' does not close an empty block && (shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) // astyle is allowed to break on line blocks && (!(bracketFormatMode == NONE_MODE && IS_A(bracketType, SINGLE_LINE_TYPE))) && !isImmediatelyPostEmptyBlock) // this '}' does not immediately follow an empty block { breakLine(); appendCurrentChar(); } else { if (!isCharImmediatelyPostComment && !bracketFormatMode == NONE_MODE) isInLineBreak = false; appendCurrentChar(); if (!bracketFormatMode == NONE_MODE) if ((shouldBreakOneLineBlocks || !IS_A(bracketType, SINGLE_LINE_TYPE)) && !(currentChar == '}' && peekNextChar() == ';')) // fixes }; placed on separate lines shouldBreakLineAfterComments = true; } if (shouldBreakBlocks) { isAppendPostBlockEmptyLineRequested = true; } continue; } } if (((previousCommandChar == '{' && isPreviousBracketBlockRelated) || (previousCommandChar == '}' && !isImmediatelyPostEmptyBlock && isPreviousBracketBlockRelated && !isPreviousCharPostComment // Fixes wrongly appended newlines after '}' immediately after comments && peekNextChar() != ' ')) && (shouldBreakOneLineBlocks || !IS_A(bracketTypeStack->back(), SINGLE_LINE_TYPE))) { isCharImmediatelyPostOpenBlock = (previousCommandChar == '{'); isCharImmediatelyPostCloseBlock = (previousCommandChar == '}'); if (bracketFormatMode != NONE_MODE) { previousCommandChar = ' '; isInLineBreak = true; } } // reset block handling flags isImmediatelyPostEmptyBlock = false; // look for headers if (!isInTemplate) { if ((newHeader = findHeader(headers)) != NULL) { foundClosingHeader = false; const string *previousHeader; // recognize closing headers of do..while, if..else, try..catch..finally if ((newHeader == &AS_ELSE && currentHeader == &AS_IF) || (newHeader == &AS_WHILE && currentHeader == &AS_DO) || (newHeader == &AS_CATCH && currentHeader == &AS_TRY) || (newHeader == &AS_CATCH && currentHeader == &AS_CATCH) || (newHeader == &AS_FINALLY && currentHeader == &AS_TRY) || (newHeader == &AS_FINALLY && currentHeader == &AS_CATCH)) foundClosingHeader = true; previousHeader = currentHeader; currentHeader = newHeader; // If in ATTACH or LINUX bracket modes, attach closing headers (e.g. 'else', 'catch') // to their preceding bracket, // But do not perform the attachment if the shouldBreakClosingHeaderBrackets is set! if (!shouldBreakClosingHeaderBrackets && foundClosingHeader && (bracketFormatMode == ATTACH_MODE || bracketFormatMode == BDAC_MODE) && previousNonWSChar == '}') { isInLineBreak = false; appendSpacePad(); if (shouldBreakBlocks) isAppendPostBlockEmptyLineRequested = false; } // If NONE bracket mode, leave closing headers as they are (e.g. 'else', 'catch') if (foundClosingHeader && bracketFormatMode == NONE_MODE && previousNonWSChar == '}') { if (lineBeginsWith('}')) // is closing bracket broken? { isInLineBreak = false; appendSpacePad(); } if (shouldBreakBlocks) isAppendPostBlockEmptyLineRequested = false; } //Check if a template definition as been reached, e.g. template if (newHeader == &AS_TEMPLATE) { isInTemplate = true; } // check if the found header is non-paren header isNonParenHeader = (find(nonParenHeaders.begin(), nonParenHeaders.end(), newHeader) != nonParenHeaders.end()); appendSequence(*currentHeader); goForward(currentHeader->length() - 1); // if padding is on, and a paren-header is found // then add a space pad after it. //// if (shouldPadOperators && !isNonParenHeader) //// do not need with new pad operator functions //// appendSpacePad(); // if a paren-header is found add a space after it, if needed // this checks currentLine, appendSpacePad() checks formattedLine if (!isNonParenHeader && charNum < (int) currentLine.length() && !isWhiteSpace(currentLine[charNum+1])) appendSpacePad(); // Signal that a header has been reached // *** But treat a closing while() (as in do...while) // as if it where NOT a header since a closing while() // should never have a block after it! if (!(foundClosingHeader && currentHeader == &AS_WHILE)) { isInHeader = true; if (isNonParenHeader) { isImmediatelyPostHeader = true; isInHeader = false; } } if (currentHeader == &AS_IF && previousHeader == &AS_ELSE) isInLineBreak = false; if (shouldBreakBlocks) { if (previousHeader == NULL && !foundClosingHeader && !isCharImmediatelyPostOpenBlock) { isPrependPostBlockEmptyLineRequested = true; } if (currentHeader == &AS_ELSE || currentHeader == &AS_CATCH || currentHeader == &AS_FINALLY || foundClosingHeader) { isPrependPostBlockEmptyLineRequested = false; } if (shouldBreakClosingHeaderBlocks && isCharImmediatelyPostCloseBlock) { isPrependPostBlockEmptyLineRequested = true; } } continue; } else if ((newHeader = findHeader(preDefinitionHeaders)) != NULL) { foundPreDefinitionHeader = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); if (shouldBreakBlocks) isPrependPostBlockEmptyLineRequested = true; continue; } else if ((newHeader = findHeader(preCommandHeaders)) != NULL) { foundPreCommandHeader = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); continue; } else if ((newHeader = findHeader(castOperators)) != NULL) { foundCastOperator = true; appendSequence(*newHeader); goForward(newHeader->length() - 1); continue; } } if (isInLineBreak) // OK to break line here ************************************** breakLine(); if (previousNonWSChar == '}' || currentChar == ';') { if (shouldBreakOneLineStatements && currentChar == ';' && (shouldBreakOneLineBlocks || !IS_A(bracketTypeStack->back(), SINGLE_LINE_TYPE)) && (! bracketFormatMode == NONE_MODE)) { passedSemicolon = true; } if (shouldBreakBlocks && currentHeader != NULL && parenStack->back() == 0) { isAppendPostBlockEmptyLineRequested = true; } if (currentChar != ';') currentHeader = NULL; foundQuestionMark = false; foundPreDefinitionHeader = false; foundPreCommandHeader = false; foundCastOperator = false; isInPotentialCalculation = false; } if (currentChar == ':' && shouldBreakOneLineStatements && !foundQuestionMark // not in a ... ? ... : ... sequence && !foundPreDefinitionHeader // not in a definition block (e.g. class foo : public bar && previousCommandChar != ')' // not immediately after closing paren of a method header, e.g. ASFormatter::ASFormatter(...) : ASBeautifier(...) && previousChar != ':' // not part of '::' && peekNextChar() != ':') // not part of '::' { passedColon = true; if (shouldBreakBlocks) isPrependPostBlockEmptyLineRequested = true; } if (currentChar == '?') foundQuestionMark = true; // determine if this is a potential calculation // newHeader = findHeader(operators); if (newHeader != NULL) { if (!isInPotentialCalculation) { if (find(assignmentOperators.begin(), assignmentOperators.end(), newHeader) != assignmentOperators.end()) { char peekedChar = peekNextChar(); isInPotentialCalculation = (newHeader != &AS_RETURN // %%%%%%%%%%%% && !(newHeader == &AS_EQUAL && peekedChar == '*') // %%%%%%%%%%%% && !(newHeader == &AS_EQUAL && peekedChar == '&')); // %%%%%%%%%%%% } } } else { // the following are not calculations %%%%%%%%%%%% if (currentLine.compare(charNum, 3, "new") == 0 && !isLegalNameChar(currentLine[charNum+3])) isInPotentialCalculation = false; } if (shouldPadOperators) { if (newHeader != NULL) { bool shouldPad = (newHeader != &AS_COLON_COLON && newHeader != &AS_PAREN_PAREN && newHeader != &AS_BLPAREN_BLPAREN && newHeader != &AS_PLUS_PLUS && newHeader != &AS_MINUS_MINUS && newHeader != &AS_NOT && newHeader != &AS_BIT_NOT && newHeader != &AS_ARROW && newHeader != &AS_OPERATOR && newHeader != &AS_RETURN && !(newHeader == &AS_MINUS && isInExponent()) && !(newHeader == &AS_MINUS // check for negative number $$$$$$$$$$$ && (previousNonWSChar == '(' // $$$$$$$$$$$ || previousNonWSChar == '=' // $$$$$$$$$$$ || previousNonWSChar == ',')) // $$$$$$$$$$$ && !(newHeader == &AS_PLUS && isInExponent()) && previousOperator != &AS_OPERATOR && !((newHeader == &AS_MULT || newHeader == &AS_BIT_AND) && isPointerOrReference()) && !((isInTemplate || isCharImmediatelyPostTemplate) && (newHeader == &AS_LS || newHeader == &AS_GR)) ); // pad before operator if (shouldPad && !isInBlParen && !(newHeader == &AS_COLON && !foundQuestionMark) && newHeader != &AS_SEMICOLON && newHeader != &AS_COMMA) appendSpacePad(); appendSequence(*newHeader); goForward(newHeader->length() - 1); // since this block handles '()' and '[]', // the parenStack must be updated here accordingly! if (newHeader == &AS_PAREN_PAREN || newHeader == &AS_BLPAREN_BLPAREN) parenStack->back()--; currentChar = (*newHeader)[newHeader->length() - 1]; // pad after operator // but do not pad after a '-' that is a unary-minus. if (shouldPad && !isInBlParen && !isBeforeComment() && !(newHeader == &AS_MINUS && isUnaryMinus()) && !(currentLine.compare(charNum + 1, 1, ";") == 0) && !(currentLine.compare(charNum + 1, 2, "::") == 0) ) appendSpaceAfter(); previousOperator = newHeader; continue; } } if (shouldPadParensOutside || shouldPadParensInside || shouldUnPadParens) { if (currentChar == '(') { int spacesOutsideToDelete = formattedLine.length() - 1; int spacesInsideToDelete = 0; // isInPotentialCalculation = true; // caused padding of * in pointers %%%%%%%%%%%% // compute spaces outside the opening paren to delete if (shouldUnPadParens) { char lastChar = ' '; prevIsParenHeader = false; size_t i = formattedLine.find_last_not_of(" \t"); if (i != string::npos) { spacesOutsideToDelete -= i; lastChar = formattedLine[i]; // was last word a paren header? int start; // start of the previous word for (start = i; start > 0; start--) { if (isLegalNameChar(formattedLine[start])) continue; start++; break; } // if previous word is a header, it will be a paren header const string *prevWord = ASBeautifier::findHeader(formattedLine, start, headers); if (prevWord != NULL || (formattedLine.compare(start, 6, "return") == 0 && !isLegalNameChar(formattedLine[6]))) { prevIsParenHeader = true; TRxtra(*prevWord); // trace macro } } // do not unpad operators, but leave them if already padded if (shouldPadParensOutside || prevIsParenHeader) spacesOutsideToDelete--; else if (lastChar == '|' // check for || || lastChar == '&' // check for && || lastChar == ',' || (lastChar == '>' && !foundCastOperator) || lastChar == '<' || lastChar == '?' || lastChar == ':' || lastChar == ';' || lastChar == '=' || lastChar == '+' || lastChar == '-' || (lastChar == '*' && isInPotentialCalculation) || lastChar == '/' || lastChar == '%') spacesOutsideToDelete--; if (spacesOutsideToDelete > 0) { formattedLine.erase(i + 1, spacesOutsideToDelete); spacePadNum -= spacesOutsideToDelete; } } // pad open paren outside char peekedCharOutside = peekNextChar(); if (shouldPadParensOutside) if (!(currentChar == '(' && peekedCharOutside == ')')) appendSpacePad(); appendCurrentChar(); // unpad open paren inside if (shouldUnPadParens) { size_t j = currentLine.find_first_not_of(" \t", charNum + 1); if (j != string::npos) spacesInsideToDelete = j - charNum - 1; if (shouldPadParensInside) spacesInsideToDelete--; if (spacesInsideToDelete > 0) { currentLine.erase(charNum + 1, spacesInsideToDelete); spacePadNum -= spacesInsideToDelete; } } // pad open paren inside char peekedCharInside = peekNextChar(); if (shouldPadParensInside) if (!(currentChar == '(' && peekedCharInside == ')')) appendSpaceAfter(); TRunpad('(', spacesOutsideToDelete, spacesInsideToDelete); // trace macro continue; } else if (currentChar == ')' /*|| currentChar == ']'*/) { int spacesOutsideToDelete = 0; int spacesInsideToDelete = formattedLine.length(); // unpad close paren inside if (shouldUnPadParens) { size_t i = formattedLine.find_last_not_of(" \t"); if (i != string::npos) spacesInsideToDelete = formattedLine.length() - 1 - i; if (shouldPadParensInside) spacesInsideToDelete--; if (spacesInsideToDelete > 0) { formattedLine.erase(i + 1, spacesInsideToDelete); spacePadNum -= spacesInsideToDelete; } } // pad close paren inside if (shouldPadParensInside) if (!(previousChar == '(' && currentChar == ')')) appendSpacePad(); appendCurrentChar(); // unpad close paren outside if (shouldUnPadParens) { // may have end of line comments size_t j = currentLine.find_first_not_of(" \t", charNum + 1); if (j != string::npos) if (currentLine[j] == '[' || currentLine[j] == ']') spacesOutsideToDelete = j - charNum - 1; if (shouldPadParensOutside) spacesOutsideToDelete--; // spacesOutsideToDelete--; // always leave 1 space if (spacesOutsideToDelete > 0) { currentLine.erase(charNum + 1, spacesOutsideToDelete); spacePadNum -= spacesOutsideToDelete; } } // pad close paren outside char peekedCharOutside = peekNextChar(); if (shouldPadParensOutside) if (peekedCharOutside != ';' && peekedCharOutside != ',' && peekedCharOutside != '.' && peekedCharOutside != '-') // check for -> // && !(currentChar == ']' && peekedCharOutside == '[')) appendSpaceAfter(); TRunpad(')', spacesInsideToDelete, 0 /*spacesOutsideToDelete*/); // trace macro continue; } } appendCurrentChar(); } // end of while loop * end of while loop * end of while loop * end of while loop // return a beautified (i.e. correctly indented) line. string beautifiedLine; int readyFormattedLineLength = trim(readyFormattedLine).length(); if (prependEmptyLine && readyFormattedLineLength > 0 && previousReadyFormattedLineLength > 0) { isLineReady = true; // signal that a readyFormattedLine is still waiting beautifiedLine = beautify(""); } else { isLineReady = false; beautifiedLine = beautify(readyFormattedLine); lineCommentNoBeautify = lineCommentNoIndent; lineCommentNoIndent = false; } prependEmptyLine = false; previousReadyFormattedLineLength = readyFormattedLineLength; enhance(beautifiedLine); // call the enhancer function return beautifiedLine; } /** * check if there are any indented lines ready to be read by nextLine() * * @return are there any indented lines ready? */ bool ASFormatter::hasMoreLines() const { return !endOfCodeReached; } /** * set the bracket formatting mode. * options: * astyle::NONE_MODE no formatting of brackets. * astyle::ATTACH_MODE Java, K&R style bracket placement. * astyle::BREAK_MODE ANSI C/C++ style bracket placement. * * @param mode the bracket formatting mode. */ void ASFormatter::setBracketFormatMode(BracketMode mode) { bracketFormatMode = mode; } /** * set closing header bracket breaking mode * options: * true brackets just before closing headers (e.g. 'else', 'catch') * will be broken, even if standard brackets are attached. * false closing header brackets will be treated as standard brackets. * * @param state the closing header bracket breaking mode. */ void ASFormatter::setBreakClosingHeaderBracketsMode(bool state) { shouldBreakClosingHeaderBrackets = state; } /** * set 'else if()' breaking mode * options: * true 'else' headers will be broken from their succeeding 'if' headers. * false 'else' headers will be attached to their succeeding 'if' headers. * * @param state the 'else if()' breaking mode. */ void ASFormatter::setBreakElseIfsMode(bool state) { shouldBreakElseIfs = state; } /** * set operator padding mode. * options: * true statement operators will be padded with spaces around them. * false statement operators will not be padded. * * @param state the padding mode. */ void ASFormatter::setOperatorPaddingMode(bool state) { shouldPadOperators = state; } /** * set parenthesis outside padding mode. * options: * true statement parenthesiss will be padded with spaces around them. * false statement parenthesiss will not be padded. * * @param state the padding mode. */ void ASFormatter::setParensOutsidePaddingMode(bool state) { shouldPadParensOutside = state; } /** * set parenthesis inside padding mode. * options: * true statement parenthesis will be padded with spaces around them. * false statement parenthesis will not be padded. * * @param state the padding mode. */ void ASFormatter::setParensInsidePaddingMode(bool state) { shouldPadParensInside = state; } /** * set parenthesis unpadding mode. * options: * true statement parenthesis will be unpadded with spaces removed around them. * false statement parenthesis will not be unpadded. * * @param state the padding mode. */ void ASFormatter::setParensUnPaddingMode(bool state) { shouldUnPadParens = state; } /** * set option to break/not break one-line blocks * * @param state true = break, false = don't break. */ void ASFormatter::setBreakOneLineBlocksMode(bool state) { shouldBreakOneLineBlocks = state; } /** * set option to break/not break lines consisting of multiple statements. * * @param state true = break, false = don't break. */ void ASFormatter::setSingleStatementsMode(bool state) { shouldBreakOneLineStatements = state; } /** * set option to convert tabs to spaces. * * @param state true = convert, false = don't convert. */ void ASFormatter::setTabSpaceConversionMode(bool state) { shouldConvertTabs = state; } /** * set option to break unrelated blocks of code with empty lines. * * @param state true = convert, false = don't convert. */ void ASFormatter::setBreakBlocksMode(bool state) { shouldBreakBlocks = state; } /** * set option to break closing header blocks of code (such as 'else', 'catch', ...) with empty lines. * * @param state true = convert, false = don't convert. */ void ASFormatter::setBreakClosingHeaderBlocksMode(bool state) { shouldBreakClosingHeaderBlocks = state; } /** * jump over several characters. * * @param i the number of characters to jump over. */ void ASFormatter::goForward(int i) { while (--i >= 0) getNextChar(); } /** * peek at the next unread character. * * @return the next unread character. */ char ASFormatter::peekNextChar() const { char ch = ' '; size_t peekNum = currentLine.find_first_not_of(" \t", charNum + 1); if (peekNum == string::npos) return ch; ch = currentLine[peekNum]; if (shouldConvertTabs && ch == '\t') ch = ' '; return ch; } /** * check if current placement is before a comment or line-comment * * @return is before a comment or line-comment. */ bool ASFormatter::isBeforeComment() const { bool foundComment = false; size_t peekNum = currentLine.find_first_not_of(" \t", charNum + 1); if (peekNum == string::npos) return foundComment; foundComment = (currentLine.compare(peekNum, 2, "/*") == 0 || currentLine.compare(peekNum, 2, "//") == 0); return foundComment; } /** * get the next character, increasing the current placement in the process. * the new character is inserted into the variable currentChar. * * @return whether succeded to recieve the new character. */ bool ASFormatter::getNextChar() { isInLineBreak = false; //// bool isAfterFormattedWhiteSpace = false; //// if (shouldPadOperators && !isInComment && !isInLineComment //// && !isInQuote && !doesLineStartComment && !isInPreprocessor //// && !isBeforeComment()) //// { //// int len = formattedLine.length(); //// if (len > 0 && isWhiteSpace(formattedLine[len-1])) //// isAfterFormattedWhiteSpace = true; //// } previousChar = currentChar; if (!isWhiteSpace(currentChar)) { previousNonWSChar = currentChar; if (!isInComment && !isInLineComment && !isInQuote && !isSequenceReached("/*") && !isSequenceReached("//")) previousCommandChar = previousNonWSChar; } int currentLineLength = currentLine.length(); if (charNum + 1 < currentLineLength && (!isWhiteSpace(peekNextChar()) || isInComment || isInLineComment)) { currentChar = currentLine[++charNum]; //// if (isAfterFormattedWhiteSpace) //// while (isWhiteSpace(currentChar) && charNum+1 < currentLineLength) //// currentChar = currentLine[++charNum]; if (shouldConvertTabs && currentChar == '\t') currentChar = ' '; return true; } else // end of line has been reached { if (sourceIterator->hasMoreLines()) { currentLine = sourceIterator->nextLine(); spacePadNum = 0; inLineNumber++; if (currentLine.length() == 0) { currentLine = string(" "); // a null is inserted if this is not done } // unless reading in the first line of the file, // break a new line. if (!isVirgin) isInLineBreak = true; else isVirgin = false; if (isInLineComment) isImmediatelyPostLineComment = true; isInLineComment = false; // check if is in preprocessor before line trimming if (previousNonWSChar != '\\') isInPreprocessor = false; trimNewLine(); currentChar = currentLine[charNum]; if (shouldConvertTabs && currentChar == '\t') currentChar = ' '; return true; } else { endOfCodeReached = true; return false; } } } /** * jump over the leading white space in the current line, * IF the line does not begin a comment or is in a preprocessor definition. */ void ASFormatter::trimNewLine() { int len = currentLine.length(); charNum = 0; if (isInComment || isInPreprocessor) return; while (isWhiteSpace(currentLine[charNum]) && charNum + 1 < len) ++charNum; doesLineStartComment = false; if (isSequenceReached("/*")) { charNum = 0; doesLineStartComment = true; } } /** * append a character to the current formatted line. * Unless disabled (via canBreakLine == false), first check if a * line-break has been registered, and if so break the * formatted line, and only then append the character into * the next formatted line. * * @param ch the character to append. * @param canBreakLine if true, a registered line-break */ void ASFormatter::appendChar(char ch, bool canBreakLine) { if (canBreakLine && isInLineBreak) breakLine(); formattedLine.append(1, ch); } /** * append a string sequence to the current formatted line. * Unless disabled (via canBreakLine == false), first check if a * line-break has been registered, and if so break the * formatted line, and only then append the sequence into * the next formatted line. * * @param sequence the sequence to append. * @param canBreakLine if true, a registered line-break */ void ASFormatter::appendSequence(const string &sequence, bool canBreakLine) { if (canBreakLine && isInLineBreak) breakLine(); formattedLine.append(sequence); } /** * append a space to the current formattedline, UNLESS the * last character is already a white-space character. */ void ASFormatter::appendSpacePad() { int len = formattedLine.length(); if (len > 0 && !isWhiteSpace(formattedLine[len-1])) { formattedLine.append(1, ' '); spacePadNum++; } } /** * append a space to the current formattedline, UNLESS the * next character is already a white-space character. */ void ASFormatter::appendSpaceAfter() { int len = currentLine.length(); if (charNum + 1 < len && !isWhiteSpace(currentLine[charNum+1])) { formattedLine.append(1, ' '); spacePadNum++; } } /** * register a line break for the formatted line. */ void ASFormatter::breakLine() { isLineReady = true; isInLineBreak = false; spacePadNum = 0; // queue an empty line prepend request if one exists prependEmptyLine = isPrependPostBlockEmptyLineRequested; readyFormattedLine = formattedLine; if (isAppendPostBlockEmptyLineRequested) { isAppendPostBlockEmptyLineRequested = false; isPrependPostBlockEmptyLineRequested = true; } else { isPrependPostBlockEmptyLineRequested = false; } formattedLine = ""; } /** * check if the currently reached open-bracket (i.e. '{') * opens a: * - a definition type block (such as a class or namespace), * - a command block (such as a method block) * - a static array * this method takes for granted that the current character * is an opening bracket. * * @return the type of the opened block. */ BracketType ASFormatter::getBracketType() const { BracketType returnVal; if (foundPreDefinitionHeader) returnVal = DEFINITION_TYPE; else { bool isCommandType; isCommandType = (foundPreCommandHeader || (currentHeader != NULL && isNonParenHeader) || (previousCommandChar == ')') || (previousCommandChar == ':' && !foundQuestionMark) || (previousCommandChar == ';') || ((previousCommandChar == '{' || previousCommandChar == '}') && isPreviousBracketBlockRelated)); returnVal = (isCommandType ? COMMAND_TYPE : ARRAY_TYPE); } if (isOneLineBlockReached()) returnVal = (BracketType)(returnVal | SINGLE_LINE_TYPE); return returnVal; } /** * check if the currently reached '*' or '&' character is * a pointer-or-reference symbol, or another operator. * this method takes for granted that the current character * is either a '*' or '&'. * * @return whether current character is a reference-or-pointer */ bool ASFormatter::isPointerOrReference() const { bool isPR; isPR = (!isInPotentialCalculation || IS_A(bracketTypeStack->back(), DEFINITION_TYPE) || (!isLegalNameChar(previousNonWSChar) && previousNonWSChar != ')' && previousNonWSChar != ']') ); if (!isPR) { char nextChar = peekNextChar(); isPR |= (!isWhiteSpace(nextChar) && nextChar != '-' && nextChar != '(' && nextChar != '[' && !isLegalNameChar(nextChar)); } return isPR; } /** * check if the currently reached '-' character is * a unary minus * this method takes for granted that the current character * is a '-'. * * @return whether the current '-' is a unary minus. */ bool ASFormatter::isUnaryMinus() const { return ((previousOperator == &AS_RETURN || !isalnum(previousCommandChar)) && previousCommandChar != '.' && previousCommandChar != ')' && previousCommandChar != ']'); } /** * check if the currently reached '-' or '+' character is * part of an exponent, i.e. 0.2E-5. * this method takes for granted that the current character * is a '-' or '+'. * * @return whether the current '-' is in an exponent. */ bool ASFormatter::isInExponent() const { int formattedLineLength = formattedLine.length(); if (formattedLineLength >= 2) { char prevPrevFormattedChar = formattedLine[formattedLineLength - 2]; char prevFormattedChar = formattedLine[formattedLineLength - 1]; return ((prevFormattedChar == 'e' || prevFormattedChar == 'E') && (prevPrevFormattedChar == '.' || isdigit(prevPrevFormattedChar))); } else return false; } /** * check if a one-line bracket has been reached, * i.e. if the currently reached '{' character is closed * with a complimentry '}' elsewhere on the current line, *. * @return has a one-line bracket been reached? */ bool ASFormatter::isOneLineBlockReached() const { bool isInComment = false; bool isInQuote = false; int bracketCount = 1; int currentLineLength = currentLine.length(); char quoteChar = ' '; for (int i = charNum + 1; i < currentLineLength; ++i) { char ch = currentLine[i]; if (isInComment) { if (currentLine.compare(i, 2, "*/") == 0) { isInComment = false; ++i; } continue; } if (ch == '\\') { ++i; continue; } if (isInQuote) { if (ch == quoteChar) isInQuote = false; continue; } if (ch == '"' || ch == '\'') { isInQuote = true; quoteChar = ch; continue; } if (currentLine.compare(i, 2, "//") == 0) break; if (currentLine.compare(i, 2, "/*") == 0) { isInComment = true; ++i; continue; } if (ch == '{') ++bracketCount; else if (ch == '}') --bracketCount; if (bracketCount == 0) return true; } return false; } /** * check if one of a set of headers has been reached in the * current position of the current line. * * @return a pointer to the found header. Or a NULL if no header has been reached. * @param headers a vector of headers. * @param checkBoundry */ const string *ASFormatter::findHeader(const vector &headers, bool checkBoundry) { return ASBeautifier::findHeader(currentLine, charNum, headers, checkBoundry); } /** * check if a line begins with the specified character * i.e. if the current line begins with a open bracket. * * @return true or false */ bool ASFormatter::lineBeginsWith(char charToCheck) const { bool beginsWith = false; size_t i = currentLine.find_first_not_of(" \t"); if (i != string::npos) if (currentLine[i] == charToCheck && (int) i == charNum) beginsWith = true; return beginsWith; } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/ASEnhancer.cpp.svn-base0000444000175000017500000003037011362261064026530 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASEnhancer.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ // can trace only if _DEBUG is defined (Visual C) #ifdef _DEBUG // #define TRACEswitch // #define TRACEcase // #define TRACEmisc #endif #include "astyle.h" #include #include #include #ifdef TRACEswitch #define TRswitch(a,b) *traceOut << lineNumber << a << b << endl; #else #define TRswitch(a,b) ((void)0) #endif // TRACEswitch #ifdef TRACEcase #define TRcase(a,b) *traceOut << lineNumber << a << b << endl; #else #define TRcase(a,b) ((void)0) #endif // TRACEcase #ifdef TRACEmisc #define TRmisc(a) *traceOut << lineNumber << a << endl; #else #define TRmisc(a) ((void)0) #endif // TRACEmisc using namespace astyle; // ---------------------------- functions for ASEnhancer Class ------------------------------------- /** * ASEnhancer constructor */ ASEnhancer::ASEnhancer() { // variables are initialized by init() traceOut = new stringstream; } /** * Destructor of ASEnhancer * Display the TRACE entries. */ ASEnhancer::~ASEnhancer() { #if defined(TRACEswitch) || defined(TRACEcase) || defined(TRACEmisc) string line; string msg = "TRACE Entries\n\n"; char countLine[50]; int count = 0; while (getline(*traceOut, line)) { msg += line + '\n'; count++; } sprintf(countLine, "\n%d Entries", count); msg += countLine; // write a text file to "My Documents" (Windows) char filename [_MAX_PATH + _MAX_FNAME + _MAX_EXT + 1]; // full path and filename strcpy(filename, getenv("USERPROFILE")); strcat(filename, "\\My Documents\\trace.txt"); ofstream outfile(filename); outfile << msg; outfile.close(); #endif delete traceOut; } /** * initialize the ASEnhancer. * * init() is called each time an ASFormatter object is initialized. */ void ASEnhancer::init(int _indentLength, string _indentString, bool _isCStyle, bool _caseIndent) { // formatting variables from ASFormatter and ASBeautifier indentLength = _indentLength; if (_indentString.compare(0, 1, "\t") == 0) useTabs = true; else useTabs = false; isCStyle = _isCStyle; caseIndent = _caseIndent; // emptyLineFill = _emptyLineFill; // shouldPadOperators = _shouldPadOperators; // shouldPadParenthesies = _shouldPadParenthesies; // unindent variables lineNumber = 0; bracketCount = 0; isInComment = false; isInQuote = false; switchDepth = 0; lookingForCaseBracket = false; unindentNextLine = false; #if defined(TRACEswitch) || defined(TRACEcase) || defined(TRACEmisc) *traceOut << "New file -------------" << endl; #endif } /** * additional formatting for line of source code. * every line of source code in a source code file should be sent * one after the other to this function. * unindents the case blocks * * @param line the original formatted line will be updated if necessary. */ void ASEnhancer::enhance(string &line) { static vector swVector; // stack vector of switch variables static switchVariables sw; // switch variables struct bool isSpecialChar = false; size_t lineLength; // length of the line being parsed lineNumber++; lineLength = line.length(); if (lineLength == 0) return; // FIX ************************************** // remove whitespace added at the end of some comments and some preprocessor statements // problem when shouldPadOperators is used //if(isWhiteSpaceX(line[lineLength-1])) //{ // if((! emptyLineFill) || (line.find_first_not_of(" \t") != string::npos)) // { // size_t end = line.find_last_not_of(" \t"); // line.erase(end+1, lineLength); // lineLength = line.length(); // TRmisc (" trim line "); // } //} if (unindentNextLine) // test for unindent on attached brackets { sw.unindentDepth++; sw.unindentCase = true; unindentNextLine = false; TRcase(" unindent case ", sw.unindentDepth); } // parse characters in the current line. for (size_t i = 0; i < lineLength; i++) { char ch = line[i]; // bypass whitespace if (isWhiteSpaceX(ch)) continue; // handle special characters (i.e. backslash+character such as \n, \t, ...) if (isSpecialChar) { isSpecialChar = false; continue; } if (!(isInComment) && line.compare(i, 2, "\\\\") == 0) { i++; continue; } if (!(isInComment) && ch == '\\') { isSpecialChar = true; continue; } // handle quotes (such as 'x' and "Hello Dolly") if (!(isInComment) && (ch == '"' || ch == '\'')) if (!isInQuote) { quoteChar = ch; isInQuote = true; } else if (quoteChar == ch) { isInQuote = false; continue; } if (isInQuote) continue; // handle comments if (!(isInComment) && line.compare(i, 2, "//") == 0) { // check for windows line markers if (line.compare(i + 2, 1, "\xf0") > 0) lineNumber--; break; // finished with the line } else if (!(isInComment) && line.compare(i, 2, "/*") == 0) { isInComment = true; i++; continue; } else if ((isInComment) && line.compare(i, 2, "*/") == 0) { isInComment = false; i++; continue; } if (isInComment) continue; // if we have reached this far then we are NOT in a comment or string of special characters if (line[i] == '{') // if open bracket bracketCount++; if (line[i] == '}') // if close bracket bracketCount--; // FIX ************************************** // remove whitespace added at (-1) // problem when shouldPadOperators is used //if(line[i] == '(' && shouldPadOperators && ! shouldPadParenthesies) //{ // if(line[i+1] == ' ' && line[i+2] == '-') // { // line.erase(i+1, 1); // lineLength = line.length(); // TRmisc (" fix paren minus "); // } //} if (findHeaderX(line, i, "switch", true)) // if switch statement { switchDepth++; // bump switch depth TRswitch(" switch ", switchDepth); swVector.push_back(sw); // save current variables sw.switchBracketCount = 0; sw.unindentCase = false; // don't clear case until end of switch i += 5; // bypass switch statement continue; } // just want switch statements from this point if (caseIndent || switchDepth == 0) // from here just want switch statements continue; // get next char if (line[i] == '{') // if open bracket { sw.switchBracketCount++; if (lookingForCaseBracket) // if 1st after case statement { sw.unindentCase = true; // unindenting this case sw.unindentDepth++; // bump depth lookingForCaseBracket = false; // not looking now TRcase(" unindent case ", sw.unindentDepth); } continue; } lookingForCaseBracket = false; // no opening bracket, don't indent if (line[i] == '}') // if close bracket { sw.switchBracketCount--; if (sw.switchBracketCount == 0) // if end of switch statement { TRswitch(" endsw ", switchDepth); switchDepth--; // one less switch sw = swVector.back(); // restore sw struct swVector.pop_back(); // remove last entry from stack } continue; } // look for case or default header if (findHeaderX(line, i, "case", true) || findHeaderX(line, i, "default", true)) { if (sw.unindentCase) // if unindented last case { sw.unindentCase = false; // stop unindenting previous case sw.unindentDepth--; // reduct depth } for (; i < lineLength; i++) // bypass colon { if (line[i] == ':') break; } i++; for (; i < lineLength; i++) // bypass whitespace { if (!(isWhiteSpaceX(line[i]))) break; } if (i < lineLength) // check for bracket { if (line[i] == '{') // if bracket found { sw.switchBracketCount++; unindentNextLine = true; // start unindenting on next line continue; } } lookingForCaseBracket = true; // bracket must be on next line i--; // need to check for comments continue; } } // end of for loop if (sw.unindentDepth > 0) // if need to unindent unindentLine(line, sw.unindentDepth); // do it } /** * unindent a case line by a given number of tabsets * by erasing the leading whitespace from the line argument. * is inline to aid speed and is called from only one place. * * @param line a pointer to the line to unindent. * @param unindent the number of tabsets to erase. * @return the number of characters erased */ int ASEnhancer::unindentLine(string &line, int unindent) const { size_t charsToErase; // number of chars to erase size_t whitespace = line.find_first_not_of(" \t"); if (whitespace == string::npos) // if line is blank whitespace = line.length(); // must remove padding, if any if (whitespace == 0) return 0; if (line[0] == '\t') // if formatted with tabs { charsToErase = unindent; // indents to erase if (charsToErase <= whitespace) // if there is enough whitespace line.erase(0, charsToErase); // erase the tabs else charsToErase = 0; } else { charsToErase = unindent * indentLength; // compute chars to erase if (charsToErase <= whitespace) // if there is enough whitespace line.erase(0, charsToErase); // erase the spaces else charsToErase = 0; } return charsToErase; } /** * check if a specific line position contains a header, out of several possible headers. * * @return a pointer to the found header. if no header was found then return NULL. */ bool ASEnhancer::findHeaderX(const string &line, int i, const char *header, bool checkBoundry) const { if (line.compare(i, strlen(header), header) == 0) { // check that this is a header and not a part of a longer word // (e.g. not at its begining, not at its middle...) int lineLength = line.length(); int headerEnd = i + strlen(header); char startCh = header[0]; // first char of header char endCh = 0; // char just after header char prevCh = 0; // char just before header if (headerEnd < lineLength) { endCh = line[headerEnd]; } if (i > 0) { prevCh = line[i-1]; } if (!checkBoundry) { return true; } else if (prevCh != 0 && isLegalNameCharX(startCh) && isLegalNameCharX(prevCh)) { return false; } else if (headerEnd >= lineLength || !isLegalNameCharX(startCh) || !isLegalNameCharX(endCh)) { return true; } else { return false; } } return false; } qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/formatting-astyle.pro.svn-base0000444000175000017500000000126411362261064030250 0ustar jlbrdjlbrdTARGET = formatting-astyle HEADERS = astyle.h \ astyleplugin.h \ astyledialogimpl.h SOURCES = ASBeautifier.cpp \ ASEnhancer.cpp \ ASFormatter.cpp \ ASResource.cpp \ astyle_main.cpp \ astyleplugin.cpp \ astyledialogimpl.cpp TRANSLATIONS = translations/AStyle_Russian.ts translations/AStyle_French.ts translations/AStyle_German.ts FORMS = astyle.ui CONFIG += release \ plugin DEPENDPATH = . INCLUDEPATH = . ../../src TEMPLATE = lib DESTDIR = ../../bin/plugins MOC_DIR = ../../build/moc UI_DIR = ../../build/ui macx { OBJECTS_DIR = ../../build/o/mac } unix { OBJECTS_DIR = ../../build/o/unix } win32 { OBJECTS_DIR = ../../build/o/win32 } qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyle.h.svn-base0000444000175000017500000003475611362261064025543 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * astyle.h * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 ASTYLE_H #define ASTYLE_H #include #include #include using namespace std; // disable secure version deprecation warnings for .NET 2005 #ifdef _MSC_VER #pragma warning(disable: 4996) #endif namespace astyle { /* The enums below are not recognized by 'vectors' in Microsoft Visual C++ V5 when they are part of a namespace!!! Use Visual C++ V6 or higher. */ enum BracketMode { NONE_MODE, ATTACH_MODE, BREAK_MODE, BDAC_MODE }; enum BracketType { NULL_TYPE = 0, DEFINITION_TYPE = 1, COMMAND_TYPE = 2, ARRAY_TYPE = 4, SINGLE_LINE_TYPE = 8}; class ASSourceIterator { public: int eolWindows; int eolUnix; ASSourceIterator() { eolWindows = eolUnix = 0; } virtual ~ASSourceIterator() {} virtual bool hasMoreLines() const = 0; virtual string nextLine() = 0; }; class ASResource { public: void buildAssignmentOperators(vector &assignmentOperators); void buildCastOperators(vector &castOperators); void buildHeaders(vector &headers); void buildNonAssignmentOperators(vector &nonAssignmentOperators); void buildNonParenHeaders(vector &nonParenHeaders); void buildOperators(vector &operators); void buildPreBlockStatements(vector &preBlockStatements); void buildPreCommandHeaders(vector &preCommandHeaders); void buildPreDefinitionHeaders(vector &preDefinitionHeaders); public: static const string AS_IF, AS_ELSE; static const string AS_DO, AS_WHILE; static const string AS_FOR; static const string AS_SWITCH, AS_CASE, AS_DEFAULT; static const string AS_TRY, AS_CATCH, AS_THROWS, AS_FINALLY; static const string AS_PUBLIC, AS_PROTECTED, AS_PRIVATE; static const string AS_CLASS, AS_STRUCT, AS_UNION, AS_INTERFACE, AS_NAMESPACE, AS_EXTERN; static const string AS_STATIC; static const string AS_CONST; static const string AS_SYNCHRONIZED; static const string AS_OPERATOR, AS_TEMPLATE; static const string AS_OPEN_BRACKET, AS_CLOSE_BRACKET; static const string AS_OPEN_LINE_COMMENT, AS_OPEN_COMMENT, AS_CLOSE_COMMENT; static const string AS_BAR_DEFINE, AS_BAR_INCLUDE, AS_BAR_IF, AS_BAR_EL, AS_BAR_ENDIF; static const string AS_RETURN; static const string AS_ASSIGN, AS_PLUS_ASSIGN, AS_MINUS_ASSIGN, AS_MULT_ASSIGN; static const string AS_DIV_ASSIGN, AS_MOD_ASSIGN, AS_XOR_ASSIGN, AS_OR_ASSIGN, AS_AND_ASSIGN; static const string AS_GR_GR_ASSIGN, AS_LS_LS_ASSIGN, AS_GR_GR_GR_ASSIGN, AS_LS_LS_LS_ASSIGN; static const string AS_EQUAL, AS_PLUS_PLUS, AS_MINUS_MINUS, AS_NOT_EQUAL, AS_GR_EQUAL, AS_GR_GR_GR, AS_GR_GR; static const string AS_LS_EQUAL, AS_LS_LS_LS, AS_LS_LS, AS_ARROW, AS_AND, AS_OR; static const string AS_COLON_COLON, AS_PAREN_PAREN, AS_BLPAREN_BLPAREN; static const string AS_PLUS, AS_MINUS, AS_MULT, AS_DIV, AS_MOD, AS_GR, AS_LS; static const string AS_NOT, AS_BIT_XOR, AS_BIT_OR, AS_BIT_AND, AS_BIT_NOT; static const string AS_QUESTION, AS_COLON, AS_SEMICOLON, AS_COMMA; static const string AS_ASM; static const string AS_FOREACH, AS_LOCK, AS_UNSAFE, AS_FIXED; static const string AS_GET, AS_SET, AS_ADD, AS_REMOVE; static const string AS_CONST_CAST, AS_DYNAMIC_CAST, AS_REINTERPRET_CAST, AS_STATIC_CAST; }; class ASBeautifier : protected ASResource { public: ASBeautifier(); virtual ~ASBeautifier(); virtual void init(ASSourceIterator* iter); // pointer to dynamically created iterator. void init(); virtual bool hasMoreLines() const; virtual string nextLine(); virtual string beautify(const string &line); void setTabIndentation(int length = 4, bool forceTabs = false); void setSpaceIndentation(int length = 4); void setMaxInStatementIndentLength(int max); void setMinConditionalIndentLength(int min); void setClassIndent(bool state); void setSwitchIndent(bool state); void setCaseIndent(bool state); void setBracketIndent(bool state); void setBlockIndent(bool state); void setNamespaceIndent(bool state); void setLabelIndent(bool state); void setCStyle(); void setJavaStyle(); void setEmptyLineFill(bool state); void setPreprocessorIndent(bool state); int getIndentLength(void); string getIndentString(void); bool getCaseIndent(void); bool getCStyle(void); bool getEmptyLineFill(void); protected: int getNextProgramCharDistance(const string &line, int i); bool isLegalNameChar(char ch) const; const string *findHeader(const string &line, int i, const vector &possibleHeaders, bool checkBoundry = true); string trim(const string &str); int indexOf(vector &container, const string *element); bool lineCommentNoBeautify; int inLineNumber; // for debugging protected: // inline functions // check if a specific character is a whitespace character inline bool isWhiteSpace(char ch) const { return (ch == ' ' || ch == '\t'); } private: ASBeautifier(const ASBeautifier ©); void operator=(ASBeautifier&); // not to be implemented void initStatic(); void registerInStatementIndent(const string &line, int i, int spaceTabCount, int minIndent, bool updateParenStack); string preLineWS(int spaceTabCount, int tabCount); static vector headers; static vector nonParenHeaders; // static vector preprocessorHeaders; static vector preBlockStatements; static vector assignmentOperators; static vector nonAssignmentOperators; static bool calledInitStatic; ASSourceIterator *sourceIterator; vector *waitingBeautifierStack; vector *activeBeautifierStack; vector *waitingBeautifierStackLengthStack; vector *activeBeautifierStackLengthStack; vector *headerStack; vector< vector* > *tempStacks; vector *blockParenDepthStack; vector *blockStatementStack; vector *parenStatementStack; vector *inStatementIndentStack; vector *inStatementIndentStackSizeStack; vector *parenIndentStack; vector *bracketBlockStateStack; string indentString; const string *currentHeader; const string *previousLastLineHeader; const string *immediatelyPreviousAssignmentOp; const string *probationHeader; bool isInQuote; bool isInComment; bool isInCase; bool isInQuestion; bool isInStatement; bool isInHeader; bool isCStyle; bool isInOperator; bool isInTemplate; // bool isInConst; bool isInDefine; bool isInDefineDefinition; bool classIndent; bool isInClassHeader; bool isInClassHeaderTab; bool switchIndent; bool caseIndent; bool namespaceIndent; bool bracketIndent; bool blockIndent; bool labelIndent; bool preprocessorIndent; bool isInConditional; bool isMinimalConditinalIndentSet; bool shouldForceTabIndentation; int minConditionalIndent; int parenDepth; int indentLength; int blockTabCount; int leadingWhiteSpaces; int maxInStatementIndent; int templateDepth; char quoteChar; char prevNonSpaceCh; char currentNonSpaceCh; char currentNonLegalCh; char prevNonLegalCh; int prevFinalLineSpaceTabCount; int prevFinalLineTabCount; bool emptyLineFill; bool backslashEndsPrevLine; int defineTabCount; }; class ASEnhancer { public: // functions ASEnhancer(); ~ASEnhancer(); void init(int, string, bool, bool); void enhance(string &line); private: // set by init function int indentLength; bool useTabs; bool isCStyle; bool caseIndent; // bool emptyLineFill; // bool shouldPadOperators; // bool shouldPadParenthesies; // parsing variables int lineNumber; bool isInQuote; bool isInComment; char quoteChar; // unindent variables int bracketCount; int switchDepth; bool lookingForCaseBracket; bool unindentNextLine; // stringstream for trace stringstream *traceOut; private: // private functions bool findHeaderX(const string &line, int i, const char *header, bool checkBoundry = true) const; int unindentLine(string &line, int unindent) const; private: // struct used by ParseFormattedLine function // contains variables used to unindent the case blocks struct switchVariables { int switchBracketCount; int unindentDepth; bool unindentCase; switchVariables() { // constructor switchBracketCount = 0; unindentDepth = 0; unindentCase = false; } }; private: // inline functions // check if a specific character can be used in a legal variable/method/class name inline bool isLegalNameCharX(char ch) const { return (isalnum(ch) || ch == '.' || ch == '_' || (!isCStyle && ch == '$') || (isCStyle && ch == '~')); } // check if a specific character is a whitespace character inline bool isWhiteSpaceX(char ch) const { return (ch == ' ' || ch == '\t'); } }; class ASFormatter : public ASBeautifier, private ASEnhancer { public: ASFormatter(); virtual ~ASFormatter(); virtual void init(ASSourceIterator* iter); virtual bool hasMoreLines() const; virtual string nextLine(); void setBracketFormatMode(BracketMode mode); void setBreakClosingHeaderBracketsMode(bool state); void setOperatorPaddingMode(bool mode); void setParensOutsidePaddingMode(bool mode); void setParensInsidePaddingMode(bool mode); void setParensUnPaddingMode(bool state); void setBreakOneLineBlocksMode(bool state); void setSingleStatementsMode(bool state); void setTabSpaceConversionMode(bool state); void setBreakBlocksMode(bool state); void setBreakClosingHeaderBlocksMode(bool state); void setBreakElseIfsMode(bool state); private: void ASformatter(ASFormatter ©); // not to be imlpemented void operator=(ASFormatter&); // not to be implemented void staticInit(); void goForward(int i); bool getNextChar(); char peekNextChar() const; bool isBeforeComment() const; void trimNewLine(); BracketType getBracketType() const; bool isPointerOrReference() const; bool isUnaryMinus() const; bool isInExponent() const; bool isOneLineBlockReached() const; bool isNextCharWhiteSpace() const; // $$$$$$$$$$$$$$$$$$$$$ bool lineBeginsWith(char charToCheck) const; void appendChar(char ch, bool canBreakLine = true); void appendSequence(const string &sequence, bool canBreakLine = true); void appendSpacePad(); void appendSpaceAfter(); void breakLine(); const string *findHeader(const vector &headers, bool checkBoundry = true); static vector headers; static vector nonParenHeaders; // static vector preprocessorHeaders; static vector preDefinitionHeaders; static vector preCommandHeaders; static vector operators; static vector assignmentOperators; static vector castOperators; static bool calledInitStatic; ASSourceIterator *sourceIterator; vector *preBracketHeaderStack; vector *bracketTypeStack; vector *parenStack; string readyFormattedLine; string currentLine; string formattedLine; const string *currentHeader; const string *previousOperator; // used ONLY by pad=oper char currentChar; char previousChar; char previousNonWSChar; char previousCommandChar; char quoteChar; int charNum; int spacePadNum; BracketMode bracketFormatMode; bool isVirgin; bool shouldPadOperators; bool shouldPadParensOutside; bool shouldPadParensInside; bool shouldUnPadParens; bool shouldConvertTabs; bool isInLineComment; bool isInComment; bool isInPreprocessor; bool isInTemplate; // true both in template definitions (e.g. template) and template usage (e.g. F). bool doesLineStartComment; bool isInQuote; bool isInBlParen; bool isSpecialChar; bool isNonParenHeader; bool foundQuestionMark; bool foundPreDefinitionHeader; bool foundPreCommandHeader; bool foundCastOperator; bool isInLineBreak; bool isInClosingBracketLineBreak; bool endOfCodeReached; bool lineCommentNoIndent; bool isLineReady; bool isPreviousBracketBlockRelated; bool isInPotentialCalculation; bool shouldBreakOneLineBlocks; bool shouldReparseCurrentChar; bool shouldBreakOneLineStatements; bool shouldBreakLineAfterComments; bool shouldBreakClosingHeaderBrackets; bool shouldBreakElseIfs; bool passedSemicolon; bool passedColon; bool isImmediatelyPostComment; bool isImmediatelyPostLineComment; bool isImmediatelyPostEmptyBlock; bool shouldBreakBlocks; bool shouldBreakClosingHeaderBlocks; bool isPrependPostBlockEmptyLineRequested; bool isAppendPostBlockEmptyLineRequested; bool prependEmptyLine; bool foundClosingHeader; int previousReadyFormattedLineLength; bool isInHeader; bool isImmediatelyPostHeader; private: // inline functions // append the CURRENT character (curentChar)to the current formatted line. inline void appendCurrentChar(bool canBreakLine = true) { appendChar(currentChar, canBreakLine); } // check if a specific sequence exists in the current placement of the current line inline bool isSequenceReached(const char *sequence) const { return currentLine.compare(charNum, strlen(sequence), sequence) == 0; } }; } // end of namespace astyle #endif // closes ASTYLE_H qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyle_main.cpp.svn-base0000444000175000017500000007430711362261064027076 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * astyle_main.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #include // for G++ implementation of string.compare: // compare((str), (place), (length)) instead of compare(place, length, str) #if defined(__GNUC__) && __GNUC__ < 3 #error - Use GNU C compiler release 3 or higher #endif // for namespace problem in version 5.0 #if defined(_MSC_VER) && _MSC_VER < 1200 // check for V6.0 #error - Use Microsoft compiler version 6 or higher #endif #ifdef _WIN32 #define STDCALL __stdcall #define EXPORT __declspec(dllexport) #else #define STDCALL #define EXPORT #endif #define IS_OPTION(arg,op) ((arg).compare(op)==0) #define IS_OPTIONS(arg,a,b) (IS_OPTION((arg),(a)) || IS_OPTION((arg),(b))) #define GET_PARAM(arg,op) ((arg).substr(strlen(op))) #define GET_PARAMS(arg,a,b) (isParamOption((arg),(a)) ? GET_PARAM((arg),(a)) : GET_PARAM((arg),(b))) using namespace astyle; const string _version = "1.19"; // some compilers want this declared bool parseOption(ASFormatter &formatter, const string &arg, const string &errorInfo); #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) // GUI function pointers typedef void (STDCALL *fpError)(int, char*); // pointer to callback error handler typedef char* (STDCALL *fpAlloc)(unsigned long); // pointer to callback memory allocation // GUI variables stringstream *_err = NULL; #else // console variables ostream *_err = &cerr; string _suffix = ".orig"; #endif bool _modeManuallySet; // typename will be istringstream for GUI and istream otherwise template class ASStreamIterator : public ASSourceIterator { public: ASStreamIterator(T *in); virtual ~ASStreamIterator(); bool hasMoreLines() const; string nextLine(); private: T * inStream; string buffer; }; template ASStreamIterator::ASStreamIterator(T *in) { inStream = in; buffer.reserve(200); } template ASStreamIterator::~ASStreamIterator() { // NEW operator has been removed // delete inStream; } template bool ASStreamIterator::hasMoreLines() const { return !inStream->eof(); } /** * read the input stream, delete any end of line characters, * and build a string that contains the input line. * * @return string containing the next input line minus any end of line characters */ template string ASStreamIterator::nextLine() { getline(*inStream, buffer); size_t lineLength = buffer.length(); if (lineLength > 0 && buffer[lineLength-1] == '\r') { eolWindows++; buffer.erase(lineLength - 1); } else eolUnix++; return string(buffer); } /* template string ASStreamIterator::nextLine() { char *srcPtr; char *filterPtr; inStream->getline(buffer, 2047); srcPtr = filterPtr = buffer; while (*srcPtr != 0) { if (*srcPtr != '\r') *filterPtr++ = *srcPtr; srcPtr++; } *filterPtr = 0; return string(buffer); } */ template bool parseOptions(ASFormatter &formatter, const ITER &optionsBegin, const ITER &optionsEnd, const string &errorInfo) { ITER option; bool ok = true; string arg, subArg; for (option = optionsBegin; option != optionsEnd; ++option) { arg = *option; if (arg.compare(0, 2, "--") == 0) ok &= parseOption(formatter, arg.substr(2), errorInfo); else if (arg[0] == '-') { size_t i; for (i = 1; i < arg.length(); ++i) { if (isalpha(arg[i]) && i > 1) { ok &= parseOption(formatter, subArg, errorInfo); subArg = ""; } subArg.append(1, arg[i]); } ok &= parseOption(formatter, subArg, errorInfo); subArg = ""; } else { ok &= parseOption(formatter, arg, errorInfo); subArg = ""; } } return ok; } bool isParamOption(const string &arg, const char *option) { bool retVal = arg.compare(0, strlen(option), option) == 0; // if comparing for short option, 2nd char of arg must be numeric if (retVal && strlen(option) == 1 && arg.length() > 1) if (!isdigit(arg[1])) retVal = false; return retVal; } bool isParamOption(const string &arg, const char *option1, const char *option2) { return isParamOption(arg, option1) || isParamOption(arg, option2); } void manuallySetJavaStyle(ASFormatter &formatter) { formatter.setJavaStyle(); _modeManuallySet = true; } void manuallySetCStyle(ASFormatter &formatter) { formatter.setCStyle(); _modeManuallySet = true; } bool parseOption(ASFormatter &formatter, const string &arg, const string &errorInfo) { if ( IS_OPTION(arg, "style=ansi") ) { formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(BREAK_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=gnu") ) { formatter.setBlockIndent(true); formatter.setSpaceIndentation(2); formatter.setBracketFormatMode(BREAK_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=java") ) { manuallySetJavaStyle(formatter); formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setSwitchIndent(false); } else if ( IS_OPTION(arg, "style=kr") ) { //manuallySetCStyle(formatter); formatter.setBracketIndent(false); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=linux") ) { formatter.setBracketIndent(false); formatter.setSpaceIndentation(8); formatter.setBracketFormatMode(BDAC_MODE); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTIONS(arg, "c", "mode=c") ) { manuallySetCStyle(formatter); } else if ( IS_OPTIONS(arg, "j", "mode=java") ) { manuallySetJavaStyle(formatter); } else if ( isParamOption(arg, "t", "indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "t", "indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setTabIndentation(spaceNum, false); } else if ( isParamOption(arg, "T", "force-indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "T", "force-indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setTabIndentation(spaceNum, true); } else if ( IS_OPTION(arg, "indent=tab") ) { formatter.setTabIndentation(4); } else if ( isParamOption(arg, "s", "indent=spaces=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "s", "indent=spaces="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) (*_err) << "Error in param: " << arg << endl; else formatter.setSpaceIndentation(spaceNum); } else if ( IS_OPTION(arg, "indent=spaces") ) { formatter.setSpaceIndentation(4); } else if ( isParamOption(arg, "m", "min-conditional-indent=") ) { int minIndent = 8; string minIndentParam = GET_PARAMS(arg, "m", "min-conditional-indent="); if (minIndentParam.length() > 0) minIndent = atoi(minIndentParam.c_str()); if (minIndent > 40) (*_err) << "Error in param: " << arg << endl; else formatter.setMinConditionalIndentLength(minIndent); } else if ( isParamOption(arg, "M", "max-instatement-indent=") ) { int maxIndent = 40; string maxIndentParam = GET_PARAMS(arg, "M", "max-instatement-indent="); if (maxIndentParam.length() > 0) maxIndent = atoi(maxIndentParam.c_str()); if (maxIndent > 80) (*_err) << "Error in param: " << arg << endl; else formatter.setMaxInStatementIndentLength(maxIndent); } else if ( IS_OPTIONS(arg, "B", "indent-brackets") ) { formatter.setBracketIndent(true); } else if ( IS_OPTIONS(arg, "G", "indent-blocks") ) { formatter.setBlockIndent(true); } else if ( IS_OPTIONS(arg, "N", "indent-namespaces") ) { formatter.setNamespaceIndent(true); } else if ( IS_OPTIONS(arg, "C", "indent-classes") ) { formatter.setClassIndent(true); } else if ( IS_OPTIONS(arg, "S", "indent-switches") ) { formatter.setSwitchIndent(true); } else if ( IS_OPTIONS(arg, "K", "indent-cases") ) { formatter.setCaseIndent(true); } else if ( IS_OPTIONS(arg, "L", "indent-labels") ) { formatter.setLabelIndent(true); } else if ( IS_OPTION(arg, "brackets=break-closing-headers") ) { formatter.setBreakClosingHeaderBracketsMode(true); } else if ( IS_OPTIONS(arg, "b", "brackets=break") ) { formatter.setBracketFormatMode(BREAK_MODE); } else if ( IS_OPTIONS(arg, "a", "brackets=attach") ) { formatter.setBracketFormatMode(ATTACH_MODE); } else if ( IS_OPTIONS(arg, "l", "brackets=linux") ) { formatter.setBracketFormatMode(BDAC_MODE); } else if ( IS_OPTIONS(arg, "O", "one-line=keep-blocks") ) { formatter.setBreakOneLineBlocksMode(false); } else if ( IS_OPTIONS(arg, "o", "one-line=keep-statements") ) { formatter.setSingleStatementsMode(false); } else if ( IS_OPTIONS(arg, "P", "pad=paren") ) { formatter.setParensOutsidePaddingMode(true); formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "d", "pad=paren-out") ) { formatter.setParensOutsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "D", "pad=paren-in") ) { formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "U", "unpad=paren") ) { formatter.setParensUnPaddingMode(true); } else if ( IS_OPTIONS(arg, "p", "pad=oper") ) { formatter.setOperatorPaddingMode(true); } else if ( IS_OPTIONS(arg, "E", "fill-empty-lines") ) { formatter.setEmptyLineFill(true); } else if ( IS_OPTION(arg, "indent-preprocessor") ) { formatter.setPreprocessorIndent(true); } else if ( IS_OPTIONS(arg, "V", "convert-tabs") ) { formatter.setTabSpaceConversionMode(true); } else if ( IS_OPTION(arg, "break-blocks=all") ) { formatter.setBreakBlocksMode(true); formatter.setBreakClosingHeaderBlocksMode(true); } else if ( IS_OPTION(arg, "break-blocks") ) { formatter.setBreakBlocksMode(true); } else if ( IS_OPTION(arg, "break-elseifs") ) { formatter.setBreakElseIfsMode(true); } // Options used by GUI #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) else { if (_err->str().length() == 0) (*_err) << errorInfo << endl; (*_err) << endl << arg; return false; // unknown option } // Options used by console #else else if ( isParamOption(arg, "suffix=") ) { string suffixParam = GET_PARAM(arg, "suffix="); if (suffixParam.length() > 0) _suffix = suffixParam; } else if ( IS_OPTIONS(arg, "X", "errors-to-standard-output") ) { _err = &cout; } else if ( IS_OPTIONS(arg, "v", "version") ) { (*_err) << "Artistic Style " << _version << endl; exit(1); } else { (*_err) << errorInfo << arg << endl; return false; // unknown option } #endif // End of parseOption function return true; //o.k. } #if defined(ASTYLE_GUI) || defined(ASTYLE_DLL) // ************************* GUI functions ***************************************************** /* * IMPORTANT linker must have the command line parameter /EXPORT:AStyleMain=_AStyleMain@16 * For Dll only - "warning C4702: unreachable code" in the header * is caused by using the Optimization options . * /O2 Maximize speed * /Og Global optimizations * /Ob2 Any suitable inline expansion * This is a bug in the Microsoft compiler. The program runs over twice as fast * with the options set. There hasn't been any problem so far. */ extern "C" EXPORT char* STDCALL AStyleMain(char* lpTextIn, // pointer to the data to be formatted char* lpOptions, // pointer to AStyle options, separated by \n fpError fpErrorHandler, // pointer to error handler function fpAlloc fpMemoryAlloc) // pointer to memory allocation function { if (fpErrorHandler == NULL) return NULL; if (lpTextIn == NULL) { fpErrorHandler(101, "No pointer to text input.\n- File will not be formatted."); return NULL; } if (lpOptions == NULL) { fpErrorHandler(102, "No pointer to AStyle options.\n- File will not be formatted."); return NULL; } if (fpMemoryAlloc == NULL) { fpErrorHandler(103, "No pointer to memory allocation function.\n- File will not be formatted."); return NULL; } ASFormatter formatter; string arg; vector optionsVector; istringstream opt(lpOptions); _err = new stringstream; while (getline(opt, arg)) optionsVector.push_back(arg); parseOptions(formatter, optionsVector.begin(), optionsVector.end(), "Unknown Artistic Style options!"); if (_err->str().length() > 0) { (*_err) << "\n\n- These options will not be processed. "; fpErrorHandler(201, (char*) _err->str().c_str()); } delete _err; _err = NULL; istringstream in(lpTextIn); ASStreamIterator streamIterator(&in); ostringstream out; formatter.init(&streamIterator); while (formatter.hasMoreLines()) { out << formatter.nextLine(); if (streamIterator.eolWindows > streamIterator.eolUnix) out << '\r'; out << endl; } unsigned long textSizeOut = out.str().length(); char* textOut = fpMemoryAlloc(textSizeOut + 1); // call memory allocation function // textOut = NULL; // for testing if (textOut == NULL) { fpErrorHandler(110, "Allocation failure on Artistic Style output.\n- File will not be formatted."); return NULL; } strcpy(textOut, out.str().c_str()); return textOut; } #else void importOptions(istream &in, vector &optionsVector) { char ch; string currentToken; while (in) { currentToken = ""; do { in.get(ch); if (in.eof()) break; // treat '#' as line comments if (ch == '#') while (in) { in.get(ch); if (ch == '\n') break; } // break options on spaces, tabs or new-lines if (ch == ' ' || ch == '\t' || ch == '\n') break; else currentToken.append(1, ch); } while (in); if (currentToken.length() != 0) optionsVector.push_back(currentToken); } } bool stringEndsWith(const string &str, const string &suffix) { int strIndex = str.length() - 1; int suffixIndex = suffix.length() - 1; while (strIndex >= 0 && suffixIndex >= 0) { if (tolower(str[strIndex]) != tolower(suffix[suffixIndex])) return false; --strIndex; --suffixIndex; } return true; } void error(const char *why, const char* what) { (*_err) << why << ' ' << what << '\n' << endl; exit(1); } void printHelp() { (*_err) << endl; (*_err) << " Artistic Style " << _version.c_str() << endl; (*_err) << " by Tal Davidson\n"; (*_err) << " and Jim Pattee\n"; (*_err) << endl; (*_err) << "Usage : astyle [options] Source1.cpp Source2.cpp [...]\n"; (*_err) << " astyle [options] < Original > Beautified\n"; (*_err) << endl; (*_err) << "When indenting a specific file, the resulting indented file RETAINS the\n"; (*_err) << "original file-name. The original pre-indented file is renamed, with a\n"; (*_err) << "suffix of \".orig\" added to the original filename.\n"; (*_err) << endl; (*_err) << "By default, astyle is set up to indent C/C++/C# files, with 4 spaces per\n"; (*_err) << "indent, a maximal indentation of 40 spaces inside continuous statements,\n"; (*_err) << "and NO formatting.\n"; (*_err) << endl; (*_err) << "Option's Format:\n"; (*_err) << "----------------\n"; (*_err) << " Long options (starting with '--') must be written one at a time.\n"; (*_err) << " Short options (starting with '-') may be appended together.\n"; (*_err) << " Thus, -bps4 is the same as -b -p -s4.\n"; (*_err) << endl; (*_err) << "Predefined Style Options:\n"; (*_err) << "-------------------------\n"; (*_err) << " --style=ansi\n"; (*_err) << " ANSI style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=gnu\n"; (*_err) << " GNU style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=kr\n"; (*_err) << " Kernighan&Ritchie style formatting/indenting.\n"; (*_err) << endl; (*_err) << " --style=linux\n"; (*_err) << " Linux mode (8 spaces per indent, break definition-block\n"; (*_err) << " brackets but attach command-block brackets).\n"; (*_err) << endl; (*_err) << " --style=java\n"; (*_err) << " Java mode, with standard java style formatting/indenting.\n"; (*_err) << endl; (*_err) << "Tab and Bracket Options:\n"; (*_err) << "------------------------\n"; (*_err) << " default indent option\n"; (*_err) << " If no indentation option is set,\n"; (*_err) << " the default option of 4 spaces will be used.\n"; (*_err) << endl; (*_err) << " --indent=spaces=# OR -s#\n"; (*_err) << " Indent using # spaces per indent. Not specifying #\n"; (*_err) << " will result in a default of 4 spaces per indent.\n"; (*_err) << endl; (*_err) << " --indent=tab OR --indent=tab=# OR -t OR -t#\n"; (*_err) << " Indent using tab characters, assuming that each\n"; (*_err) << " tab is # spaces long. Not specifying # will result\n"; (*_err) << " in a default assumption of 4 spaces per tab.\n"; (*_err) << endl; (*_err) << " --force-indent=tab=# OR -T#\n"; (*_err) << " Indent using tab characters, assuming that each\n"; (*_err) << " tab is # spaces long. Force tabs to be used in areas\n"; (*_err) << " Astyle would prefer to use spaces.\n"; (*_err) << endl; (*_err) << " default brackets option\n"; (*_err) << " If no brackets option is set,\n"; (*_err) << " the brackets will not be changed.\n"; (*_err) << endl; (*_err) << " --brackets=break OR -b\n"; (*_err) << " Break brackets from pre-block code (i.e. ANSI C/C++ style).\n"; (*_err) << endl; (*_err) << " --brackets=attach OR -a\n"; (*_err) << " Attach brackets to pre-block code (i.e. Java/K&R style).\n"; (*_err) << endl; (*_err) << " --brackets=linux OR -l\n"; (*_err) << " Break definition-block brackets and attach command-block\n"; (*_err) << " brackets.\n"; (*_err) << endl; (*_err) << " --brackets=break-closing-headers\n"; (*_err) << " Break brackets before closing headers (e.g. 'else', 'catch', ...).\n"; (*_err) << " Should be appended to --brackets=attach or --brackets=linux.\n"; (*_err) << endl; (*_err) << "Indentation options:\n"; (*_err) << "--------------------\n"; (*_err) << " --indent-classes OR -C\n"; (*_err) << " Indent 'class' blocks, so that the inner 'public:',\n"; (*_err) << " 'protected:' and 'private: headers are indented in\n"; (*_err) << " relation to the class block.\n"; (*_err) << endl; (*_err) << " --indent-switches OR -S\n"; (*_err) << " Indent 'switch' blocks, so that the inner 'case XXX:'\n"; (*_err) << " headers are indented in relation to the switch block.\n"; (*_err) << endl; (*_err) << " --indent-cases OR -K\n"; (*_err) << " Indent case blocks from the 'case XXX:' headers.\n"; (*_err) << " Case statements not enclosed in blocks are NOT indented.\n"; (*_err) << endl; (*_err) << " --indent-brackets OR -B\n"; (*_err) << " Add extra indentation to '{' and '}' block brackets.\n"; (*_err) << endl; (*_err) << " --indent-blocks OR -G\n"; (*_err) << " Add extra indentation entire blocks (including brackets).\n"; (*_err) << endl; (*_err) << " --indent-namespaces OR -N\n"; (*_err) << " Indent the contents of namespace blocks.\n"; (*_err) << endl; (*_err) << " --indent-labels OR -L\n"; (*_err) << " Indent labels so that they appear one indent less than\n"; (*_err) << " the current indentation level, rather than being\n"; (*_err) << " flushed completely to the left (which is the default).\n"; (*_err) << endl; (*_err) << " --indent-preprocessor\n"; (*_err) << " Indent multi-line #define statements.\n"; (*_err) << endl; (*_err) << " --max-instatement-indent=# OR -M#\n"; (*_err) << " Indent a maximal # spaces in a continuous statement,\n"; (*_err) << " relative to the previous line.\n"; (*_err) << endl; (*_err) << " --min-conditional-indent=# OR -m#\n"; (*_err) << " Indent a minimal # spaces in a continuous conditional\n"; (*_err) << " belonging to a conditional header.\n"; (*_err) << endl; (*_err) << "Formatting options:\n"; (*_err) << "-------------------\n"; (*_err) << " --break-blocks\n"; (*_err) << " Insert empty lines around unrelated blocks, labels, classes, ...\n"; (*_err) << endl; (*_err) << " --break-blocks=all\n"; (*_err) << " Like --break-blocks, except also insert empty lines \n"; (*_err) << " around closing headers (e.g. 'else', 'catch', ...).\n"; (*_err) << endl; (*_err) << " --break-elseifs\n"; (*_err) << " Break 'else if()' statements into two different lines.\n"; (*_err) << endl; (*_err) << " --pad=oper OR -p\n"; (*_err) << " Insert space paddings around operators.\n"; (*_err) << endl; (*_err) << " --pad=paren OR -P\n"; (*_err) << " Insert space padding around parenthesis on both the outside\n"; (*_err) << " and the inside.\n"; (*_err) << endl; (*_err) << " --pad=paren-out OR -d\n"; (*_err) << " Insert space padding around parenthesis on the outside only.\n"; (*_err) << endl; (*_err) << " --pad=paren-in OR -D\n"; (*_err) << " Insert space padding around parenthesis on the inside only.\n"; (*_err) << endl; (*_err) << " --unpad=paren OR -U\n"; (*_err) << " Remove unnecessary space padding around parenthesis. This\n"; (*_err) << " can be used in combination with the 'pad' options above.\n"; (*_err) << endl; (*_err) << " --one-line=keep-statements OR -o\n"; (*_err) << " Don't break lines containing multiple statements into\n"; (*_err) << " multiple single-statement lines.\n"; (*_err) << endl; (*_err) << " --one-line=keep-blocks OR -O\n"; (*_err) << " Don't break blocks residing completely on one line.\n"; (*_err) << endl; (*_err) << " --convert-tabs OR -V\n"; (*_err) << " Convert tabs to spaces.\n"; (*_err) << endl; (*_err) << " --fill-empty-lines OR -E\n"; (*_err) << " Fill empty lines with the white space of their\n"; (*_err) << " previous lines.\n"; (*_err) << endl; (*_err) << " --mode=c OR -c\n"; (*_err) << " Indent a C, C++ or C# source file (this is the default).\n"; (*_err) << endl; (*_err) << " --mode=java OR -j\n"; (*_err) << " Indent a Java(TM) source file.\n"; (*_err) << endl; (*_err) << "Other options:\n"; (*_err) << "--------------\n"; (*_err) << " --suffix=####\n"; (*_err) << " Append the suffix #### instead of '.orig' to original filename.\n"; (*_err) << endl; (*_err) << " --options=####\n"; (*_err) << " Specify an options file #### to read and use.\n"; (*_err) << endl; (*_err) << " --options=none\n"; (*_err) << " Disable the default options file.\n"; (*_err) << " Only the command-line parameters will be used.\n"; (*_err) << endl; (*_err) << " --errors-to-standard-output OR -X\n"; (*_err) << " Print errors and help information to standard-output rather than\n"; (*_err) << " to standard-error.\n"; (*_err) << endl; (*_err) << " --version OR -v\n"; (*_err) << " Print version number.\n"; (*_err) << endl; (*_err) << " --help OR -h OR -?\n"; (*_err) << " Print this help message.\n"; (*_err) << endl; (*_err) << "Default options file:\n"; (*_err) << "---------------------\n"; (*_err) << " Artistic Style looks for a default options file in the\n"; (*_err) << " following order:\n"; (*_err) << " 1. The contents of the ARTISTIC_STYLE_OPTIONS environment\n"; (*_err) << " variable if it exists.\n"; (*_err) << " 2. The file called .astylerc in the directory pointed to by the\n"; (*_err) << " HOME environment variable ( i.e. $HOME/.astylerc ).\n"; (*_err) << " 3. The file called astylerc in the directory pointed to by the\n"; (*_err) << " USERPROFILE environment variable ( i.e. %USERPROFILE%\\astylerc ).\n"; (*_err) << " If a default options file is found, the options in this file\n"; (*_err) << " will be parsed BEFORE the command-line options.\n"; (*_err) << " Long options within the default option file may be written without\n"; (*_err) << " the preliminary '--'.\n"; (*_err) << endl; } //int main(int argc, char *argv[]) int AStyle_plugin_main(int argc, char *argv[]) { ASFormatter formatter; vector fileNameVector; vector optionsVector; string optionsFileName = ""; string arg; bool ok = true; bool shouldPrintHelp = false; bool shouldParseOptionsFile = true; _err = &cerr; _suffix = ".orig"; _modeManuallySet = false; //(*_err) << "\nArtistic Style " << _version << endl; // begin formatting // manage flags for (int i = 1; i < argc; i++) { arg = string(argv[i]); if ( IS_OPTION(arg, "--options=none") ) { shouldParseOptionsFile = false; } else if ( isParamOption(arg, "--options=") ) { optionsFileName = GET_PARAM(arg, "--options="); } else if ( IS_OPTION(arg, "-h") || IS_OPTION(arg, "--help") || IS_OPTION(arg, "-?") ) { shouldPrintHelp = true; } else if (arg[0] == '-') { optionsVector.push_back(arg); } else // file-name { fileNameVector.push_back(arg); } } // parse options file if (shouldParseOptionsFile) { if (optionsFileName.compare("") == 0) { char* env = getenv("ARTISTIC_STYLE_OPTIONS"); if (env != NULL) optionsFileName = string(env); } if (optionsFileName.compare("") == 0) { char* env = getenv("HOME"); if (env != NULL) optionsFileName = string(env) + string("/.astylerc"); } if (optionsFileName.compare("") == 0) { char* env = getenv("USERPROFILE"); if (env != NULL) optionsFileName = string(env) + string("/astylerc"); } if (optionsFileName.compare("") != 0) { ifstream optionsIn(optionsFileName.c_str()); if (optionsIn) { (*_err) << "Using default options file " << optionsFileName << endl; vector fileOptionsVector; importOptions(optionsIn, fileOptionsVector); ok = parseOptions(formatter, fileOptionsVector.begin(), fileOptionsVector.end(), string("Unknown option in default options file: ")); } optionsIn.close(); if (!ok) { (*_err) << "For help on options, type 'astyle -h' " << endl; } } } // parse options from command line ok = parseOptions(formatter, optionsVector.begin(), optionsVector.end(), string("Unknown command line option: ")); if (!ok) { (*_err) << "For help on options, type 'astyle -h' \n" << endl; exit(1); } if (shouldPrintHelp) { printHelp(); exit(1); } // if no files have been given, use cin for input and cout for output if (fileNameVector.empty()) { // display file formatting message (*_err) << "formatting cin\n" << endl; ASStreamIterator streamIterator(&cin); formatter.init(&streamIterator); while (formatter.hasMoreLines()) { cout << formatter.nextLine(); if (formatter.hasMoreLines()) cout << endl; } cout.flush(); } else { // indent the given files for (size_t i = 0; i < fileNameVector.size(); i++) { string originalFileName = fileNameVector[i]; string inFileName = originalFileName + _suffix; remove(inFileName.c_str()); // check if the file is present before rename ifstream inCheck(originalFileName.c_str()); if (!inCheck) error("Could not open input file", originalFileName.c_str()); else inCheck.close(); if (rename(originalFileName.c_str(), inFileName.c_str()) < 0) error("Could not rename ", string(originalFileName + " to " + inFileName).c_str()); ifstream in(inFileName.c_str()); if (!in) error("Could not open input file", inFileName.c_str()); ofstream out(originalFileName.c_str()); if (!out) error("Could not open output file", originalFileName.c_str()); // Unless a specific language mode has been, set the language mode // according to the file's suffix. if (!_modeManuallySet) { if (stringEndsWith(originalFileName, string(".java"))) { formatter.setJavaStyle(); } else { formatter.setCStyle(); } } // display file formatting message //(*_err) << "formatting " << originalFileName.c_str() << endl; ASStreamIterator streamIterator(&in); formatter.init(&streamIterator); while (formatter.hasMoreLines()) { out << formatter.nextLine(); if (formatter.hasMoreLines()) { if (streamIterator.eolWindows > streamIterator.eolUnix) out << '\r'; out << endl; } } out.flush(); out.close(); in.close(); } (*_err) << endl; // all files formatted } return 0; } #endif // ************************* end of console functions ***************************************** qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyleplugin.h.svn-base0000444000175000017500000000272311362261064026747 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef ASTYLEPLUGIN_H #define ASTYLEPLUGIN_H #include #include #include #include #include class AStylePlugin : public QObject, public TextEditInterface { Q_OBJECT Q_INTERFACES(TextEditInterface) public: AStylePlugin() : translator(0) {} QString menuName() const; QString text(QString text, QString selectedText, QTextCodec *codec); TextEditInterface::Action action() const; bool hasConfigDialog() const; void config(); private: mutable QTranslator * translator; }; #endif qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/ASBeautifier.cpp.svn-base0000444000175000017500000014022511362261064027065 0ustar jlbrdjlbrd/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ASBeautifier.cpp * * This file is a part of "Artistic Style" - an indentation and * reformatting tool for C, C++, C# and Java source files. * http://astyle.sourceforge.net * * The "Artistic Style" project, including all files needed to compile * it, 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 "astyle.h" #include #include #include #define INIT_CONTAINER(container, value) {if ( (container) != NULL ) delete (container); (container) = (value); } #define DELETE_CONTAINER(container) {if ( (container) != NULL ) delete (container); } namespace astyle { bool ASBeautifier::calledInitStatic = false; vector ASBeautifier::headers; vector ASBeautifier::nonParenHeaders; vector ASBeautifier::preBlockStatements; vector ASBeautifier::assignmentOperators; vector ASBeautifier::nonAssignmentOperators; /* * initialize the static vars */ void ASBeautifier::initStatic() { if (calledInitStatic) return; calledInitStatic = true; ASResource::buildHeaders(headers); ASResource::buildNonParenHeaders(nonParenHeaders); ASResource::buildAssignmentOperators(assignmentOperators); ASResource::buildNonAssignmentOperators(nonAssignmentOperators); ASResource::buildPreBlockStatements(preBlockStatements); } /** * ASBeautifier's constructor */ ASBeautifier::ASBeautifier() { initStatic(); waitingBeautifierStack = NULL; activeBeautifierStack = NULL; waitingBeautifierStackLengthStack = NULL; activeBeautifierStackLengthStack = NULL; headerStack = NULL; tempStacks = NULL; blockParenDepthStack = NULL; blockStatementStack = NULL; parenStatementStack = NULL; bracketBlockStateStack = NULL; inStatementIndentStack = NULL; inStatementIndentStackSizeStack = NULL; parenIndentStack = NULL; sourceIterator = NULL; isMinimalConditinalIndentSet = false; shouldForceTabIndentation = false; setSpaceIndentation(4); setMaxInStatementIndentLength(40); setClassIndent(false); setSwitchIndent(false); setCaseIndent(false); setBlockIndent(false); setBracketIndent(false); setNamespaceIndent(false); setLabelIndent(false); setEmptyLineFill(false); setCStyle(); setPreprocessorIndent(false); } ASBeautifier::ASBeautifier(const ASBeautifier &other) { waitingBeautifierStack = NULL; activeBeautifierStack = NULL; waitingBeautifierStackLengthStack = NULL; activeBeautifierStackLengthStack = NULL; headerStack = new vector; *headerStack = *other.headerStack; tempStacks = new vector< vector* >; vector< vector* >::iterator iter; for (iter = other.tempStacks->begin(); iter != other.tempStacks->end(); ++iter) { vector *newVec = new vector; *newVec = **iter; tempStacks->push_back(newVec); } blockParenDepthStack = new vector; *blockParenDepthStack = *other.blockParenDepthStack; blockStatementStack = new vector; *blockStatementStack = *other.blockStatementStack; parenStatementStack = new vector; *parenStatementStack = *other.parenStatementStack; bracketBlockStateStack = new vector; *bracketBlockStateStack = *other.bracketBlockStateStack; inStatementIndentStack = new vector; *inStatementIndentStack = *other.inStatementIndentStack; inStatementIndentStackSizeStack = new vector; *inStatementIndentStackSizeStack = *other.inStatementIndentStackSizeStack; parenIndentStack = new vector; *parenIndentStack = *other.parenIndentStack; sourceIterator = other.sourceIterator; lineCommentNoBeautify = other.lineCommentNoBeautify; inLineNumber = other.inLineNumber; indentString = other.indentString; currentHeader = other.currentHeader; previousLastLineHeader = other.previousLastLineHeader; immediatelyPreviousAssignmentOp = other.immediatelyPreviousAssignmentOp; probationHeader = other.probationHeader; isInQuote = other.isInQuote; isInComment = other.isInComment; isInCase = other.isInCase; isInQuestion = other.isInQuestion; isInStatement = other.isInStatement; isInHeader = other.isInHeader; isCStyle = other.isCStyle; isInOperator = other.isInOperator; isInTemplate = other.isInTemplate; // isInConst = other.isInConst; isInDefine = other.isInDefine; isInDefineDefinition = other.isInDefineDefinition; classIndent = other.classIndent; isInClassHeader = other.isInClassHeader; isInClassHeaderTab = other.isInClassHeaderTab; switchIndent = other.switchIndent; caseIndent = other.caseIndent; namespaceIndent = other.namespaceIndent; bracketIndent = other.bracketIndent; blockIndent = other.blockIndent; labelIndent = other.labelIndent; preprocessorIndent = other.preprocessorIndent; isInConditional = other.isInConditional; isMinimalConditinalIndentSet = other.isMinimalConditinalIndentSet; shouldForceTabIndentation = other.shouldForceTabIndentation; minConditionalIndent = other.minConditionalIndent; parenDepth = other.parenDepth; indentLength = other.indentLength; blockTabCount = other.blockTabCount; leadingWhiteSpaces = other.leadingWhiteSpaces; maxInStatementIndent = other.maxInStatementIndent; templateDepth = other.templateDepth; quoteChar = other.quoteChar; prevNonSpaceCh = other.prevNonSpaceCh; currentNonSpaceCh = other.currentNonSpaceCh; currentNonLegalCh = other.currentNonLegalCh; prevNonLegalCh = other.prevNonLegalCh; prevFinalLineSpaceTabCount = other.prevFinalLineSpaceTabCount; prevFinalLineTabCount = other.prevFinalLineTabCount; emptyLineFill = other.emptyLineFill; backslashEndsPrevLine = other.backslashEndsPrevLine; defineTabCount = other.defineTabCount; } /** * ASBeautifier's destructor */ ASBeautifier::~ASBeautifier() { DELETE_CONTAINER(headerStack); DELETE_CONTAINER(tempStacks); DELETE_CONTAINER(blockParenDepthStack); DELETE_CONTAINER(blockStatementStack); DELETE_CONTAINER(parenStatementStack); DELETE_CONTAINER(bracketBlockStateStack); DELETE_CONTAINER(inStatementIndentStack); DELETE_CONTAINER(inStatementIndentStackSizeStack); DELETE_CONTAINER(parenIndentStack); //DELETE_CONTAINER( sourceIterator ); } /** * initialize the ASBeautifier. * * init() should be called every time a ABeautifier object is to start * beautifying a NEW source file. * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object * that will be used to iterate through the source code. This object will be * deleted during the ASBeautifier's destruction, and thus should not be * deleted elsewhere. * * @param iter a pointer to the DYNAMICALLY CREATED ASSourceIterator object. */ void ASBeautifier::init(ASSourceIterator *iter) { sourceIterator = iter; init(); } /** * initialize the ASBeautifier. */ void ASBeautifier::init() { INIT_CONTAINER(waitingBeautifierStack, new vector); INIT_CONTAINER(activeBeautifierStack, new vector); INIT_CONTAINER(waitingBeautifierStackLengthStack, new vector); INIT_CONTAINER(activeBeautifierStackLengthStack, new vector); INIT_CONTAINER(headerStack, new vector); INIT_CONTAINER(tempStacks, new vector*>); tempStacks->push_back(new vector); INIT_CONTAINER(blockParenDepthStack, new vector); INIT_CONTAINER(blockStatementStack, new vector); INIT_CONTAINER(parenStatementStack, new vector); INIT_CONTAINER(bracketBlockStateStack, new vector); bracketBlockStateStack->push_back(true); INIT_CONTAINER(inStatementIndentStack, new vector); INIT_CONTAINER(inStatementIndentStackSizeStack, new vector); inStatementIndentStackSizeStack->push_back(0); INIT_CONTAINER(parenIndentStack, new vector); immediatelyPreviousAssignmentOp = NULL; previousLastLineHeader = NULL; isInQuote = false; isInComment = false; isInStatement = false; isInCase = false; isInQuestion = false; isInClassHeader = false; isInClassHeaderTab = false; isInHeader = false; isInOperator = false; isInTemplate = false; // isInConst = false; isInConditional = false; templateDepth = 0; parenDepth = 0; blockTabCount = 0; leadingWhiteSpaces = 0; prevNonSpaceCh = '{'; currentNonSpaceCh = '{'; prevNonLegalCh = '{'; currentNonLegalCh = '{'; prevFinalLineSpaceTabCount = 0; prevFinalLineTabCount = 0; probationHeader = NULL; backslashEndsPrevLine = false; isInDefine = false; isInDefineDefinition = false; defineTabCount = 0; } /** * set indentation style to ANSI C/C++. */ void ASBeautifier::setCStyle() { isCStyle = true; } /** * set indentation style to Java / K&R. */ void ASBeautifier::setJavaStyle() { isCStyle = false; } /** * indent using one tab per indentation */ void ASBeautifier::setTabIndentation(int length, bool forceTabs) { indentString = "\t"; indentLength = length; shouldForceTabIndentation = forceTabs; if (!isMinimalConditinalIndentSet) minConditionalIndent = indentLength * 2; } /** * indent using a number of spaces per indentation. * * @param length number of spaces per indent. */ void ASBeautifier::setSpaceIndentation(int length) { indentString = string(length, ' '); indentLength = length; if (!isMinimalConditinalIndentSet) minConditionalIndent = indentLength * 2; } /** * set the maximum indentation between two lines in a multi-line statement. * * @param max maximum indentation length. */ void ASBeautifier::setMaxInStatementIndentLength(int max) { maxInStatementIndent = max; } /** * set the minimum indentation between two lines in a multi-line condition. * * @param min minimal indentation length. */ void ASBeautifier::setMinConditionalIndentLength(int min) { minConditionalIndent = min; isMinimalConditinalIndentSet = true; } /** * set the state of the bracket indentation option. If true, brackets will * be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setBracketIndent(bool state) { bracketIndent = state; } /** * set the state of the block indentation option. If true, entire blocks * will be indented one additional indent, similar to the GNU indent style. * * @param state state of option. */ void ASBeautifier::setBlockIndent(bool state) { if (state) setBracketIndent(false); // so that we don't have both bracket and block indent blockIndent = state; } /** * set the state of the class indentation option. If true, C++ class * definitions will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setClassIndent(bool state) { classIndent = state; } /** * set the state of the switch indentation option. If true, blocks of 'switch' * statements will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setSwitchIndent(bool state) { switchIndent = state; } /** * set the state of the case indentation option. If true, lines of 'case' * statements will be indented one additional indent. * * @param state state of option. */ void ASBeautifier::setCaseIndent(bool state) { caseIndent = state; } /** * set the state of the namespace indentation option. * If true, blocks of 'namespace' statements will be indented one * additional indent. Otherwise, NO indentation will be added. * * @param state state of option. */ void ASBeautifier::setNamespaceIndent(bool state) { namespaceIndent = state; } /** * set the state of the label indentation option. * If true, labels will be indented one indent LESS than the * current indentation level. * If false, labels will be flushed to the left with NO * indent at all. * * @param state state of option. */ void ASBeautifier::setLabelIndent(bool state) { labelIndent = state; } /** * set the state of the preprocessor indentation option. * If true, multiline #define statements will be indented. * * @param state state of option. */ void ASBeautifier::setPreprocessorIndent(bool state) { preprocessorIndent = state; } /** * set the state of the empty line fill option. * If true, empty lines will be filled with the whitespace. * of their previous lines. * If false, these lines will remain empty. * * @param state state of option. */ void ASBeautifier::setEmptyLineFill(bool state) { emptyLineFill = state; } /** * get the number of spaces per indent * * @return value of indentLength option. */ int ASBeautifier::getIndentLength(void) { return indentLength; } /** * get the char used for indentation, space or tab * * @return the char used for indentation. */ string ASBeautifier::getIndentString(void) { return indentString; } /** * get the state of the case indentation option. If true, lines of 'case' * statements will be indented one additional indent. * * @return state of caseIndent option. */ bool ASBeautifier::getCaseIndent(void) { return caseIndent; } /** * get C style identifier. * If true, a C source is being indented. * If false, a Java source is being indented. * * @return state of emptyLineFill option. */ bool ASBeautifier::getCStyle(void) { return isCStyle; } /** * get the state of the empty line fill option. * If true, empty lines will be filled with the whitespace. * of their previous lines. * If false, these lines will remain empty. * * @return state of emptyLineFill option. */ bool ASBeautifier::getEmptyLineFill(void) { return emptyLineFill; } /** * check if there are any indented lines ready to be read by nextLine() * * @return are there any indented lines ready? */ bool ASBeautifier::hasMoreLines() const { return sourceIterator->hasMoreLines(); } /** * get the next indented line. * * @return indented line. */ string ASBeautifier::nextLine() { return beautify(sourceIterator->nextLine()); } /** * beautify a line of source code. * every line of source code in a source code file should be sent * one after the other to the beautify method. * * @return the indented line. * @param originalLine the original unindented line. */ string ASBeautifier::beautify(const string &originalLine) { string line; bool isInLineComment = false; bool lineStartsInComment = false; bool isInClass = false; bool isInSwitch = false; bool isImmediatelyAfterConst = false; bool isSpecialChar = false; char ch = ' '; char prevCh; string outBuffer; // the newly idented line is bufferd here int tabCount = 0; const string *lastLineHeader = NULL; bool closingBracketReached = false; int spaceTabCount = 0; char tempCh; int headerStackSize = headerStack->size(); //bool isLineInStatement = isInStatement; bool shouldIndentBrackettedLine = true; int lineOpeningBlocksNum = 0; int lineClosingBlocksNum = 0; bool previousLineProbation = (probationHeader != NULL); int i; currentHeader = NULL; lineStartsInComment = isInComment; // handle and remove white spaces around the line: // If not in comment, first find out size of white space before line, // so that possible comments starting in the line continue in // relation to the preliminary white-space. if (!isInComment) { int strlen = originalLine.length(); leadingWhiteSpaces = 0; while (leadingWhiteSpaces < strlen && isWhiteSpace(originalLine[leadingWhiteSpaces])) leadingWhiteSpaces++; line = trim(originalLine); } else { // trim the comment leaving the new leading whitespace int strlen = originalLine.length(); int trimSize = 0; while (trimSize < strlen && trimSize < leadingWhiteSpaces && isWhiteSpace(originalLine[trimSize])) trimSize++; while (trimSize < strlen && isWhiteSpace(originalLine[strlen-1])) strlen--; line = originalLine.substr(trimSize, strlen); } if (line.length() == 0) { if (emptyLineFill) return preLineWS(prevFinalLineSpaceTabCount, prevFinalLineTabCount); else return line; } // handle preprocessor commands if (isCStyle && !isInComment && (line[0] == '#' || backslashEndsPrevLine)) { if (line[0] == '#') { string preproc = trim(string(line.c_str() + 1)); // When finding a multi-lined #define statement, the original beautifier // 1. sets its isInDefineDefinition flag // 2. clones a new beautifier that will be used for the actual indentation // of the #define. This clone is put into the activeBeautifierStack in order // to be called for the actual indentation. // The original beautifier will have isInDefineDefinition = true, isInDefine = false // The cloned beautifier will have isInDefineDefinition = true, isInDefine = true if (preprocessorIndent && preproc.compare(0, 6, "define") == 0 && line[line.length() - 1] == '\\') { if (!isInDefineDefinition) { ASBeautifier *defineBeautifier; // this is the original beautifier isInDefineDefinition = true; // push a new beautifier into the active stack // this breautifier will be used for the indentation of this define defineBeautifier = new ASBeautifier(*this); activeBeautifierStack->push_back(defineBeautifier); } else { // the is the cloned beautifier that is in charge of indenting the #define. isInDefine = true; } } else if (preproc.compare(0, 2, "if") == 0) { // push a new beautifier into the stack waitingBeautifierStackLengthStack->push_back(waitingBeautifierStack->size()); activeBeautifierStackLengthStack->push_back(activeBeautifierStack->size()); waitingBeautifierStack->push_back(new ASBeautifier(*this)); } else if (preproc.compare(0, 4/*2*/, "else") == 0) { if (!waitingBeautifierStack->empty()) { // MOVE current waiting beautifier to active stack. activeBeautifierStack->push_back(waitingBeautifierStack->back()); waitingBeautifierStack->pop_back(); } } else if (preproc.compare(0, 4, "elif") == 0) { if (!waitingBeautifierStack->empty()) { // append a COPY current waiting beautifier to active stack, WITHOUT deleting the original. activeBeautifierStack->push_back(new ASBeautifier(*(waitingBeautifierStack->back()))); } } else if (preproc.compare(0, 5, "endif") == 0) { int stackLength; ASBeautifier *beautifier; if (!waitingBeautifierStackLengthStack->empty()) { stackLength = waitingBeautifierStackLengthStack->back(); waitingBeautifierStackLengthStack->pop_back(); while ((int) waitingBeautifierStack->size() > stackLength) { beautifier = waitingBeautifierStack->back(); waitingBeautifierStack->pop_back(); delete beautifier; } } if (!activeBeautifierStackLengthStack->empty()) { stackLength = activeBeautifierStackLengthStack->back(); activeBeautifierStackLengthStack->pop_back(); while ((int) activeBeautifierStack->size() > stackLength) { beautifier = activeBeautifierStack->back(); activeBeautifierStack->pop_back(); delete beautifier; } } } } // check if the last char is a backslash if (line.length() > 0) backslashEndsPrevLine = (line[line.length() - 1] == '\\'); else backslashEndsPrevLine = false; // check if this line ends a multi-line #define // if so, use the #define's cloned beautifier for the line's indentation // and then remove it from the active beautifier stack and delete it. if (!backslashEndsPrevLine && isInDefineDefinition && !isInDefine) { string beautifiedLine; ASBeautifier *defineBeautifier; isInDefineDefinition = false; defineBeautifier = activeBeautifierStack->back(); activeBeautifierStack->pop_back(); beautifiedLine = defineBeautifier->beautify(line); delete defineBeautifier; return beautifiedLine; } // unless this is a multi-line #define, return this precompiler line as is. if (!isInDefine && !isInDefineDefinition) return originalLine; } // if there exists any worker beautifier in the activeBeautifierStack, // then use it instead of me to indent the current line. if (!isInDefine && activeBeautifierStack != NULL && !activeBeautifierStack->empty()) { return activeBeautifierStack->back()->beautify(line); } // calculate preliminary indentation based on data from past lines if (!inStatementIndentStack->empty()) spaceTabCount = inStatementIndentStack->back(); for (i = 0; i < headerStackSize; i++) { isInClass = false; if (blockIndent || (!(i > 0 && (*headerStack)[i-1] != &AS_OPEN_BRACKET && (*headerStack)[i] == &AS_OPEN_BRACKET))) ++tabCount; if (isCStyle && !namespaceIndent && i >= 1 && (*headerStack)[i-1] == &AS_NAMESPACE && (*headerStack)[i] == &AS_OPEN_BRACKET) --tabCount; if (isCStyle && i >= 1 && (*headerStack)[i-1] == &AS_CLASS && (*headerStack)[i] == &AS_OPEN_BRACKET) { if (classIndent) ++tabCount; isInClass = true; } // is the switchIndent option is on, indent switch statements an additional indent. else if (switchIndent && i > 1 && (*headerStack)[i-1] == &AS_SWITCH && (*headerStack)[i] == &AS_OPEN_BRACKET ) { ++tabCount; isInSwitch = true; } } if (!lineStartsInComment && isCStyle && isInClass && classIndent && headerStackSize >= 2 && (*headerStack)[headerStackSize-2] == &AS_CLASS && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET && line[0] == '}') --tabCount; else if (!lineStartsInComment && isInSwitch && switchIndent && headerStackSize >= 2 && (*headerStack)[headerStackSize-2] == &AS_SWITCH && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET && line[0] == '}') --tabCount; if (isInClassHeader) { isInClassHeaderTab = true; tabCount += 2; } if (isInConditional) { --tabCount; } // parse characters in the current line. for (i = 0; i < (int) line.length(); i++) { tempCh = line[i]; prevCh = ch; ch = tempCh; outBuffer.append(1, ch); if (isWhiteSpace(ch)) continue; // check for utf8 characters // isalnum() will display an assert message in debug if not bypassed here if (ch < 0) continue; // handle special characters (i.e. backslash+character such as \n, \t, ...) if (isSpecialChar) { isSpecialChar = false; continue; } if (!(isInComment || isInLineComment) && line.compare(i, 2, "\\\\") == 0) { outBuffer.append(1, '\\'); i++; continue; } if (!(isInComment || isInLineComment) && ch == '\\') { isSpecialChar = true; continue; } // handle quotes (such as 'x' and "Hello Dolly") if (!(isInComment || isInLineComment) && (ch == '"' || ch == '\'')) if (!isInQuote) { quoteChar = ch; isInQuote = true; } else if (quoteChar == ch) { isInQuote = false; isInStatement = true; continue; } if (isInQuote) continue; // handle comments if (!(isInComment || isInLineComment) && line.compare(i, 2, "//") == 0) { isInLineComment = true; outBuffer.append(1, '/'); i++; continue; } else if (!(isInComment || isInLineComment) && line.compare(i, 2, "/*") == 0) { isInComment = true; outBuffer.append(1, '*'); i++; continue; } else if ((isInComment || isInLineComment) && line.compare(i, 2, "*/") == 0) { isInComment = false; outBuffer.append(1, '/'); i++; continue; } if (isInComment || isInLineComment) continue; // if we have reached this far then we are NOT in a comment or string of special character... if (probationHeader != NULL) { if (((probationHeader == &AS_STATIC || probationHeader == &AS_CONST) && ch == '{') || (probationHeader == &AS_SYNCHRONIZED && ch == '(')) { // insert the probation header as a new header isInHeader = true; headerStack->push_back(probationHeader); // handle the specific probation header isInConditional = (probationHeader == &AS_SYNCHRONIZED); if (probationHeader == &AS_CONST) isImmediatelyAfterConst = true; // isInConst = true; /* TODO: revove all references to isInConst * There is actually no more need for the global isInConst variable. * The only reason for checking const is to see if there is a const * immediately before an open-bracket. * Since CONST is now put into probation and is checked during itspost-char, * isImmediatelyAfterConst can be set by its own... */ isInStatement = false; // if the probation comes from the previous line, then indent by 1 tab count. if (previousLineProbation && ch == '{') tabCount++; previousLineProbation = false; } // dismiss the probation header probationHeader = NULL; } prevNonSpaceCh = currentNonSpaceCh; currentNonSpaceCh = ch; if (!isLegalNameChar(ch) && ch != ',' && ch != ';') { prevNonLegalCh = currentNonLegalCh; currentNonLegalCh = ch; } //if (isInConst) //{ // isInConst = false; // isImmediatelyAfterConst = true; //} if (isInHeader) { isInHeader = false; currentHeader = headerStack->back(); } else currentHeader = NULL; if (isCStyle && isInTemplate && (ch == '<' || ch == '>') && findHeader(line, i, nonAssignmentOperators) == NULL) { if (ch == '<') { ++templateDepth; } else if (ch == '>') { if (--templateDepth <= 0) { if (isInTemplate) ch = ';'; else ch = 't'; isInTemplate = false; templateDepth = 0; } } } // handle parenthesies if (ch == '(' || ch == '[' || ch == ')' || ch == ']') { if (ch == '(' || ch == '[') { if (parenDepth == 0) { parenStatementStack->push_back(isInStatement); isInStatement = true; } parenDepth++; inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); if (currentHeader != NULL) registerInStatementIndent(line, i, spaceTabCount, minConditionalIndent/*indentLength*2*/, true); else registerInStatementIndent(line, i, spaceTabCount, 0, true); } else if (ch == ')' || ch == ']') { parenDepth--; if (parenDepth == 0) { isInStatement = parenStatementStack->back(); parenStatementStack->pop_back(); ch = ' '; isInConditional = false; } if (!inStatementIndentStackSizeStack->empty()) { int previousIndentStackSize = inStatementIndentStackSizeStack->back(); inStatementIndentStackSizeStack->pop_back(); while (previousIndentStackSize < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); if (!parenIndentStack->empty()) { int poppedIndent = parenIndentStack->back(); parenIndentStack->pop_back(); if (i == 0) spaceTabCount = poppedIndent; } } } continue; } if (ch == '{') { bool isBlockOpener = false; // first, check if '{' is a block-opener or an static-array opener isBlockOpener = ((prevNonSpaceCh == '{' && bracketBlockStateStack->back()) || prevNonSpaceCh == '}' || prevNonSpaceCh == ')' || prevNonSpaceCh == ';' || isInClassHeader || isBlockOpener || isImmediatelyAfterConst || (isInDefine && (prevNonSpaceCh == '(' || prevNonSpaceCh == '_' || isalnum(prevNonSpaceCh)))); isInClassHeader = false; if (!isBlockOpener && currentHeader != NULL) { for (size_t n = 0; n < nonParenHeaders.size(); n++) if (currentHeader == nonParenHeaders[n]) { isBlockOpener = true; break; } } bracketBlockStateStack->push_back(isBlockOpener); if (!isBlockOpener) { inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); registerInStatementIndent(line, i, spaceTabCount, 0, true); parenDepth++; if (i == 0) shouldIndentBrackettedLine = false; continue; } // this bracket is a block opener... ++lineOpeningBlocksNum; if (isInClassHeader) isInClassHeader = false; if (isInClassHeaderTab) { isInClassHeaderTab = false; // decrease tab count if bracket is broken size_t firstChar = originalLine.find_first_not_of(" \t"); if (firstChar != string::npos) if (originalLine[firstChar] == '{' && (int)firstChar == i) tabCount -= 2; } blockParenDepthStack->push_back(parenDepth); blockStatementStack->push_back(isInStatement); inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size()); blockTabCount += isInStatement ? 1 : 0; parenDepth = 0; isInStatement = false; tempStacks->push_back(new vector); headerStack->push_back(&AS_OPEN_BRACKET); lastLineHeader = &AS_OPEN_BRACKET; continue; } //check if a header has been reached if (prevCh == ' ') { bool isIndentableHeader = true; const string *newHeader = findHeader(line, i, headers); if (newHeader != NULL) { // if we reached here, then this is a header... isInHeader = true; vector *lastTempStack; if (tempStacks->empty()) lastTempStack = NULL; else lastTempStack = tempStacks->back(); // if a new block is opened, push a new stack into tempStacks to hold the // future list of headers in the new block. // take care of the special case: 'else if (...)' if (newHeader == &AS_IF && lastLineHeader == &AS_ELSE) { headerStack->pop_back(); } // take care of 'else' else if (newHeader == &AS_ELSE) { if (lastTempStack != NULL) { int indexOfIf = indexOf(*lastTempStack, &AS_IF); if (indexOfIf != -1) { // recreate the header list in headerStack up to the previous 'if' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfIf - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } /* * If the above if is not true, i.e. no 'if' before the 'else', * then nothing beautiful will come out of this... * I should think about inserting an Exception here to notify the caller of this... */ } } // check if 'while' closes a previous 'do' else if (newHeader == &AS_WHILE) { if (lastTempStack != NULL) { int indexOfDo = indexOf(*lastTempStack, &AS_DO); if (indexOfDo != -1) { // recreate the header list in headerStack up to the previous 'do' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfDo - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } } } // check if 'catch' closes a previous 'try' or 'catch' else if (newHeader == &AS_CATCH || newHeader == &AS_FINALLY) { if (lastTempStack != NULL) { int indexOfTry = indexOf(*lastTempStack, &AS_TRY); if (indexOfTry == -1) indexOfTry = indexOf(*lastTempStack, &AS_CATCH); if (indexOfTry != -1) { // recreate the header list in headerStack up to the previous 'try' // from the temporary snapshot stored in lastTempStack. int restackSize = lastTempStack->size() - indexOfTry - 1; for (int r = 0; r < restackSize; r++) { headerStack->push_back(lastTempStack->back()); lastTempStack->pop_back(); } if (!closingBracketReached) tabCount += restackSize; } } } else if (newHeader == &AS_CASE) { isInCase = true; --tabCount; } else if (newHeader == &AS_DEFAULT) { isInCase = true; --tabCount; } // TODO: the following statement can never be true // because the headers have been commented out of the vector!!! //else if (newHeader == &AS_PUBLIC || newHeader == &AS_PROTECTED || newHeader == &AS_PRIVATE) //{ // if (isCStyle && !isInClassHeader) // --tabCount; // isIndentableHeader = false; //} else if (newHeader == &AS_STATIC || newHeader == &AS_SYNCHRONIZED || (newHeader == &AS_CONST && isCStyle)) { if (!headerStack->empty() && (headerStack->back() == &AS_STATIC || headerStack->back() == &AS_SYNCHRONIZED || headerStack->back() == &AS_CONST)) { isIndentableHeader = false; } else { isIndentableHeader = false; probationHeader = newHeader; } } else if (newHeader == &AS_CONST) { // this will be entered only if NOT in C style // since otherwise the CONST would be found to be a probstion header... //if (isCStyle) // isInConst = true; isIndentableHeader = false; } else if (newHeader == &AS_TEMPLATE) { if (isCStyle) isInTemplate = true; isIndentableHeader = false; } if (isIndentableHeader) { headerStack->push_back(newHeader); isInStatement = false; if (indexOf(nonParenHeaders, newHeader) == -1) { isInConditional = true; } lastLineHeader = newHeader; } else isInHeader = false; outBuffer.append(newHeader->substr(1)); i += newHeader->length() - 1; continue; } } if (isCStyle && !isalpha(prevCh) && line.compare(i, 8, "operator") == 0 && !isalnum(line[i+8])) { isInOperator = true; outBuffer.append(AS_OPERATOR.substr(1)); i += 7; continue; } if (ch == '?') isInQuestion = true; // special handling of 'case' statements if (ch == ':') { if ((int) line.length() > i + 1 && line[i+1] == ':') // look for :: { ++i; outBuffer.append(1, ':'); ch = ' '; continue; } else if (isCStyle && isInClass && prevNonSpaceCh != ')') { --tabCount; // found a 'private:' or 'public:' inside a class definition // so do nothing special } else if (isCStyle && isInClassHeader) { // found a 'class A : public B' definition // so do nothing special } else if (isInQuestion) { isInQuestion = false; } else if (isCStyle && prevNonSpaceCh == ')') { isInClassHeader = true; if (i == 0) tabCount += 2; } else { currentNonSpaceCh = ';'; // so that brackets after the ':' will appear as block-openers if (isInCase) { isInCase = false; ch = ';'; // from here on, treat char as ';' } else // is in a label (e.g. 'label1:') { if (labelIndent) --tabCount; // unindent label by one indent else tabCount = 0; // completely flush indent to left } } } if ((ch == ';' || (parenDepth > 0 && ch == ',')) && !inStatementIndentStackSizeStack->empty()) while ((int) inStatementIndentStackSizeStack->back() + (parenDepth > 0 ? 1 : 0) < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); // handle ends of statements if ((ch == ';' && parenDepth == 0) || ch == '}'/* || (ch == ',' && parenDepth == 0)*/) { if (ch == '}') { // first check if this '}' closes a previous block, or a static array... if (!bracketBlockStateStack->empty()) { bool bracketBlockState = bracketBlockStateStack->back(); bracketBlockStateStack->pop_back(); if (!bracketBlockState) { if (!inStatementIndentStackSizeStack->empty()) { // this bracket is a static array int previousIndentStackSize = inStatementIndentStackSizeStack->back(); inStatementIndentStackSizeStack->pop_back(); while (previousIndentStackSize < (int) inStatementIndentStack->size()) inStatementIndentStack->pop_back(); parenDepth--; if (i == 0) shouldIndentBrackettedLine = false; if (!parenIndentStack->empty()) { int poppedIndent = parenIndentStack->back(); parenIndentStack->pop_back(); if (i == 0) spaceTabCount = poppedIndent; } } continue; } } // this bracket is block closer... ++lineClosingBlocksNum; if (!inStatementIndentStackSizeStack->empty()) inStatementIndentStackSizeStack->pop_back(); if (!blockParenDepthStack->empty()) { parenDepth = blockParenDepthStack->back(); blockParenDepthStack->pop_back(); isInStatement = blockStatementStack->back(); blockStatementStack->pop_back(); if (isInStatement) blockTabCount--; } closingBracketReached = true; int headerPlace = indexOf(*headerStack, &AS_OPEN_BRACKET); if (headerPlace != -1) { const string *popped = headerStack->back(); while (popped != &AS_OPEN_BRACKET) { headerStack->pop_back(); popped = headerStack->back(); } headerStack->pop_back(); if (!tempStacks->empty()) { vector *temp = tempStacks->back(); tempStacks->pop_back(); delete temp; } } ch = ' '; // needed due to cases such as '}else{', so that headers ('else' tn tih case) will be identified... } /* * Create a temporary snapshot of the current block's header-list in the * uppermost inner stack in tempStacks, and clear the headerStack up to * the begining of the block. * Thus, the next future statement will think it comes one indent past * the block's '{' unless it specifically checks for a companion-header * (such as a previous 'if' for an 'else' header) within the tempStacks, * and recreates the temporary snapshot by manipulating the tempStacks. */ if (!tempStacks->back()->empty()) while (!tempStacks->back()->empty()) tempStacks->back()->pop_back(); while (!headerStack->empty() && headerStack->back() != &AS_OPEN_BRACKET) { tempStacks->back()->push_back(headerStack->back()); headerStack->pop_back(); } if (parenDepth == 0 && ch == ';') isInStatement = false; isInClassHeader = false; continue; } // check for preBlockStatements ONLY if not within parenthesies // (otherwise 'struct XXX' statements would be wrongly interpreted...) if (prevCh == ' ' && !isInTemplate && parenDepth == 0) { const string *newHeader = findHeader(line, i, preBlockStatements); if (newHeader != NULL) { isInClassHeader = true; outBuffer.append(newHeader->substr(1)); i += newHeader->length() - 1; //if (isCStyle) headerStack->push_back(newHeader); } } // Handle operators // //// // PRECHECK if a '==' or '--' or '++' operator was reached. //// // If not, then register an indent IF an assignment operator was reached. //// // The precheck is important, so that statements such as 'i--==2' are not recognized //// // to have assignment operators (here, '-=') in them . . . const string *foundAssignmentOp = NULL; const string *foundNonAssignmentOp = NULL; immediatelyPreviousAssignmentOp = NULL; // Check if an operator has been reached. foundAssignmentOp = findHeader(line, i, assignmentOperators, false); foundNonAssignmentOp = findHeader(line, i, nonAssignmentOperators, false); // Since findHeader's boundry checking was not used above, it is possible // that both an assignment op and a non-assignment op where found, // e.g. '>>' and '>>='. If this is the case, treat the LONGER one as the // found operator. if (foundAssignmentOp != NULL && foundNonAssignmentOp != NULL) if (foundAssignmentOp->length() < foundNonAssignmentOp->length()) foundAssignmentOp = NULL; else foundNonAssignmentOp = NULL; if (foundNonAssignmentOp != NULL) { if (foundNonAssignmentOp->length() > 1) { outBuffer.append(foundNonAssignmentOp->substr(1)); i += foundNonAssignmentOp->length() - 1; } } else if (foundAssignmentOp != NULL) { if (foundAssignmentOp->length() > 1) { outBuffer.append(foundAssignmentOp->substr(1)); i += foundAssignmentOp->length() - 1; } if (!isInOperator && !isInTemplate) { registerInStatementIndent(line, i, spaceTabCount, 0, false); immediatelyPreviousAssignmentOp = foundAssignmentOp; isInStatement = true; } } if (isInOperator) isInOperator = false; } // handle special cases of unindentation: /* * if '{' doesn't follow an immediately previous '{' in the headerStack * (but rather another header such as "for" or "if", then unindent it * by one indentation relative to its block. */ // indent #define lines with one less tab //if (isInDefine) // tabCount -= defineTabCount-1; if (!lineStartsInComment && !blockIndent && outBuffer.length() > 0 && outBuffer[0] == '{' && !(lineOpeningBlocksNum > 0 && lineOpeningBlocksNum == lineClosingBlocksNum) && !(headerStack->size() > 1 && (*headerStack)[headerStack->size()-2] == &AS_OPEN_BRACKET) && shouldIndentBrackettedLine) --tabCount; else if (!lineStartsInComment && outBuffer.length() > 0 && outBuffer[0] == '}' && shouldIndentBrackettedLine) --tabCount; // correctly indent one-line-blocks... else if (!lineStartsInComment && outBuffer.length() > 0 && lineOpeningBlocksNum > 0 && lineOpeningBlocksNum == lineClosingBlocksNum && previousLastLineHeader != NULL && previousLastLineHeader != &AS_OPEN_BRACKET) tabCount -= 1; //lineOpeningBlocksNum - (blockIndent ? 1 : 0); if (tabCount < 0) tabCount = 0; // take care of extra bracket indentatation option... if (bracketIndent && outBuffer.length() > 0 && shouldIndentBrackettedLine) if (outBuffer[0] == '{' || outBuffer[0] == '}') tabCount++; if (isInDefine) { if (outBuffer[0] == '#') { string preproc = trim(string(outBuffer.c_str() + 1)); if (preproc.compare(0, 6, "define") == 0) { if (!inStatementIndentStack->empty() && inStatementIndentStack->back() > 0) { defineTabCount = tabCount; } else { defineTabCount = tabCount - 1; tabCount--; } } } tabCount -= defineTabCount; } if (tabCount < 0) tabCount = 0; if (lineCommentNoBeautify) // ********************** tabCount = 0; // ********************** // finally, insert indentations into begining of line prevFinalLineSpaceTabCount = spaceTabCount; prevFinalLineTabCount = tabCount; if (shouldForceTabIndentation) { tabCount += spaceTabCount / indentLength; spaceTabCount = spaceTabCount % indentLength; } outBuffer = preLineWS(spaceTabCount, tabCount) + outBuffer; if (lastLineHeader != NULL) previousLastLineHeader = lastLineHeader; return outBuffer; } string ASBeautifier::preLineWS(int spaceTabCount, int tabCount) { string ws; for (int i = 0; i < tabCount; i++) ws += indentString; while ((spaceTabCount--) > 0) ws += string(" "); return ws; } /** * register an in-statement indent. */ void ASBeautifier::registerInStatementIndent(const string &line, int i, int spaceTabCount, int minIndent, bool updateParenStack) { int inStatementIndent; int remainingCharNum = line.length() - i; int nextNonWSChar = getNextProgramCharDistance(line, i); // if indent is around the last char in the line, indent instead 2 spaces from the previous indent if (nextNonWSChar == remainingCharNum) { int previousIndent = spaceTabCount; if (!inStatementIndentStack->empty()) previousIndent = inStatementIndentStack->back(); inStatementIndentStack->push_back(/*2*/ indentLength + previousIndent); if (updateParenStack) parenIndentStack->push_back(previousIndent); return; } if (updateParenStack) parenIndentStack->push_back(i + spaceTabCount); inStatementIndent = i + nextNonWSChar + spaceTabCount; if (i + nextNonWSChar < minIndent) inStatementIndent = minIndent + spaceTabCount; if (i + nextNonWSChar > maxInStatementIndent) inStatementIndent = indentLength * 2 + spaceTabCount; if (!inStatementIndentStack->empty() && inStatementIndent < inStatementIndentStack->back()) inStatementIndent = inStatementIndentStack->back(); inStatementIndentStack->push_back(inStatementIndent); } /** * get distance to the next non-white sspace, non-comment character in the line. * if no such character exists, return the length remaining to the end of the line. */ int ASBeautifier::getNextProgramCharDistance(const string &line, int i) { bool inComment = false; int remainingCharNum = line.length() - i; int charDistance; char ch; for (charDistance = 1; charDistance < remainingCharNum; charDistance++) { ch = line[i + charDistance]; if (inComment) { if (line.compare(i + charDistance, 2, "*/") == 0) { charDistance++; inComment = false; } continue; } else if (isWhiteSpace(ch)) continue; else if (ch == '/') { if (line.compare(i + charDistance, 2, "//") == 0) return remainingCharNum; else if (line.compare(i + charDistance, 2, "/*") == 0) { charDistance++; inComment = true; } } else return charDistance; } return charDistance; } /** * check if a specific character can be used in a legal variable/method/class name * * @return legality of the char. * @param ch the character to be checked. */ bool ASBeautifier::isLegalNameChar(char ch) const { return (isalnum(ch) || ch == '.' || ch == '_' || (!isCStyle && ch == '$') || (isCStyle && ch == '~')); } /** * check if a specific line position contains a header, out of several possible headers. * * @return a pointer to the found header. if no header was found then return NULL. */ const string *ASBeautifier::findHeader(const string &line, int i, const vector &possibleHeaders, bool checkBoundry) { int maxHeaders = possibleHeaders.size(); // const string *header = NULL; int p; for (p = 0; p < maxHeaders; p++) { const string *header = possibleHeaders[p]; if (line.compare(i, header->length(), header->c_str()) == 0) { // check that this is a header and not a part of a longer word // (e.g. not at its begining, not at its middle...) int lineLength = line.length(); int headerEnd = i + header->length(); char startCh = (*header)[0]; // first char of header char endCh = 0; // char just after header char prevCh = 0; // char just before header if (headerEnd < lineLength) { endCh = line[headerEnd]; } if (i > 0) { prevCh = line[i-1]; } if (!checkBoundry) { return header; } else if (prevCh != 0 && isLegalNameChar(startCh) && isLegalNameChar(prevCh)) { return NULL; } else if (headerEnd >= lineLength || !isLegalNameChar(startCh) || !isLegalNameChar(endCh)) { return header; } else { return NULL; } } } return NULL; } /** * find the index number of a string element in a container of strings * * @return the index number of element in the ocntainer. -1 if element not found. * @param container a vector of strings. * @param element the element to find . */ int ASBeautifier::indexOf(vector &container, const string *element) { vector::const_iterator where; where = find(container.begin(), container.end(), element); if (where == container.end()) return -1; else return where - container.begin(); } /** * trim removes the white space surrounding a line. * * @return the trimmed line. * @param str the line to trim. */ string ASBeautifier::trim(const string &str) { int start = 0; int end = str.length() - 1; while (start < end && isWhiteSpace(str[start])) start++; while (start <= end && isWhiteSpace(str[end])) end--; string returnStr(str, start, end + 1 - start); return returnStr; } } // end namespace astyle qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyledialogimpl.cpp.svn-base0000444000175000017500000002647511362261064030137 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include #include #include #include "astyledialogimpl.h" // int AStyle_plugin_main(int argc, char *argv[]); // AStyleDialogImpl::AStyleDialogImpl( QWidget * parent, Qt::WFlags f) : QDialog(parent, f) { setupUi(this); comboBox->clear(); // No translation! comboBox->addItems(QStringList() << "none" << "break" << "attach" << "linux"); m_textSample = "namespace foospace\n{\nint Foo()\n{\nif (isBar)\n{\nbar();\nreturn 1;\n}\n" "else if(isNone)\n{\nswitch (foo){\ncase 1:\na+=1;\nbreak;\n" "case 2:\n{\na+=2;\nbreak;\n}\n}\n}\n}\n}"; // textEdit->setPlainText(m_textSample); indentation->setDisabled( true ); formatting->setDisabled( true ); #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Dialog"); ansi->setChecked( settings.value("ansi", false).toBool() ); kr->setChecked( settings.value("kr", false).toBool() ); Linux->setChecked( settings.value("linux", false).toBool() ); gnu->setChecked( settings.value("gnu", false).toBool() ); java->setChecked( settings.value("java", false).toBool() ); custom->setChecked( settings.value("custom", false).toBool() ); checkBox1->setChecked( settings.value("checkBox1", false).toBool() ); checkBox2->setChecked( settings.value("checkBox2", false).toBool() ); checkBox3->setChecked( settings.value("checkBox3", false).toBool() ); checkBox4->setChecked( settings.value("checkBox4", false).toBool() ); checkBox5->setChecked( settings.value("checkBox5", false).toBool() ); checkBox6->setChecked( settings.value("checkBox6", false).toBool() ); checkBox7->setChecked( settings.value("checkBox7", false).toBool() ); checkBox8->setChecked( settings.value("checkBox8", false).toBool() ); checkBox9->setChecked( settings.value("checkBox9", false).toBool() ); checkBox10->setChecked( settings.value("checkBox10", false).toBool() ); checkBox11->setChecked( settings.value("checkBox11", false).toBool() ); checkBox12->setChecked( settings.value("checkBox12", false).toBool() ); checkBox13->setChecked( settings.value("checkBox13", false).toBool() ); checkBox14->setChecked( settings.value("checkBox14", false).toBool() ); checkBox15->setChecked( settings.value("checkBox15", false).toBool() ); checkBox16->setChecked( settings.value("checkBox16", false).toBool() ); checkBox17->setChecked( settings.value("checkBox17", false).toBool() ); checkBox18->setChecked( settings.value("checkBox18", false).toBool() ); spacesSize->setValue( settings.value("spacesSize", false).toInt() ); comboBox->setCurrentIndex( settings.value("comboBox", false).toInt() ); settings.endGroup(); } // QStringList AStyleDialogImpl::args() { QStringList s; if( ansi->isChecked() ) s << "--style=ansi"; else if( kr->isChecked() ) s << "--style=kr"; else if( Linux->isChecked() ) s << "--style=linux"; else if( gnu->isChecked() ) s << "--style=gnu"; else if( java->isChecked() ) s << "--style=java"; else { if( checkBox1->isChecked() ) s << QString().sprintf("--indent=tab=%d", spacesSize->value()); else s << QString().sprintf("--indent=spaces=%d", spacesSize->value()); if( checkBox2->isChecked() ) s << QString().sprintf("--force-indent=tab=%d", spacesSize->value()); if( checkBox3->isChecked() ) s << "--convert-tabs"; if( checkBox4->isChecked() ) s << "--fill-empty-lines"; if( checkBox5->isChecked() ) s << "--indent-classes"; if( checkBox6->isChecked() ) s << "--indent-switches"; if( checkBox7->isChecked() ) s << "--indent-cases"; if( checkBox8->isChecked() ) s << "--indent-brackets"; if( checkBox9->isChecked() ) s << "--indent-blocks"; if( checkBox10->isChecked() ) s << "--indent-namespaces"; if( checkBox11->isChecked() ) s << "--indent-labels"; if( checkBox12->isChecked() ) s << "--indent-preprocessor"; if( comboBox->currentText() != "none" ) s << "--brackets="+comboBox->currentText(); // Formatting tab if( checkBox13->isChecked() ) s << "--break-blocks=all"; if( checkBox14->isChecked() ) s << "--break-elseifs"; if( checkBox15->isChecked() ) s << "--pad=oper"; if( checkBox16->isChecked() ) s << "--pad=paren"; if( checkBox17->isChecked() ) s << "--one-line=keep-statements"; if( checkBox18->isChecked() ) s << "--one-line=keep-blocks"; } return s; } // void AStyleDialogImpl::on_okButton_clicked() { #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Arguments"); settings.setValue("arguments", args()); settings.endGroup(); settings.beginGroup("Dialog"); settings.setValue("ansi", ansi->isChecked()); settings.setValue("kr", kr->isChecked()); settings.setValue("linux", Linux->isChecked()); settings.setValue("gnu", gnu->isChecked()); settings.setValue("java", java->isChecked()); settings.setValue("custom", custom->isChecked()); settings.setValue("checkBox1", checkBox1->isChecked()); settings.setValue("checkBox2", checkBox2->isChecked()); settings.setValue("checkBox3", checkBox3->isChecked()); settings.setValue("checkBox4", checkBox4->isChecked()); settings.setValue("checkBox5", checkBox5->isChecked()); settings.setValue("checkBox6", checkBox6->isChecked()); settings.setValue("checkBox7", checkBox7->isChecked()); settings.setValue("checkBox8", checkBox8->isChecked()); settings.setValue("checkBox9", checkBox9->isChecked()); settings.setValue("checkBox10", checkBox10->isChecked()); settings.setValue("checkBox11", checkBox11->isChecked()); settings.setValue("checkBox12", checkBox12->isChecked()); settings.setValue("checkBox13", checkBox13->isChecked()); settings.setValue("checkBox14", checkBox14->isChecked()); settings.setValue("checkBox15", checkBox15->isChecked()); settings.setValue("checkBox16", checkBox16->isChecked()); settings.setValue("checkBox17", checkBox17->isChecked()); settings.setValue("checkBox18", checkBox18->isChecked()); settings.setValue("spacesSize", spacesSize->value()); settings.setValue("comboBox", comboBox->currentIndex()); settings.endGroup(); } // void AStyleDialogImpl::on_gnu_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_ansi_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_Linux_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_java_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_kr_toggled(bool checked) { if( !checked ) return; indentation->setDisabled( checked ); formatting->setDisabled( checked ); sample(); } // void AStyleDialogImpl::on_custom_toggled(bool checked) { if( !checked ) return; indentation->setEnabled( checked ); formatting->setEnabled( checked ); sample(); } // #include void AStyleDialogImpl::sample() { textEdit->setPlainText(m_textSample); // Find temp filename QString f; int numTempFile = 0; do { numTempFile++; f = QDir::tempPath()+"/astyle-plugin_"+QString::number(numTempFile)+".cpp"; } while( QFile::exists( f ) ); // Open temp file for writing QFile file( f ); if (!file.open(QIODevice::WriteOnly | QIODevice::Text ) ) { textEdit->setPlainText( m_textSample ); return; } file.write( textEdit->toPlainText().toLocal8Bit() ); file.close(); // int nbArgs = args().count(); char **argv = new char*[nbArgs+2]; // argv[0] = NULL; int n = 1; foreach(QString s, args() ) { argv[n] = new char[s.length()+1]; strcpy(argv[n], s.toLocal8Bit().data()); n++; } // QByteArray array( f.toLocal8Bit() ); argv[n] = new char[f.length()+1]; strcpy(argv[n], array.data()); // Call astyle formatter AStyle_plugin_main(n+1, argv); for(int i=1; isetPlainText( formattedContent ); else textEdit->setPlainText( m_textSample ); textArgs->setText( "astyle "+args().join(" ") ); } // void AStyleDialogImpl::on_comboBox_currentIndexChanged(QString ) { sample(); } // void AStyleDialogImpl::on_checkBox13_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox14_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox16_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox17_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox15_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox18_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox12_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox11_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox10_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox9_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox8_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox3_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox2_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_spacesSize_valueChanged(int ) { sample(); } // void AStyleDialogImpl::on_qt_spinbox_lineedit_textChanged(QString ) { sample(); } // void AStyleDialogImpl::on_checkBox5_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox7_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox1_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox4_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_checkBox6_toggled(bool checked) { sample(); } // void AStyleDialogImpl::on_aboutButton_clicked() { QMessageBox::about(0, tr("Artistic Style Formatter Plugin"), tr(" AStyle plugin for QDevelop\n" " Copyright (c) 2006 Jean-Luc Biord\n\n" " jlbiord@qtfr.org\n\n" "Part of this plugin is Artistic Style - an indentation and\n" " reformatting tool for C, C++, C# and Java source files.\n" " http://astyle.sourceforge.net\n\n") ); } // qdevelop-v0.28/plugins/formatting-astyle/.svn/text-base/astyleplugin.cpp.svn-base0000444000175000017500000000776711362261064027317 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include #include #include #include #include "astyledialogimpl.h" #include "astyleplugin.h" // int AStyle_plugin_main(int argc, char *argv[]); // QString AStylePlugin::menuName() const { if (!translator) { QString language = QLocale::languageToString( QLocale::system().language() ); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/../translations/formatting-astyle"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations/formatting-astyle"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); translator = new QTranslator; translator->load(translationsDir.absoluteFilePath("AStyle_"+language+".qm")); if (translator->isEmpty()) { // CMake workaround if (QFile::exists(QCoreApplication::applicationDirPath() + "/AStyle_"+language+".qm")) translator->load(QCoreApplication::applicationDirPath() + "/AStyle_"+language+".qm"); if (translator->isEmpty()) { // Qmake workaround translator->load(QCoreApplication::applicationDirPath() + "/../plugins/formatting-astyle/translations/AStyle_"+language+".qm"); } } QCoreApplication::installTranslator(translator); } return tr("Artistic Style Formatter Plugin"); } // TextEditInterface::Action AStylePlugin::action() const { return TextEditInterface::ReplaceAll; } // QString AStylePlugin::text(QString text, QString selectedText, QTextCodec *codec) { #ifdef Q_OS_WIN32 QSettings settings(QDir::homePath()+"/Application Data/astyle-plugin.ini", QSettings::IniFormat); #else QSettings settings("astyle-plugin"); #endif settings.beginGroup("Arguments"); QStringList arguments = settings.value("arguments", "--style=ansi").toStringList(); settings.endGroup(); // Find temp filename QString f; int numTempFile = 0; do { numTempFile++; f = QDir::tempPath()+"/astyle-plugin_"+QString::number(numTempFile)+".cpp"; } while( QFile::exists( f ) ); // Open temp file for writing QFile file( f ); if (!file.open(QIODevice::WriteOnly | QIODevice::Text ) ) return QString(); file.write( text.toLocal8Bit() ); file.close(); // int nbArgs = arguments.count(); char **argv = new char*[nbArgs+2]; // argv[0] = NULL; int n = 1; foreach(QString s, arguments ) { argv[n] = new char[s.length()+1]; strcpy(argv[n], s.toLocal8Bit().data()); n++; } // QByteArray array( f.toLocal8Bit() ); argv[n] = new char[f.length()+1]; strcpy(argv[n], array.data()); // Call astyle formatter AStyle_plugin_main(n+1, argv); for(int i=1; iexec(); delete dialog; } // Q_EXPORT_PLUGIN2(pnp_textplugin, AStylePlugin) qdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/entries0000444000175000017500000000133611362261064025175 0ustar jlbrdjlbrd10 dir 468 http://qdevelop.googlecode.com/svn/tags/v0.28/plugins/tools-regexp-planner/translations http://qdevelop.googlecode.com/svn 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 31becf8c-a71e-0410-8e62-47ffcaada4dd RePlanner_Russian.ts file 2010-04-17T07:24:36.246878Z f55985479c75015a10b2750b7a7de1de 2009-03-29T16:06:34.373187Z 447 Lord.Divius 4009 RePlanner_French.ts file 2010-04-17T07:24:36.246878Z 0498fbb80a83a9f4af09accefc4ad646 2009-03-29T16:06:34.373187Z 447 Lord.Divius 3312 RePlanner_German.ts file 2010-04-17T07:24:36.246878Z d929e9a0168ce883a897a0a37bf68aba 2009-03-29T21:26:57.284902Z 450 ralfjung-e@gmx.de 3424 qdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/all-wcprops0000444000175000017500000000106611362261064025767 0ustar jlbrdjlbrdK 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/translations END RePlanner_Russian.ts K 25 svn:wc:ra_dav:version-url V 91 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/translations/RePlanner_Russian.ts END RePlanner_French.ts K 25 svn:wc:ra_dav:version-url V 90 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/translations/RePlanner_French.ts END RePlanner_German.ts K 25 svn:wc:ra_dav:version-url V 90 /svn/!svn/ver/465/tags/v0.28/plugins/tools-regexp-planner/translations/RePlanner_German.ts END qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjvalidindicatorlabel.h.svn-base0000444000175000017500000000424411362261064031352 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJVIALIDINDICATORLABEL_H #define MY_QPJVIALIDINDICATORLABEL_H #include /********************** CLASS DECLARATION **************************/ class QpjValidIndicatorLabel : public QLabel { Q_OBJECT public: QpjValidIndicatorLabel( const QString& text = QString(), QWidget* parent = 0 ); public slots: void setView(const QString& pattern); }; // END OF CLASS DECLARATION #endif // END OF ifndef... qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/replugin.h.svn-base0000444000175000017500000000255511362261064026473 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2009 Dmitrij "Divius" Tantsur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #ifndef REPLUGIN_H #define REPLUGIN_H #include #include #include #include class RePlugin : public QObject, public SimplePluginInterface { Q_OBJECT Q_INTERFACES(SimplePluginInterface) public: RePlugin() : translator(0) {} QString menuName() const; void start(QWidget * owner = 0); bool hasConfigDialog() const; void config(); private: mutable QTranslator * translator; }; #endif qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjregexpplannerdialog.h.svn-base0000444000175000017500000000523511362261064031411 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJREGEXPPLANNERDIALOG_H #define MY_QPJREGEXPPLANNERDIALOG_H // header files: #include // predeclarations: class QpjCheckTextEdit; class QpjValidIndicatorLabel; class QLineEdit; class QLabel; /********************** CLASS DECLARATION **************************/ class QpjRegExpPlannerDialog : public QDialog { Q_OBJECT public: QpjRegExpPlannerDialog(QWidget* parent = 0); private: QLineEdit* regExpEditor; QpjValidIndicatorLabel* indicator; QpjCheckTextEdit* checker; QLabel* labelEdit; QLabel* labelEmpty; QLabel* labelCheck; QLabel* labelColour; QLabel* labelGreen; QLabel* labelBlue; QLabel* labelRed; private slots: void aboutBox(); }; // END OF CLASS DECLARATION #endif // END OF ifndef... /******************* COMMENTS AND ANNOTATIONS ************************ 1, If you use the predeclarations, you do not have to load the header files. So the compiling is little bit faster. */ qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjchecktextedit.h.svn-base0000444000175000017500000000442011362261064030202 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ #ifndef MY_QPJCHECKTEXTEDIT_H #define MY_QPJCHECKTEXTEDIT_H #include /********************** CLASS DECLARATION **************************/ class QpjCheckTextEdit : public QTextEdit { Q_OBJECT public: QpjCheckTextEdit(QWidget* parent = 0); public slots: void setPatternString(const QString& pattern); protected: virtual void focusInEvent(QFocusEvent* event); private slots: void formatText(); private: QRegExp regExp; void connectToFormating(bool yes); }; // END OF CLASS DECLARATION #endif // END OF ifndef... qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjvalidindicatorlabel.cpp.svn-base0000444000175000017500000000455311362261064031710 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjvalidindicatorlabel.h" /********************** IMPLEMENTATION *****************************/ QpjValidIndicatorLabel::QpjValidIndicatorLabel(const QString& text, QWidget* parent) : QLabel(text, parent) { if (text.isEmpty()) { setText("" + tr("Invalid") + ""); } } void QpjValidIndicatorLabel::setView(const QString& pattern) { QRegExp regExp(pattern); if (regExp.isValid() && pattern != "") { setText("" + tr("Valid") + ""); } else { setText("" + tr("Invalid") + ""); } } // END OF IMPLEMENTATION qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/replugin.cpp.svn-base0000444000175000017500000000474211362261064027026 0ustar jlbrdjlbrd/* * This file is part of QDevelop, an open-source cross-platform IDE * Copyright (C) 2006 Jean-Luc Biord * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact e-mail: Jean-Luc Biord * Program URL : http://qdevelop.org * */ #include "qpjregexpplannerdialog.h" #include "replugin.h" #include #include #include #include // QString RePlugin::menuName() const { if (!translator) { QString language = QLocale::languageToString( QLocale::system().language() ); #ifdef Q_OS_WIN32 QString defaultTranslationsPath = "/../translations/tools-regexp-planner"; #else QString defaultTranslationsPath = "/../lib/qdevelop/translations/tools-regexp-planner"; #endif QDir translationsDir(QCoreApplication::applicationDirPath() + defaultTranslationsPath); translator = new QTranslator; translator->load(translationsDir.absoluteFilePath("RePlanner_"+language+".qm")); if (translator->isEmpty()) { // CMake workaround if (QFile::exists(QCoreApplication::applicationDirPath() + "/RePlanner_"+language+".qm")) translator->load(QCoreApplication::applicationDirPath() + "/RePlanner_"+language+".qm"); if (translator->isEmpty()) { // Qmake workaround translator->load(QCoreApplication::applicationDirPath() + "/../plugins/tools-regexp-planner/translations/RePlanner_"+language+".qm"); } } QCoreApplication::installTranslator(translator); } return tr("RegExp Planner"); } // void RePlugin::start(QWidget * owner) { QpjRegExpPlannerDialog* dialog = new QpjRegExpPlannerDialog; dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowFlags(Qt::WindowStaysOnTopHint); dialog->show(); Q_UNUSED(owner); } // bool RePlugin::hasConfigDialog() const { return false; } void RePlugin::config() { // Noop } // Q_EXPORT_PLUGIN2(tools-regexp-planner, RePlugin) qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjregexpplannerdialog.cpp.svn-base0000444000175000017500000001075311362261064031745 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjregexpplannerdialog.h" #include "qpjchecktextedit.h" #include "qpjvalidindicatorlabel.h" /********************** IMPLEMENTATION *****************************/ QpjRegExpPlannerDialog::QpjRegExpPlannerDialog(QWidget* parent) : QDialog(parent) { // making objects: regExpEditor = new QLineEdit(); indicator = new QpjValidIndicatorLabel(); checker = new QpjCheckTextEdit(); labelEdit = new QLabel(tr ("Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2}") ); labelEmpty = new QLabel(""); labelCheck = new QLabel(tr("Regular Expression Checker")); labelColour = new QLabel(tr("Meaning of Colours:")); labelGreen = new QLabel("" + tr("Acceptable") + ""); labelBlue = new QLabel("" + tr("Intermediate") + ""); labelRed = new QLabel("" + tr("Invalid") + ""); // by Divius [for QDevelop] QPushButton * buttonClose = new QPushButton(tr("Close")); connect(buttonClose, SIGNAL(clicked()), SLOT(close())); QPushButton * buttonAbout = new QPushButton(tr("About plugin")); connect(buttonAbout, SIGNAL(clicked()), SLOT(aboutBox())); // ! by Divius // making tha layout: QHBoxLayout* h1Layout = new QHBoxLayout; h1Layout->addWidget(regExpEditor); h1Layout->addWidget(indicator); QVBoxLayout* v1Layout = new QVBoxLayout; v1Layout->addStretch(); v1Layout->addWidget(labelColour); v1Layout->addWidget(labelGreen); v1Layout->addWidget(labelBlue); v1Layout->addWidget(labelRed); v1Layout->addStretch(); v1Layout->addWidget(buttonAbout); v1Layout->addWidget(buttonClose); QHBoxLayout* h2Layout = new QHBoxLayout; h2Layout->addWidget(checker); h2Layout->addLayout(v1Layout); QVBoxLayout* theLayout = new QVBoxLayout; theLayout->addWidget(labelEdit); theLayout->addLayout(h1Layout); theLayout->addWidget(labelEmpty); theLayout->addWidget(labelCheck); theLayout->addLayout(h2Layout); setLayout(theLayout); // the main layout // Removed by Divius [for QDevelop] setWindowIcon(QIcon("images/pj.png")); // my icon setWindowTitle(tr("RegExp Planner")); // title of dialog // making the connections between objects: connect( regExpEditor, SIGNAL(textChanged(const QString&)), indicator, SLOT (setView (const QString&)) ); connect( regExpEditor, SIGNAL(textChanged (const QString&)), checker, SLOT (setPatternString(const QString&)) ); } void QpjRegExpPlannerDialog::aboutBox() { QMessageBox::about(this, tr("About plugin"), trUtf8 ( " RegExp Planner plugin for QDevelop\n" "Original work: Copyright (C) 2008 by Prém József\n" " Adapted for using with QDevelop by\n" "Dmitrij \"Divius\" Tantsur " )+"\n\n"+tr("Plugin license: GPLv2")); } // END OF IMPLEMENTATION qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/rep.pro.svn-base0000444000175000017500000000120211362261064025771 0ustar jlbrdjlbrdTARGET = rep SOURCES += replugin.cpp qpjregexpplannerdialog.cpp qpjchecktextedit.cpp qpjvalidindicatorlabel.cpp HEADERS += replugin.h qpjregexpplannerdialog.h qpjchecktextedit.h qpjvalidindicatorlabel.h TRANSLATIONS += translations/RePlanner_Russian.ts translations/RePlanner_French.ts translations/RePlanner_German.ts CONFIG += release \ plugin DEPENDPATH = . INCLUDEPATH = . ../../src TEMPLATE = lib DESTDIR = ../../bin/plugins MOC_DIR = ../../build/moc UI_DIR = ../../build/ui macx { OBJECTS_DIR = ../../build/o/mac } unix { OBJECTS_DIR = ../../build/o/unix } win32 { OBJECTS_DIR = ../../build/o/win32 } qdevelop-v0.28/plugins/tools-regexp-planner/.svn/text-base/qpjchecktextedit.cpp.svn-base0000444000175000017500000001075411362261064030544 0ustar jlbrdjlbrd/*************************************************************************** * Copyright (C) 2008 by Prém József (Hungary) * * pelz@freemail.hu * * * * This program made with Qt4 sotware of TROLLTECH ASA. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * * Version of Program: V1.0 * ***************************************************************************/ // header files: #include #include "qpjchecktextedit.h" /********************** IMPLEMENTATION *****************************/ QpjCheckTextEdit::QpjCheckTextEdit(QWidget* parent) : QTextEdit(parent) { connectToFormating(true); setText(""); regExp.setPattern(""); } void QpjCheckTextEdit::focusInEvent(QFocusEvent* event) { QTextEdit::focusInEvent(event); formatText(); } void QpjCheckTextEdit::connectToFormating(bool yes) { if (yes) { connect( this->document(), SIGNAL(contentsChanged()), this, SLOT (formatText ()) ); } else { disconnect( this->document(), SIGNAL(contentsChanged()), this, SLOT (formatText ()) ); } } void QpjCheckTextEdit::formatText() { connectToFormating(false); if (regExp.isValid() && regExp.pattern() != "") { QRegExpValidator* validator = new QRegExpValidator(regExp, this); QString text = document()->toPlainText(); int startSize = text.size(); int n = 0; while ( text.size() > 0 && validator->validate(text, n) == QValidator::Invalid) { text.resize(text.size() - 1); } QTextCursor highlightCursor(document()); highlightCursor.movePosition(QTextCursor::End); QTextCharFormat colorFormat(highlightCursor.charFormat()); if (startSize > text.size()) { colorFormat.setForeground(Qt::red); highlightCursor.movePosition( QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, startSize - text.size() ); highlightCursor.mergeCharFormat(colorFormat); } highlightCursor.setPosition(text.size()); if (text.size() > 0) { switch(validator->validate(text, n)) { case QValidator::Acceptable: colorFormat.setForeground(Qt::darkGreen); break; case QValidator::Intermediate: colorFormat.setForeground(Qt::blue); break; default: break; } highlightCursor.movePosition(QTextCursor::Start, QTextCursor::KeepAnchor); highlightCursor.mergeCharFormat(colorFormat); } delete validator; } else setText(""); if (!isActiveWindow()) show(); connectToFormating(true); } void QpjCheckTextEdit::setPatternString(const QString& pattern) { regExp.setPattern(pattern); if (regExp.isValid()) formatText(); } // END OF IMPLEMENTATION /******************* COMMENTS AND ANNOTATIONS ************************ 1, I write newly the focusInEvent() function, because I wanted to fomat the text when the TextEditor comes in focus. If the user do not write a valid regular expression, I stop the editing in the checker field. 2, I used the connectToFormating() function for switching the connection between the document and formatText() function. I had to do this, because without this switching I can make a endless rekursion with the formatText(). 3, formatText() checks the text, and write the characters with colours. */ qdevelop-v0.28/src/QIComplete/.svn/text-base/readtags.cpp.svn-base0000444000175000017500000004314111362261065024013 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Darren Hiebert and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the ctags project ********************************************************************************************************/ /* * This module contains functions for reading tag files. */ /* * INCLUDE FILES */ #include #include #include #include #include #include /* to declare off_t */ #include "readtags.h" /* * MACROS */ #define TAB '\t' #include /* * DATA DECLARATIONS */ typedef struct { size_t size; char *buffer; } vstring; /* Information about current tag file */ struct sTagFile { /* has the file been opened and this structure initialized? */ short initialized; /* format of tag file */ short format; /* how is the tag file sorted? */ sortType sortMethod; /* pointer to file structure */ FILE *fp; /* file position of first character of `line' */ off_t pos; /* size of tag file in seekable positions */ off_t size; /* last line read */ vstring line; /* name of tag in last line read */ vstring name; /* defines tag search state */ struct { /* file position of last match for tag */ off_t pos; /* name of tag last searched for */ const char *name; /* length of name for partial matches */ size_t nameLength; /* peforming partial match */ short partial; /* ignoring case */ short ignorecase; } search; /* miscellaneous extension fields */ struct { /* number of entries in `list' */ unsigned short max; /* list of key value pairs */ tagExtensionField *list; } fields; /* buffers to be freed at close */ struct { /* name of program author */ char *author; /* name of program */ char *name; /* URL of distribution */ char *url; /* program version */ char *version; } program; }; /* * DATA DEFINITIONS */ const char *const EmptyString = ""; const char *const PseudoTagPrefix = "!_"; /* * FUNCTION DEFINITIONS */ /* * Compare two strings, ignoring case. * Return 0 for match, < 0 for smaller, > 0 for bigger * Make sure case is folded to uppercase in comparison (like for 'sort -f') * This makes a difference when one of the chars lies between upper and lower * ie. one of the chars [ \ ] ^ _ ` for ascii. (The '_' in particular !) */ static int struppercmp(const char *s1, const char *s2) { int result; do { result = toupper((int) *s1) - toupper((int) *s2); } while (result == 0 && *s1++ != '\0' && *s2++ != '\0'); return result; } static int strnuppercmp(const char *s1, const char *s2, size_t n) { int result; do { result = toupper((int) *s1) - toupper((int) *s2); } while (result == 0 && --n > 0 && *s1++ != '\0' && *s2++ != '\0'); return result; } static int growString(vstring * s) { int result = 0; size_t newLength; char *newLine; if (s->size == 0) { newLength = 128; newLine = (char *) malloc(newLength); *newLine = '\0'; } else { newLength = 2 * s->size; newLine = (char *) realloc(s->buffer, newLength); } if (newLine == NULL) perror("string too large"); else { s->buffer = newLine; s->size = newLength; result = 1; } return result; } /* Copy name of tag out of tag line */ static void copyName(tagFile * const file) { size_t length; const char *end = strchr(file->line.buffer, '\t'); if (end == NULL) { end = strchr(file->line.buffer, '\n'); if (end == NULL) end = strchr(file->line.buffer, '\r'); } if (end != NULL) length = end - file->line.buffer; else length = strlen(file->line.buffer); while (length >= file->name.size) growString(&file->name); strncpy(file->name.buffer, file->line.buffer, length); file->name.buffer[length] = '\0'; } static int readTagLineRaw(tagFile * const file) { int result = 1; int reReadLine; /* If reading the line places any character other than a null or a * newline at the last character position in the buffer (one less than * the buffer size), then we must resize the buffer and reattempt to read * the line. */ do { char *const pLastChar = file->line.buffer + file->line.size - 2; char *line; file->pos = ftell(file->fp); reReadLine = 0; *pLastChar = '\0'; line = fgets(file->line.buffer, (int) file->line.size, file->fp); if (line == NULL) { /* read error */ if (!feof(file->fp)) perror("readTagLine"); result = 0; } else if (*pLastChar != '\0' && *pLastChar != '\n' && *pLastChar != '\r') { /* buffer overflow */ growString(&file->line); fseek(file->fp, file->pos, SEEK_SET); reReadLine = 1; } else { size_t i = strlen(file->line.buffer); while (i > 0 && (file->line.buffer[i - 1] == '\n' || file->line.buffer[i - 1] == '\r')) { file->line.buffer[i - 1] = '\0'; --i; } } } while (reReadLine && result); if (result) copyName(file); return result; } static int readTagLine(tagFile * const file) { int result; do { result = readTagLineRaw(file); } while (result && *file->name.buffer == '\0'); return result; } static tagResult growFields(tagFile * const file) { tagResult result = TagFailure; unsigned short newCount = 2 * file->fields.max; tagExtensionField *newFields = (tagExtensionField *) realloc(file->fields.list, newCount * sizeof(tagExtensionField)); if (newFields == NULL) perror("too many extension fields"); else { file->fields.list = newFields; file->fields.max = newCount; result = TagSuccess; } return result; } static void parseExtensionFields(tagFile * const file, tagEntry * const entry, char *const string) { char *p = string; while (p != NULL && *p != '\0') { while (*p == TAB) *p++ = '\0'; if (*p != '\0') { char *colon; char *field = p; p = strchr(p, TAB); if (p != NULL) *p++ = '\0'; colon = strchr(field, ':'); if (colon == NULL) entry->kind = field; else { const char *key = field; const char *value = colon + 1; *colon = '\0'; if (strcmp(key, "kind") == 0) entry->kind = value; else if (strcmp(key, "file") == 0) entry->fileScope = 1; else if (strcmp(key, "line") == 0) entry->address.lineNumber = atol(value); else { if (entry->fields.count == file->fields.max) growFields(file); file->fields.list[entry->fields.count].key = key; file->fields.list[entry->fields.count].value = value; ++entry->fields.count; } } } } } static void parseTagLine(tagFile * file, tagEntry * const entry) { int i; char *p = file->line.buffer; char *tab = strchr(p, TAB); int fieldsPresent = 0; entry->fields.list = NULL; entry->fields.count = 0; entry->kind = NULL; entry->fileScope = 0; entry->name = p; if (tab != NULL) { *tab = '\0'; p = tab + 1; entry->file = p; tab = strchr(p, TAB); if (tab != NULL) { *tab = '\0'; p = tab + 1; if (*p == '/' || *p == '?') { /* parse pattern */ int delimiter = *(unsigned char *) p; entry->address.lineNumber = 0; entry->address.pattern = p; do { p = strchr(p + 1, delimiter); } while (p != NULL && *(p - 1) == '\\'); if (p == NULL) { /* invalid pattern */ } else ++p; } else if (isdigit((int) *(unsigned char *) p)) { /* parse line number */ entry->address.pattern = p; entry->address.lineNumber = atol(p); while (isdigit((int) *(unsigned char *) p)) ++p; } else { /* invalid pattern */ } fieldsPresent = (strncmp(p, ";\"", 2) == 0); *p = '\0'; if (fieldsPresent) parseExtensionFields(file, entry, p + 2); } } if (entry->fields.count > 0) entry->fields.list = file->fields.list; for (i = entry->fields.count; i < file->fields.max; ++i) { file->fields.list[i].key = NULL; file->fields.list[i].value = NULL; } } static char *duplicate(const char *str) { char *result = NULL; if (str != NULL) { result = (char *) malloc(strlen(str) + 1); if (result == NULL) perror(NULL); else strcpy(result, str); } return result; } static void readPseudoTags(tagFile * const file, tagFileInfo * const info) { fpos_t startOfLine; const size_t prefixLength = strlen(PseudoTagPrefix); if (info != NULL) { info->file.format = 1; info->file.sort = TAG_UNSORTED; info->program.author = NULL; info->program.name = NULL; info->program.url = NULL; info->program.version = NULL; } while (1) { fgetpos(file->fp, &startOfLine); if (!readTagLine(file)) break; if (strncmp(file->line.buffer, PseudoTagPrefix, prefixLength) != 0) break; else { tagEntry entry; const char *key, *value; parseTagLine(file, &entry); key = entry.name + prefixLength; value = entry.file; if (strcmp(key, "TAG_FILE_SORTED") == 0) file->sortMethod = (sortType) atoi(value); else if (strcmp(key, "TAG_FILE_FORMAT") == 0) file->format = atoi(value); else if (strcmp(key, "TAG_PROGRAM_AUTHOR") == 0) file->program.author = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_NAME") == 0) file->program.name = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_URL") == 0) file->program.url = duplicate(value); else if (strcmp(key, "TAG_PROGRAM_VERSION") == 0) file->program.version = duplicate(value); if (info != NULL) { info->file.format = file->format; info->file.sort = file->sortMethod; info->program.author = file->program.author; info->program.name = file->program.name; info->program.url = file->program.url; info->program.version = file->program.version; } } } fsetpos(file->fp, &startOfLine); } static void gotoFirstLogicalTag(tagFile * const file) { fpos_t startOfLine; const size_t prefixLength = strlen(PseudoTagPrefix); rewind(file->fp); while (1) { fgetpos(file->fp, &startOfLine); if (!readTagLine(file)) break; if (strncmp(file->line.buffer, PseudoTagPrefix, prefixLength) != 0) break; } fsetpos(file->fp, &startOfLine); } static tagFile *initialize(const char *const filePath, tagFileInfo * const info) { tagFile *result = (tagFile *) malloc(sizeof(tagFile)); if (result != NULL) { memset(result, 0, sizeof(tagFile)); growString(&result->line); growString(&result->name); result->fields.max = 20; result->fields.list = (tagExtensionField *) malloc(result->fields.max * sizeof(tagExtensionField)); result->fp = fopen(filePath, "r"); if (result->fp == NULL) { free(result); result = NULL; info->status.error_number = errno; } else { fseek(result->fp, 0, SEEK_END); result->size = ftell(result->fp); rewind(result->fp); readPseudoTags(result, info); info->status.opened = 1; result->initialized = 1; } } return result; } static void terminate(tagFile * const file) { fclose(file->fp); free(file->line.buffer); free(file->name.buffer); free(file->fields.list); if (file->program.author != NULL) free(file->program.author); if (file->program.name != NULL) free(file->program.name); if (file->program.url != NULL) free(file->program.url); if (file->program.version != NULL) free(file->program.version); memset(file, 0, sizeof(tagFile)); free(file); } static tagResult readNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file == NULL || !file->initialized) result = TagFailure; else if (!readTagLine(file)) result = TagFailure; else { if (entry != NULL) parseTagLine(file, entry); result = TagSuccess; } return result; } static const char *readFieldValue(const tagEntry * const entry, const char *const key) { const char *result = NULL; int i; if (strcmp(key, "kind") == 0) result = entry->kind; else if (strcmp(key, "file") == 0) result = EmptyString; else for (i = 0; i < entry->fields.count && result == NULL; ++i) if (strcmp(entry->fields.list[i].key, key) == 0) result = entry->fields.list[i].value; return result; } static int readTagLineSeek(tagFile * const file, const off_t pos) { int result = 0; if (fseek(file->fp, pos, SEEK_SET) == 0) { result = readTagLine(file); /* read probable partial line */ if (pos > 0 && result) result = readTagLine(file); /* read complete line */ } return result; } static int nameComparison(tagFile * const file) { int result; if (file->search.ignorecase) { if (file->search.partial) result = strnuppercmp(file->search.name, file->name.buffer, file->search.nameLength); else result = struppercmp(file->search.name, file->name.buffer); } else { if (file->search.partial) result = strncmp(file->search.name, file->name.buffer, file->search.nameLength); else result = strcmp(file->search.name, file->name.buffer); } return result; } static void findFirstNonMatchBefore(tagFile * const file) { #define JUMP_BACK 512 int more_lines; int comp; off_t start = file->pos; off_t pos = start; do { if (pos < (off_t) JUMP_BACK) pos = 0; else pos = pos - JUMP_BACK; more_lines = readTagLineSeek(file, pos); comp = nameComparison(file); } while (more_lines && comp == 0 && pos > 0 && pos < start); } static tagResult findFirstMatchBefore(tagFile * const file) { tagResult result = TagFailure; int more_lines; off_t start = file->pos; findFirstNonMatchBefore(file); do { more_lines = readTagLine(file); if (nameComparison(file) == 0) result = TagSuccess; } while (more_lines && result != TagSuccess && file->pos < start); return result; } static tagResult findBinary(tagFile * const file) { tagResult result = TagFailure; off_t lower_limit = 0; off_t upper_limit = file->size; off_t last_pos = 0; off_t pos = upper_limit / 2; while (result != TagSuccess) { if (!readTagLineSeek(file, pos)) { /* in case we fell off end of file */ result = findFirstMatchBefore(file); break; } else if (pos == last_pos) { /* prevent infinite loop if we backed up to beginning of file */ break; } else { const int comp = nameComparison(file); last_pos = pos; if (comp < 0) { upper_limit = pos; pos = lower_limit + ((upper_limit - lower_limit) / 2); } else if (comp > 0) { lower_limit = pos; pos = lower_limit + ((upper_limit - lower_limit) / 2); } else if (pos == 0) result = TagSuccess; else result = findFirstMatchBefore(file); } } return result; } static tagResult findSequential(tagFile * const file) { tagResult result = TagFailure; if (file->initialized) { while (result == TagFailure && readTagLine(file)) { if (nameComparison(file) == 0) result = TagSuccess; } } return result; } static tagResult find(tagFile * const file, tagEntry * const entry, const char *const name, const int options) { tagResult result = TagFailure; file->search.name = name; file->search.nameLength = strlen(name); file->search.partial = (options & TAG_PARTIALMATCH) != 0; file->search.ignorecase = (options & TAG_IGNORECASE) != 0; fseek(file->fp, 0, SEEK_END); file->size = ftell(file->fp); rewind(file->fp); if ((file->sortMethod == TAG_SORTED && !file->search.ignorecase) || (file->sortMethod == TAG_FOLDSORTED && file->search.ignorecase)) result = findBinary(file); else result = findSequential(file); if (result != TagSuccess) file->search.pos = file->size; else { file->search.pos = file->pos; if (entry != NULL) parseTagLine(file, entry); } return result; } static tagResult findNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if ((file->sortMethod == TAG_SORTED && !file->search.ignorecase) || (file->sortMethod == TAG_FOLDSORTED && file->search.ignorecase)) { result = tagsNext(file, entry); if (result == TagSuccess && nameComparison(file) != 0) result = TagFailure; } else { result = findSequential(file); if (result == TagSuccess && entry != NULL) parseTagLine(file, entry); } return result; } /* * EXTERNAL INTERFACE */ extern tagFile *tagsOpen(const char *const filePath, tagFileInfo * const info) { return initialize(filePath, info); } extern tagResult tagsSetSortType(tagFile * const file, const sortType type) { tagResult result = TagFailure; if (file != NULL && file->initialized) { file->sortMethod = type; result = TagSuccess; } return result; } extern tagResult tagsFirst(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) { gotoFirstLogicalTag(file); result = readNext(file, entry); } return result; } extern tagResult tagsNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = readNext(file, entry); return result; } extern const char *tagsField(const tagEntry * const entry, const char *const key) { const char *result = NULL; if (entry != NULL) result = readFieldValue(entry, key); return result; } extern tagResult tagsFind(tagFile * const file, tagEntry * const entry, const char *const name, const int options) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = find(file, entry, name, options); return result; } extern tagResult tagsFindNext(tagFile * const file, tagEntry * const entry) { tagResult result = TagFailure; if (file != NULL && file->initialized) result = findNext(file, entry); return result; } extern tagResult tagsClose(tagFile * const file) { tagResult result = TagFailure; if (file != NULL && file->initialized) { terminate(file); result = TagSuccess; } return result; } /* vi:set tabstop=8 shiftwidth=4: */ qdevelop-v0.28/src/QIComplete/.svn/text-base/parse.cpp.svn-base0000444000175000017500000003764411362261065023346 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #include #include #include #include #include "parse.h" #include "tree.h" #define QD qDebug() << __FILE__ << __LINE__ << ":" extern QString simplifiedText( QString ); char* Parse::scanForIdent(const char **expr) { static char ident[256]; int valid_chars = 0; /* number of identified characters in the ident string */ char c; while ((c = **expr) != '\0') { if (valid_chars == 0 && isspace(c)) { (*expr)++; continue; } // XXX: Namespace support else if (isalpha(c) || c == '_') // ???: || c == ':') { ident[valid_chars] = c; if (++valid_chars == 255) { ident[255] = '\0'; return ident; } } /* a digit may be part of an ident but not from the start */ else if (isdigit(c)) { if (valid_chars) { ident[valid_chars] = c; if (++valid_chars == 255) { ident[255] = '\0'; return ident; } } else return NULL; } else break; (*expr)++; } if (valid_chars) { ident[valid_chars] = '\0'; return ident; } else return NULL; } bool Parse::scanForFuncdef(const QString &expr) { const char *pExpr = expr.toAscii(); char c; while ((c = *pExpr) != '\0') { switch (c) { case ' ': case '\t': case '\n': pExpr++; continue; case '(': return true; default: return false; } } return false; } QString Parse::getTypeOfToken(const QString &ident, const QString &className, Scope * scope, bool token_is_function) { /* if we have a variable and already found a local definition, just return it after duplicating */ if (!token_is_function && scope->localdef.length() && ident!="this") return scope->localdef; /* if the identifier is this-> return the current class */ if (ident == "this") { return scope->scope; } Tree *tree = NULL; if (className.length()) { tree = Tree::buildInheritanceTree(className); if (!tree) return NULL; } tagFileInfo info; tagEntry entry; tagFile *tfile = tagsOpen(tagsFilePath.toAscii(), &info); if (tfile && info.status.opened) { if (tagsFind(tfile, &entry, ident.toAscii(), TAG_OBSERVECASE | TAG_FULLMATCH) == TagSuccess) { do { if (tree && !tree->isMemberOfScope(&entry, scope)) continue; const char *kind = tagsField(&entry, "kind"); if (token_is_function) /* only list if tag is a function */ { if (!kind || (strcmp(kind, "function") && strcmp(kind, "prototype"))) continue; } else /* or a variable */ { //brc: add externvar for extern variables like cout if (!kind || (strcmp(kind, "variable") && strcmp(kind, "externvar") //brc: namespace workarround: add namespace && strcmp(kind, "namespace") && strcmp(kind, "member"))) continue; } /* need to duplicate the pattern, don't ask me why */ QString type = extractTypeQualifier(entry.address.pattern, ident); if(tree) tree->freeTree(); tagsClose(tfile); return type; } while (tagsFindNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } return NULL; } QString Parse::extractTypeQualifier(const QString &str, const QString &varName) { #define STRING "\".*\"" #define BRACKETEXPR "\\{.*\\}" //#define IDENT "[a-zA-Z_][a-zA-Z0-9_]*" //#define IDENT "[a-zA-Z_:][a-zA-Z0-9_:]*" #define IDENT "[a-zA-Z_:][a-zA-Z0-9_:]*" #define WS "[ \t\r\n]*" #define PTR "[\\*&]?\\*?" #define INITIALIZER "=(" WS IDENT WS ")|=(" WS STRING WS ")|=(" WS BRACKETEXPR WS ")" #define CONSTRUCTOR "(\\(" WS IDENT WS "\\))|(\\(" WS STRING WS "\\))" #define ARRAY WS "\\[" WS "[0-9]*" WS "\\]" WS QString pattern = "(" IDENT ")" // the 'std' in example a) "(::" IDENT ")*" // ::vector "(" WS "<[^>;]*>)?[ \t\n*&]{1}" // "(" WS PTR WS IDENT WS "(" ARRAY ")*" WS "((" INITIALIZER ")?|(" CONSTRUCTOR ")?)" WS "," WS ")*" // other variables for the same ident (string i,j,k;) "(" WS "[*&])?"; // check again for pointer/reference type QRegExp rx(pattern + WS + varName + "[^.-\\w]"); if( varName.isEmpty() ) return QString(); QString text = simplifiedText( str ); int pos = -1; int begin = -1; while( (pos = text.lastIndexOf(varName, begin) ) != -1 ) { begin = pos; while( begin>0 && text.at(begin)!= '\n' ) begin--; int end = pos; while( end and ( */ QByteArray array(expr.toLocal8Bit() ); if( !array.count() ) return false; unsigned long len = array.length(); const char *first = array.data(), *start = first + len; while (--start >= first && start < (first + len) ) { /* skip brackets */ if (brackets > 0 || square_brackets > 0) { if (*start == '(') --brackets; else if (*start == ')') ++brackets; else if (*start == '[') --square_brackets; else if (*start == ']') ++square_brackets; continue; } /* identifier */ if (isdigit(*start)) in_ident = false; else if (isalpha(*start) || *start == '_') in_ident = true; else { switch (*start) { /* skip whitespace */ case ' ': case '\t': if (in_ident) goto extract; else { in_ident = false; continue; } /* continue searching to the left, if we * have a . or -> accessor */ case '.': if (in_ident && extract_ident) { const char *ident = start + 1; if (num_stack < max_items) stack[num_stack++] = ident; else return false; } in_ident = false; extract_ident = true; continue; case '>': /* pointer access */ case ':': /* static access */ if ((*start == '>' && (start - 1 >= first && *(start - 1) == '-')) || (*start == ':' && (start - 1 >= first && *(start - 1) == ':'))) { if (in_ident && extract_ident) { const char *ident = start + 1; if (num_stack < max_items) stack[num_stack++] = ident; else return false; } in_ident = false; extract_ident = true; --start; continue; } else { start++; goto extract; } case '(': /* start of a function */ if (extract_ident) { start++; goto extract; } else { extract_ident = true; in_ident = false; break; } case ')': if (in_ident) /* probably a cast - (const char*)str */ { start++; goto extract; } brackets++; break; case ']': if (in_ident) { start++; goto extract; } square_brackets++; break; default: start++; goto extract; } } } extract: /* ident is the leftmost token, stack[*] the ones to the right * Example: str.left(2,5).toUpper() * ^^^ ^^^^ ^^^^^^^ * ident stack[1] stack[0] */ ident = scanForIdent(&start); if (!ident) return false; /* we need this little kludge with old_type to avoid mem leaks */ QString type, old_type; /* for static access, parsing is done, just return the identifier */ if (exp->access != AccessStatic) { QString saved_start = start; // start can change, so we save it getScopeAndLocals(scope, expr, ident); /* if we have the start of a function/method, don't return the type * of this function, but className, which it is member of */ type = getTypeOfToken(ident, NULL, scope, scanForFuncdef(saved_start)); /* members can't be local variables */ scope->localdef[0] = '\0'; while (type!="" && num_stack > 0) { ident = scanForIdent(&stack[--num_stack]); old_type = type; //: namespace workaround: if the "type" of an identifier is namespace ignore it if (type == "namespace") old_type = ""; //<\end brc code> type = getTypeOfToken(ident, old_type.toAscii(), scope, scanForFuncdef(stack[num_stack])); } } else /* static member */ type = ident; /* copy result into passed Expression argument */ if (type!="" && !(exp->access == AccessInFunction)) { exp->className = type; exp->function[0] = '\0'; return true; } else if (exp->access == AccessInFunction) { exp->className = old_type; exp->function = ident; return true; } return false; } Expression Parse::parseExpression(QString expression, Scope * scope, bool showAllResults) { Expression exp; exp.access = ParseError; int len = expression.length(); if (len < 1) return exp; // we found that the user has beginning to write if(!showAllResults) { QByteArray array(expression.toLocal8Bit() ); if( !array.count() ) return exp; const char *start = array.data(), *p = start; //const char *start = expression.toLocal8Bit(), *p = start; while (*p) p++; p--; while (p != start && *p != '.' && *p != '\n' && *p != '\r' && *p != ' ' && *p != '\t' && *p != ';' && *p != '{' && *p != '}' && *p != '(' && *p != ',' && (p-1) != start && (*p != '>' || *(p - 1) != '-') && (*p != ':' || *(p - 1) != ':')) p--; exp.writing = p+1; } /* A global function should be completed, if nothing else is found */ exp.access = AccessGlobal; bool allow_AccessInFunction = true; // false, when other characters than whitespace were typed /* search for the type of the correct completion */ while (--len >= 0) { char last = ((const char*)expression.toAscii())[len]; switch (last) { case ' ': case '\t': /* skip initial spaces */ if (exp.access == AccessGlobal) { /* exp.access = ParseError;*/ continue; } else { exp.access = AccessGlobal; goto extract; } case '>': if (len && expression[len - 1] == '-') { exp.access = AccessPointer; expression[len + 1] = '\0'; /* truncate the string */ goto extract; } else { exp.access = AccessGlobal; /* XXX: AccessError ? */ goto extract; } case '.': exp.access = AccessMembers; expression[len + 1] = '\0'; /* truncate the string */ goto extract; case ':': if (len && expression[len - 1] == ':') { exp.access = AccessStatic; expression[len + 1] = '\0'; /* truncate the string */ goto extract; } else { exp.access = AccessGlobal; goto extract; } case '(': if (allow_AccessInFunction) { exp.access = AccessInFunction; expression[len + 1] = '\0'; /* truncate the string */ } goto extract; default: if (isalpha(last) || last == '_') { /* we only list function definitions if after the opening * ( bracket of the function is no identifier */ allow_AccessInFunction = false; break; } else goto extract; } } extract: /* now extract the type out of the string */ if (exp.access == AccessMembers || exp.access == AccessPointer || exp.access == AccessStatic || exp.access == AccessInFunction) { if (!getTypeOfExpression(expression.toAscii(), &exp, scope)) exp.access = ParseError; } else if (exp.access == AccessGlobal) getScopeAndLocals(scope, expression.toAscii(), NULL); return exp; } Tag Parse::prettifyTag(const tagEntry * entry) { Tag tag; tag.name = entry->name; tag.kind = tagsField(entry, "kind"); tag.access = tagsField(entry, "access"); tag.signature = tagsField(entry, "signature"); tag.isFunction = (tag.signature.length()); char *p = (char *) entry->address.pattern; /* for a macro the pattern is already parsed */ if (tag.kind == "macro") { /* NOTE: exuberant-ctags 5.5.4 does not provide a valid pattern for found macros * work around it, by getting the line myself */ char pat_macro[512]; unsigned long line = entry->address.lineNumber; if (line == 0) /* sometimes ctags can't find the correct line */ return tag; FILE *fileMacro = fopen(entry->file, "r"); if (fileMacro) { while ((p = fgets(pat_macro, 512, fileMacro)) != NULL) { line--; if (line <= 0) { /* remove leading spaces */ p++; /* skip over # - it is added later again */ while (*p == ' ' || *p == '\t') p++; tag.longName = '#' + p; /* remove new line at the end */ tag.longName.remove(tag.longName.length() - 1, 1); break; } } tag.longName += " [macro]"; fclose(fileMacro); return tag; } } /* special handling for enumerator */ if (tag.kind == "enumerator") { /* skip whitespace from variable/function patterns */ size_t skip = strspn(p, "/^ \t"); p += skip; /* remove trailing $/ characters */ char *pos = NULL; if ((pos = strstr(p, "$/")) != NULL) *pos = '\0'; /* replace \/\/ and \/ * *\/ to correctly show comments */ while ((pos = strstr(p, "\\/\\/")) != NULL) memcpy(pos, " //", 4); while ((pos = strstr(p, "\\/*")) != NULL) memcpy(pos, " /*", 3); while ((pos = strstr(p, "*\\/")) != NULL) memcpy(pos, " */", 3); tag.longName += QString(p) + " [enumerator]"; return tag; } size_t skip = strspn(p, "/^ \t"); p += skip; /* remove trailing $/ characters */ char *pos = NULL; if ((pos = strstr(p, "$/")) != NULL) *pos = '\0'; tag.longName += p; /* if it is a function, add signature as well */ if (tag.signature.length()) tag.parameters += tag.signature; if (tag.access.length() && tag.access == "private" || tag.access == "protected") tag.longName += '[' + tag.access + ']'; return tag; } bool Parse::getScopeAndLocals(Scope * sc, const QString &expr, const QString &ident) { // initialize scope if nothing better is found sc->scope = ""; sc->localdef = ""; /* create a tags file for `expr' with function names only. * The function with the highest line number is our valid scope * --sort=no, because tags generation probably faster, and * so I just have to look for the last entry to find 'my' tag */ QString command = ctagsCmdPath + " --language-force=c++ --sort=no --fields=fKmnsz --c++-kinds=fn -o \"" + smallTagsFilePath + "\" \"" + parsedFilePath + '\"'; // I don't process any user input, so system() should be safe enough QProcess ctags; ctags.execute(command); QFile::remove (parsedFilePath); if (ctags.exitStatus() == QProcess::CrashExit) return false; /* find the last entry, this is our current scope */ tagFileInfo info; tagFile *tfile = tagsOpen(smallTagsFilePath.toAscii(), &info); tagEntry entry; const char *scope = NULL; if (tfile && info.status.opened) { if (tagsFirst(tfile, &entry) == TagSuccess) { do scope = tagsField(&entry, "class"); while (tagsNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } /* must be before the 'type = extract_type_qualifier()' code, which modifies scope */ if (scope) sc->scope = scope; /* get local definition (if any) */ if (ident!="") { QString type = extractTypeQualifier(expr, ident); if (type.length()) { sc->localdef = type; } else sc->localdef = ""; } QFile::remove (smallTagsFilePath); return true; } qdevelop-v0.28/src/QIComplete/.svn/text-base/tree.h.svn-base0000444000175000017500000000413411362261065022624 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #ifndef __TREE_H__ #define __TREE_H__ #include #include #include "../InitCompletion.h" #include "parse.h" typedef enum { NOT_FOUND = 0, DIRECT_HIT, SUBCLASS } Match; /* this struct holds the inheritance information */ class Tree { public: static InitCompletion *parent; QString name; // the name of the class QList inherits; // next elements in the tree /* * Build an inheritance tree for classes * Looks like: * * --- subclass1 * rootclass < * --- subclass2 -- subclass2_1 --> subclass3 * \ subclass2_2 * * Caller must free the tree with * freeTree() after calling this function */ static Tree *buildInheritanceTree(const QString &className); /* free()'s all memory allocated of a Tree* */ void freeTree(); /* * This function searches a given Tree for a className name * and returns if the className is the root element of the tree * (=DIRECT_HIT), or a subclass */ Match findInTree(const QString &className); /* when we find a tag, the following conditions must be met, to show the tag: * - method must be part of a className (key=className) * - access permissions (private, protected, public) must match. * - FIXME: method must not be pure virtual * - no static method */ bool isMemberOfScope(const tagEntry * entry, const Scope * scope); /* * parses a tags file to show all className members * relative to the scope of another className */ static QList < Tag > findEntries(const Expression * exp, const Scope * scope); private: void addTreeChild(const QString &className); }; #endif /* __TREE_H__ */ qdevelop-v0.28/src/QIComplete/.svn/text-base/readtags.h.svn-base0000444000175000017500000002124211362261065023456 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : Darren Hiebert and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the ctags project ********************************************************************************************************/ /* * This file defines the public interface for looking up tag entries in tag * files. * * The functions defined in this interface are intended to provide tag file * support to a software tool. The tag lookups provided are sufficiently fast * enough to permit opening a sorted tag file, searching for a matching tag, * then closing the tag file each time a tag is looked up (search times are * on the order of hundreths of a second, even for huge tag files). This is * the recommended use of this library for most tool applications. Adhering * to this approach permits a user to regenerate a tag file at will without * the tool needing to detect and resynchronize with changes to the tag file. * Even for an unsorted 24MB tag file, tag searches take about one second. */ #ifndef READTAGS_H #define READTAGS_H #ifdef __cplusplus extern "C" { #endif /* * MACROS */ /* Options for tagsSetSortType() */ typedef enum { TAG_UNSORTED, TAG_SORTED, TAG_FOLDSORTED } sortType; /* Options for tagsFind() */ #define TAG_FULLMATCH 0x0 #define TAG_PARTIALMATCH 0x1 #define TAG_OBSERVECASE 0x0 #define TAG_IGNORECASE 0x2 /* * DATA DECLARATIONS */ typedef enum { TagFailure = 0, TagSuccess = 1 } tagResult; struct sTagFile; typedef struct sTagFile tagFile; /* This structure contains information about the tag file. */ typedef struct { struct { /* was the tag file successfully opened? */ int opened; /* errno value when 'opened' is false */ int error_number; } status; /* information about the structure of the tag file */ struct { /* format of tag file (1 = original, 2 = extended) */ short format; /* how is the tag file sorted? */ sortType sort; } file; /* information about the program which created this tag file */ struct { /* name of author of generating program (may be null) */ const char *author; /* name of program (may be null) */ const char *name; /* URL of distribution (may be null) */ const char *url; /* program version (may be null) */ const char *version; } program; } tagFileInfo; /* This structure contains information about an extension field for a tag. * These exist at the end of the tag in the form "key:value"). */ typedef struct { /* the key of the extension field */ const char *key; /* the value of the extension field (may be an empty string) */ const char *value; } tagExtensionField; /* This structure contains information about a specific tag. */ typedef struct { /* name of tag */ const char *name; /* path of source file containing definition of tag */ const char *file; /* address for locating tag in source file */ struct { /* pattern for locating source line * (may be NULL if not present) */ const char *pattern; /* line number in source file of tag definition * (may be zero if not known) */ unsigned long lineNumber; } address; /* kind of tag (may by name, character, or NULL if not known) */ const char *kind; /* is tag of file-limited scope? */ short fileScope; /* miscellaneous extension fields */ struct { /* number of entries in `list' */ unsigned short count; /* list of key value pairs */ tagExtensionField *list; } fields; } tagEntry; /* * FUNCTION PROTOTYPES */ /* * This function must be called before calling other functions in this * library. It is passed the path to the tag file to read and a (possibly * null) pointer to a structure which, if not null, will be populated with * information about the tag file. If successful, the function will return a * handle which must be supplied to other calls to read information from the * tag file, and info.status.opened will be set to true. If unsuccessful, * info.status.opened will be set to false and info.status.error_number will * be set to the errno value representing the system error preventing the tag * file from being successfully opened. */ extern tagFile *tagsOpen(const char *const filePath, tagFileInfo * const info); /* * This function allows the client to override the normal automatic detection * of how a tag file is sorted. Permissible values for `type' are * TAG_UNSORTED, TAG_SORTED, TAG_FOLDSORTED. Tag files in the new extended * format contain a key indicating whether or not they are sorted. However, * tag files in the original format do not contain such a key even when * sorted, preventing this library from taking advantage of fast binary * lookups. If the client knows that such an unmarked tag file is indeed * sorted (or not), it can override the automatic detection. Note that * incorrect lookup results will result if a tag file is marked as sorted when * it actually is not. The function will return TagSuccess if called on an * open tag file or TagFailure if not. */ extern tagResult tagsSetSortType(tagFile * const file, const sortType type); /* * Reads the first tag in the file, if any. It is passed the handle to an * opened tag file and a (possibly null) pointer to a structure which, if not * null, will be populated with information about the first tag file entry. * The function will return TagSuccess another tag entry is found, or * TagFailure if not (i.e. it reached end of file). */ extern tagResult tagsFirst(tagFile * const file, tagEntry * const entry); /* * Step to the next tag in the file, if any. It is passed the handle to an * opened tag file and a (possibly null) pointer to a structure which, if not * null, will be populated with information about the next tag file entry. The * function will return TagSuccess another tag entry is found, or TagFailure * if not (i.e. it reached end of file). It will always read the first tag in * the file immediately after calling tagsOpen(). */ extern tagResult tagsNext(tagFile * const file, tagEntry * const entry); /* * Retrieve the value associated with the extension field for a specified key. * It is passed a pointer to a structure already populated with values by a * previous call to tagsNext(), tagsFind(), or tagsFindNext(), and a string * containing the key of the desired extension field. If no such field of the * specified key exists, the function will return null. */ extern const char *tagsField(const tagEntry * const entry, const char *const key); /* * Find the first tag matching `name'. The structure pointed to by `entry' * will be populated with information about the tag file entry. If a tag file * is sorted using the C locale, a binary search algorithm is used to search * the tag file, resulting in very fast tag lookups, even in huge tag files. * Various options controlling the matches can be combined by bit-wise or-ing * certain values together. The available values are: * * TAG_PARTIALMATCH * Tags whose leading characters match `name' will qualify. * * TAG_FULLMATCH * Only tags whose full lengths match `name' will qualify. * * TAG_IGNORECASE * Matching will be performed in a case-insenstive manner. Note that * this disables binary searches of the tag file. * * TAG_OBSERVECASE * Matching will be performed in a case-senstive manner. Note that * this enables binary searches of the tag file. * * The function will return TagSuccess if a tag matching the name is found, or * TagFailure if not. */ extern tagResult tagsFind(tagFile * const file, tagEntry * const entry, const char *const name, const int options); /* * Find the next tag matching the name and options supplied to the most recent * call to tagsFind() for the same tag file. The structure pointed to by * `entry' will be populated with information about the tag file entry. The * function will return TagSuccess if another tag matching the name is found, * or TagFailure if not. */ extern tagResult tagsFindNext(tagFile * const file, tagEntry * const entry); /* * Call tagsTerminate() at completion of reading the tag file, which will * close the file and free any internal memory allocated. The function will * return TagFailure is no file is currently open, TagSuccess otherwise. */ extern tagResult tagsClose(tagFile * const file); #ifdef __cplusplus }; #endif #endif /* vi:set tabstop=8 shiftwidth=4: */ qdevelop-v0.28/src/QIComplete/.svn/text-base/tree.cpp.svn-base0000444000175000017500000002563711362261065023172 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #include #include #define QD qDebug() << __FILE__ << __LINE__ << ":" #include #include "tree.h" #include "parse.h" #include "readtags.h" InitCompletion* Tree::parent = NULL; //brc: new subroutine void Tree::addTreeChild(const QString &className) { /* check this class if not already in the tree to * avoid a hangup with a broken (=cirular) tags file */ if (findInTree(className) == NOT_FOUND) { Tree *child = Tree::buildInheritanceTree(className); inherits << child; } } Tree* Tree::buildInheritanceTree(const QString &className) { Tree *root = new Tree; root->name = className; tagEntry entry; tagFileInfo info; tagFile *tfile = tagsOpen(parent->tagsFilePath.toAscii(), &info); //brc: split namespace part and classname char nbuffer[256]; char *nspace = NULL; strncpy(nbuffer, className.toAscii(), 256); nbuffer[255] = '\0'; char *cname = nbuffer; char *p = nbuffer; char *np = NULL; while ((np = strstr(p, "::"))) p = np + 2; if (p != nbuffer) { *(p - 2) = '\0'; nspace = nbuffer; cname = p; } Tree *tree = root; //brc: namespace workaround: if no namespace is present, try to find the class // also in std:: if (!nspace) { char buffer[512]; strcpy(buffer, "std::"); strcat(buffer, cname); tree->addTreeChild(buffer); } int i = 0; // counters if (tfile && info.status.opened) { if (tagsFind(tfile, &entry, cname, TAG_OBSERVECASE | TAG_FULLMATCH) == TagSuccess) { do { //brc:follow typedefs ... if (!strcmp(entry.kind, "typedef") && entry.address.pattern) { const char *field_namespace = tagsField(&entry, "namespace"); if ((nspace && field_namespace && !strcmp(field_namespace, nspace)) || !nspace) { char pattern[256]; strncpy(pattern, entry.address.pattern, 256); pattern[255] = '\0'; char *p = strstr(pattern, "typedef"); if (p && strstr(pattern, cname)) { p += strlen("typedef"); char *p1; if ((p1 = strstr(p, "typename"))) p = p1 + strlen("typename"); if (strstr(p, "struct")) continue; if ((p = strtok(p, " \n\t<"))) { tree->freeTree(); if (nspace) { char buffer[512]; strcpy(buffer, nspace); strcat(buffer, "::"); strcat(buffer, p); return Tree::buildInheritanceTree(buffer); } else { return Tree::buildInheritanceTree(p); } } } } } /* need to get the entry for the class definition */ if (!strcmp(entry.kind, "class") || !strcmp(entry.kind, "struct") || !strcmp(entry.kind, "union")) { /* and look for the entry "inherits" to see which are superclassNamees of className */ for (; i < entry.fields.count; i++) { if (!strcmp(entry.fields.list[i].key, "inherits")) { /* split the inherits string to single classNamees for multiple inheritance */ //char *allinherits = strdup(entry.fields.list[i].value); QString allinherits = entry.fields.list[i].value; char *buffer = NULL; //char *inherit = strtok(allinherits, ","); QString inherit = allinherits.section(",", 0, 0); while (inherit != NULL) { tree->addTreeChild(inherit); /* next token */ //inherit = strtok(buffer, ","); inherit = QString(buffer).section(",", 0, 0); } //free(allinherits); goto end; } } // no more superclassNamees goto end; } } while (tagsFindNext(tfile, &entry)); } end: tagsClose(tfile); } return root; } void Tree::freeTree() { for (int i = 0; i < inherits.size(); i++) inherits[i]->freeTree(); } Match Tree::findInTree(const QString &className) { if ( name == className) return DIRECT_HIT; for (int i = 0; i < inherits.size(); i++) if (inherits[i]->findInTree(className) >= DIRECT_HIT) return SUBCLASS; return NOT_FOUND; } bool Tree::isMemberOfScope(const tagEntry * entry, const Scope * scope) { const char *field_className = tagsField(entry, "class"); const char *field_struct = tagsField(entry, "struct"); const char *field_union = tagsField(entry, "union"); //const char *field_namespace = tagsField(entry, "namespace"); const char *field_access = tagsField(entry, "access"); const char *tag_className = NULL; if (field_className) tag_className = field_className; else if (field_struct) tag_className = field_struct; else if (field_union) tag_className = field_union; else return false; /* tag must be part of (inherited) className to show it */ Match match_tag = findInTree(tag_className); if (match_tag == NOT_FOUND) return false; if (field_union) return true; if (!field_access) return false; if (!strcmp(field_access, "public")) return true; /* if access is not public, current scope must be in one of the * (inherited) classNamees */ Match match_curscope = findInTree(scope->scope); if (!strcmp(field_access, "protected") && match_curscope >= DIRECT_HIT) return true; else if (!strcmp(field_access, "private") && match_curscope == DIRECT_HIT) return true; return false; } TagList Tree::findEntries(const Expression * exp, const Scope * scope) { QList < Tag > TagList; tagEntry entry; tagFileInfo info; tagFile *tfile = tagsOpen(parent->tagsFilePath.toAscii(), &info); char lasttag[256] = ""; /* store last tag to avoid duplicates */ /* create an inheritance tree of our class or current scope, depending what we want to complete */ Tree *tree = NULL; if (exp->access & AccessMembers || exp->access & AccessPointer || exp->access & AccessStatic || exp->access & AccessInFunction) tree = Tree::buildInheritanceTree(exp->className); else if (exp->access & AccessGlobal) tree = Tree::buildInheritanceTree(scope->scope); if (!tree) { printf("Couldn't build inheritance tree\n"); return QList < Tag > (); } /* parse the tags file */ if (tfile && info.status.opened) { /* we can do a binary search for function definitions */ if (exp->access == AccessInFunction && tagsFind(tfile, &entry, exp->function.toAscii(), TAG_FULLMATCH | TAG_OBSERVECASE) == TagSuccess) { do { bool show_this_tag = false; const char *field_kind = tagsField(&entry, "kind"); if (field_kind && (!strcmp(field_kind, "member") || !strcmp(field_kind, "method"))) show_this_tag = tree->isMemberOfScope(&entry, scope); else if (!strcmp(field_kind, "function") || !strcmp(field_kind, "prototype")) { if (exp->className == "") // only a function, not method of a class show_this_tag = true; else show_this_tag = tree->isMemberOfScope(&entry, scope); } if (!show_this_tag) continue; /* output the tag if it is valid and no duplicate either to stdout * or to a file if the -o flag was given */ Tag tag; tag = Parse::prettifyTag(&entry); if ( ( exp->writing.length() && exp->writing[0] == 0 ) || tag.name.startsWith(exp->writing)) TagList << tag; } while (tagsFindNext(tfile, &entry) == TagSuccess); } // otherwise loop through all tags // and filter those which match one of our inherited class names else if (tagsFirst(tfile, &entry) == TagSuccess) { do { bool show_this_tag = false; const char *field_kind = tagsField(&entry, "kind"); const char *field_className = tagsField(&entry, "class"); const char *field_struct = tagsField(&entry, "struct"); const char *field_union = tagsField(&entry, "union"); const char *field_namespace = tagsField(&entry, "namespace"); const char *field_access = tagsField(&entry, "access"); switch (exp->access) { /* * find MEMBERS of classes/structs */ case AccessMembers: case AccessPointer: if (strstr(entry.address.pattern, "static ")) continue; /* Qt 3 defines this, and checking for it does not harm other users */ if (strstr(entry.address.pattern, "QT_STATIC_CONST ")) continue; // don't show destructors, can't call them directly anyways. if ( QString(entry.name).length() && entry.name[0] == '~') { show_this_tag = false; break; } // TODO: namespace support if (field_kind && (!strcmp(field_kind, "member") || !strcmp(field_kind, "function") || !strcmp(field_kind, "prototype") || !strcmp(field_kind, "method"))) show_this_tag = tree->isMemberOfScope(&entry, scope); break; /* * find STATIC functions/variables (everything after a ::) */ case AccessStatic: /* when we find a tag, the following conditions must be met, to show the tag: * - must be part of a className or namespace * - must contain "static" on the line * - must be "public" */ if (field_className) { if (exp->className == QString(field_className) && field_access && !strcmp(field_access, "public")) /* XXX: Workaround ctags limitation and try to find out * ourselves, if this tag is a static one, if it * has "static" in the pattern */ if (strstr(entry.address.pattern, "static ") || strstr(entry.address.pattern, "QT_STATIC_CONST ")) show_this_tag = true; } else if (field_namespace) if (exp->className == QString(field_namespace)) show_this_tag = true; break; // find GLOBAL functions/variables/defines case AccessGlobal: // everthing which is not part of a className or struct matches if (!field_className && !field_struct && !field_union) show_this_tag = true; else // also show locals of current scope show_this_tag = tree->isMemberOfScope(&entry, scope); break; default: // things like if() while() for(), etc. break; } /* output the tag if it is valid and no duplicate either to stdout * or to a file if the -o flag was given */ if (show_this_tag ) { Tag tag; if (exp->access & AccessInFunction) tag = Parse::prettifyTag(&entry); else { strncpy(lasttag, entry.name, 256); tag = Parse::prettifyTag(&entry); } if ( ( exp->writing.length() && exp->writing[0] == 0 ) || tag.name.startsWith(exp->writing)) { TagList << tag; } } } while (tagsNext(tfile, &entry) == TagSuccess); } tagsClose(tfile); } else return QList < Tag > (); tree->freeTree(); return TagList; } qdevelop-v0.28/src/QIComplete/.svn/text-base/parse.h.svn-base0000444000175000017500000000664211362261065023005 0ustar jlbrdjlbrd/******************************************************************************************************** * PROGRAM : * DATE - TIME : lundi 10 avril 2006 - 22:28 * AUTHOR : IComplete Team and Anacr0x ( fred.julian at gmail.com ) * FILENAME : * LICENSE : GPL * COMMENTARY : Modified file (with qt) of the icomplete project ********************************************************************************************************/ #ifndef __PARSE_H__ #define __PARSE_H__ #include #include #include "readtags.h" #include "../InitCompletion.h" typedef enum { /* for now, these options are exclusive * but define them as a bitfield for possible * future improvements */ ParseError = 0x00, AccessPointer = 0x01, AccessMembers = 0x02, AccessStatic = 0x04, AccessGlobal = 0x08, AccessInFunction = 0x10 } Access; struct Expression { Access access; QString className; QString function; QString writing; QString text; }; struct Scope { QString scope; // if the cursor is in a function Foo::bar(), store Foo as the scope QString localdef; // stores the type of a local definition or "" if none found }; class Parse { QString ctagsCmdPath; QString tagsFilePath; QString parsedFilePath; QString smallTagsFilePath; public: Parse (const QString &CtagsCmdPath, const QString &TagsFilePath, const QString &ParsedFilePath, const QString &SmallTagsFilePath ) : ctagsCmdPath(CtagsCmdPath), tagsFilePath(TagsFilePath), parsedFilePath(ParsedFilePath), smallTagsFilePath(SmallTagsFilePath) {}; /* * for a given expr="str" and a string="std::string *str = new std::string("test");" * return the type qualifier "std::string" */ QString extractTypeQualifier(const QString &string, const QString &expr); /* * For a given expr "var->xy" or "var::" return `var' * and the AccessModifier (static, member,...) */ Expression parseExpression(QString expr, Scope * scope, bool showAllResults = false); /* fills the passed *exp pointer with information about the current expression * "QWidget w; w.getRect()." will return exp.className=QRect and exp.function=getRect */ bool getTypeOfExpression(const QString &expr, Expression * exp, Scope * scope); /* * prettified tags entry look like these: * rect\nQRect r; * setRect()\nvoid setRect (QRect &rect); */ static Tag prettifyTag(const tagEntry * entry); /* * extracts the scope at the end of a given code `expr' * and save the line of a local variable definition * Example: * * namespace Test { * void MyclassName::function(int var) * { * * If expr is the above code and ident is 'var', return: * scope = "Test::MyclassName" * localdef = "int" */ bool getScopeAndLocals(Scope * sc, const QString &expr, const QString &ident); /* * for a given expression "myvar->getX().toFloat" * the function should just return "myvar" * and move the **expr pointer after the ident * returns NULL, if no identifier is found, and then the value of expr is undefined */ char* scanForIdent(const char **expr); /* if the current identfier is the name of a function */ bool scanForFuncdef(const QString &expr); /* for ident=getRect and className=QWidget return QRect * @param token_is_function = true, if the token is a function or false if a variable * caller must free() the returned string */ QString getTypeOfToken(const QString &ident, const QString &className, Scope * scope, bool token_is_function); }; #endif /* __PARSE_H__ */ qdevelop-v0.28/plugins/formatting-astyle/translations/.svn/text-base/AStyle_French.ts.svn-base0000444000175000017500000002206011362261064031631 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Sample Style Styles GNU ANSI Custom Linux Java K&&R Indentation Indent multi-line preprocessor definitions Indent labels Indent namespaces Indent blocks Indent brackets Converts TABs to spaces Force using TABs Indentation size (in spaces) Indent classes (keywords public:, protected: and private:) Indent case: statement in switches (commands under case:) Use TABs instead of spaces Fill empty lines with the whitespace of their previous lines Indent switches (keyword case:) Formatting Brackets (None, Break, Attach or Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Insert space padding around operators Insert space padding around parenthesis Don't break complex statements and multiple statements residing in a single line Don't break one-line blocks &About &OK &Cancel <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin qdevelop-v0.28/plugins/formatting-astyle/translations/.svn/text-base/AStyle_Russian.ts.svn-base0000444000175000017500000002504111362261064032052 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Artistic Style: Плагин форматирования Sample Пример Style Стиль Styles Стили GNU ANSI Custom Пользовательский Linux Java K&&R Indentation Отступы Indent multi-line preprocessor definitions Отступ в многострочных директивах препроцессора Indent labels Отступ меток Indent namespaces Отступ пространств имён Indent blocks Отступ блоков Indent brackets Отступ скобок Converts TABs to spaces Конвертировать табуляции в пробелы Force using TABs Форсировать использование табуляций Indentation size (in spaces) Размер отступа (в пробелах) Indent classes (keywords public:, protected: and private:) Отступ в классах (слова public:, protected: and private:) Indent case: statement in switches (commands under case:) Отступать case: команды после "case:" Use TABs instead of spaces Использовать табуляции вместо пробелов Fill empty lines with the whitespace of their previous lines Заполнять пустые строки отступами как в предыдущих строках Indent switches (keyword case:) Отступ в конструкции switch (ключевое слово case:) Formatting Форматирование Brackets (None, Break, Attach or Linux): Скобки (none=Оставить, break=разбивать, attach=присоединять, linux=использовать стиль Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Пустые строки вокруг блоков (пр.: 'if', 'while'...) Break 'else if()' header combinations into seperate lines Разбивать комбинацию 'else if()' на отдельные строчки Insert space padding around operators Вставлять пробел вокруг операторов Insert space padding around parenthesis Вставлять пробел внутри скобок Don't break complex statements and multiple statements residing in a single line Не разбивать сложные и составные выражения, расположенные на одной строчке Don't break one-line blocks Не разбивать однострочные блоки &About &О плагине &OK &Ок &Cancel О&тмена <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin Artistic Style: Плагин форматирования AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net Плагин AStyle для QDevelop Авторское право (c) 2006 Jean-Luc Biord <jlbiord@qtfr.org> Перевод: Дмитрий "Divius" Танцур <divius.inside@gmail.com> Частью этого плагина является Artistic Style - утилита отступа и переформатирования для исходников C, C++, C# и Java. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin Artistic Style: Плагин форматирования qdevelop-v0.28/plugins/formatting-astyle/translations/.svn/text-base/AStyle_German.ts.svn-base0000444000175000017500000002445011362261064031642 0ustar jlbrdjlbrd AStyleDialog Artistic Style Formatter Plugin Plugin für AStyle-Formatierer Sample Beispiel Style Stil Styles Stile GNU ANSI Custom Benutzerdefiniert Linux Java K&&R K&&R Indentation Einrückung Indent multi-line preprocessor definitions Mehrzeilige Präprozessor-Anweisungen einrücken Indent labels Beschriftungen einrücken Indent namespaces Namensräume einrücken Indent blocks Blöcke einrücken Indent brackets Klammern einrücken Converts TABs to spaces TABs in Leerzeichen umwandeln Force using TABs TABs erzwingen Indentation size (in spaces) Größe der Einrückung (in Leerzeichen) Indent classes (keywords public:, protected: and private:) Klassen einrücken (Schlüsselwörter public:, protected: und private:) Indent case: statement in switches (commands under case:) Kommandos unter case: in switch-Blöcken einrücken Use TABs instead of spaces TABs statt Leerzeichen verwenden Fill empty lines with the whitespace of their previous lines Fülle leere Zeilen mit der Anzahl führender Leerzeichen der vorhergehenden Zeile Indent switches (keyword case:) switch-Blöcke einrücken (Schlüsselwort case:) Formatting Formatierung Brackets (None, Break, Attach or Linux): Klammern (keine, umbrechen, anhängen oder Linux): none break attach linux Pad empty lines around header blocks (e.g. 'if', 'while'...) Leere Zeilen um Blöcke (z.B. 'if', 'while'...) Break 'else if()' header combinations into seperate lines Trenne 'else if()' in zwei Zeilen Insert space padding around operators Füge Leerzeichen um Operatoren ein Insert space padding around parenthesis Füge Leerzeichen um Klammern ein Don't break complex statements and multiple statements residing in a single line Brich komplizierte und kombinierte Ausdrücke in einer Zeile nicht um Don't break one-line blocks Brich einzeilige Blöcke nicht um &About &Über &OK &Ok &Cancel &Abbrechen <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html> AStyleDialogImpl Artistic Style Formatter Plugin Plugin für AStyle-Formatierer AStyle plugin for QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Part of this plugin is Artistic Style - an indentation and reformatting tool for C, C++, C# and Java source files. http://astyle.sourceforge.net AStyle Plugin für QDevelop Copyright (c) 2006 Jean-Luc Biord jlbiord@qtfr.org Dieses programm enthält "Artistic Style" - ein Tool zum Einrücken und Reformatieren von C, C++, C# und Java Quelltext. http://astyle.sourceforge.net AStylePlugin Artistic Style Formatter Plugin Plugin für AStyle-Formatierer ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_German.ts.svn-baseqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_German.ts.svn-base0000444000175000017500000000654011362261064032743 0ustar jlbrdjlbrd QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Editor für reguläre Ausdrücke, z.B. [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Regulären Ausdruck kontrollieren Meaning of Colours: Bedeutung der Farben: Acceptable Stimmt überein Intermediate Vorstufe Invalid Ungültig Close Schließen About plugin Über das Plugin RegExp Planner RegExp-Planer RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> RegExp-Planer Plugin für QDevelop Ursprüngliche Arbeit: Copyright (C) 2008 von Prém József Angepasst für QDevelop von Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Plugin license: GPLv2 Lizenz des Plugins: GPLv2 QpjValidIndicatorLabel Valid Gültig Invalid Ungültig RePlugin RegExp Planner RegExp-Planer ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_French.ts.svn-baseqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_French.ts.svn-base0000444000175000017500000000636011362261064032737 0ustar jlbrdjlbrd QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Meaning of Colours: Acceptable Intermediate Invalid Close About plugin RegExp Planner RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Plugin license: GPLv2 QpjValidIndicatorLabel Valid Invalid RePlugin RegExp Planner ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_Russian.ts.svn-baseqdevelop-v0.28/plugins/tools-regexp-planner/translations/.svn/text-base/RePlanner_Russian.ts.svn-bas0000444000175000017500000000765111362261064033015 0ustar jlbrdjlbrd Invalid Неверно QpjRegExpPlannerDialog Regular Expression Editor e.g. [A-Za-z][1-9][0-9]{0,2} Редактор регулярных выражений пр.: [A-Za-z][1-9][0-9]{0,2} Regular Expression Checker Проверка регулярных выражений Meaning of Colours: Значения цветов: Acceptable Допустимое Intermediate Промежуточное Invalid Неверное Close Закрыть About plugin О плагине RegExp Planner RegExp Planner: Редактор регулярных выражений RegExp Planner plugin for QDevelop Original work: Copyright (C) 2008 by Prém József Adapted for using with QDevelop by Dmitrij "Divius" Tantsur <divius.inside@gmail.com> Плагин RegExp Planner для QDevelop Оригинальная разработка: Copyright (C) 2008 by Prém József Адаптация для использования в QDevelop: Дмитрий "Divius" Танцур <divius.inside@gmail.com> Plugin license: GPLv2 Лицензия плагина: GPLv2 QpjValidIndicatorLabel Valid Верно Invalid Неверно RePlugin RegExp Planner Редактор регулярных выражений