diff --git a/NEWS.md b/NEWS.md index e5df6e0a..ef0469d7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -31,6 +31,8 @@ Red Panda C++ Version 2.12 - enhancement: Parser not correctly released if save a c file to non-c file. - enhancement: Improve auto indent for embedding no-brace statements like for-for-if. - enhancement: Toggle comment for asm/makefile/lua files. + - enhancement: Delay for tooltips. + - enhancement: "Tool tips delay" option in Options/editor/Tooltips Red Panda C++ Version 2.11 diff --git a/RedPandaIDE/editor.cpp b/RedPandaIDE/editor.cpp index 10fa0d0e..7da92182 100644 --- a/RedPandaIDE/editor.cpp +++ b/RedPandaIDE/editor.cpp @@ -195,6 +195,8 @@ Editor::Editor(QWidget *parent, const QString& filename, mAutoBackupTimer.setInterval(1); connect(&mAutoBackupTimer, &QTimer::timeout, this, &Editor::onAutoBackupTimer); + connect(&mTooltipTimer, &QTimer::timeout, + this, &Editor::onTooltipTimer); } connect(horizontalScrollBar(), &QScrollBar::valueChanged, @@ -1233,169 +1235,21 @@ bool Editor::event(QEvent *event) && !pMainWindow->completionPopup()->isVisible() && !pMainWindow->functionTip()->isVisible() && !pMainWindow->headerCompletionPopup()->isVisible()) { - if(mHoverModifiedLine!=-1) { - invalidateLine(mHoverModifiedLine); - mHoverModifiedLine=-1; - } - - QHoverEvent *helpEvent = static_cast(event); - QSynedit::BufferCoord p; - TipType reason = getTipType(helpEvent->pos(),p); - PSyntaxIssue pError; - int line ; - if (reason == TipType::Error) { - pError = getSyntaxIssueAtPosition(p); - } else if (pointToLine(helpEvent->pos(),line)) { - //issue tips is prefered - PSyntaxIssueList issues = getSyntaxIssuesAtLine(line); - if (issues && !issues->isEmpty()) { - reason = TipType::Error; - pError = issues->front(); - } - } - - // Get subject - bool isIncludeLine = false; - bool isIncludeNextLine = false; - QSynedit::BufferCoord pBeginPos,pEndPos; - QString s; - QStringList expression; - switch (reason) { - case TipType::Preprocessor: - // When hovering above a preprocessor line, determine if we want to show an include or a identifier hint - if (mParser) { - s = document()->getLine(p.line - 1); - isIncludeNextLine = mParser->isIncludeNextLine(s); - if (!isIncludeNextLine) - isIncludeLine = mParser->isIncludeLine(s); - if (!isIncludeNextLine &&!isIncludeLine) - s = wordAtRowCol(p); - } - break; - case TipType::Identifier: - if (pMainWindow->debugger()->executing() && !pMainWindow->debugger()->inferiorRunning()) - s = getWordAtPosition(this,p, pBeginPos,pEndPos, WordPurpose::wpEvaluation); // debugging - else if (!mCompletionPopup->isVisible() - && !mHeaderCompletionPopup->isVisible()) { - expression = getExpressionAtPosition(p); - s = expression.join(""); // information during coding - } - break; - case TipType::Selection: - s = selText(); // when a selection is available, always only use that - break; - case TipType::Error: - s = pError->token; - break; - case TipType::None: - cancelHint(); - mCurrentWord = ""; - mCurrentTipType = TipType::None; - event->ignore(); - return true; - } - - s = s.trimmed(); - if ((s == mCurrentWord) && (mCurrentTipType == reason)) { - if (mParser - && mParser->enabled() - && qApp->queryKeyboardModifiers() == Qt::ControlModifier) { - if (!hasFocus()) - activate(); - setCursor(Qt::PointingHandCursor); - } else { - updateMouseCursor(); - } - if (pointToLine(helpEvent->pos(),line)) { - invalidateLine(line); - mHoverModifiedLine=line; - } - event->ignore(); - return true; // do NOT remove hint when subject stays the same - } - - // Remove hint cancelHint(); - mCurrentWord = s; - mCurrentTipType = reason; - - - // Determine what to do with subject - QString hint = ""; - switch (reason) { - case TipType::Preprocessor: - if (isIncludeNextLine || isIncludeLine) { - if (pSettings->editor().enableHeaderToolTips()) - hint = getFileHint(s, isIncludeNextLine); - } else if (//devEditor.ParserHints and - !mCompletionPopup->isVisible() - && !mHeaderCompletionPopup->isVisible()) { - if (pSettings->editor().enableIdentifierToolTips()) - hint = getParserHint(QStringList(),s,p.line); - } - break; - case TipType::Identifier: - case TipType::Selection: - if (!mCompletionPopup->isVisible() - && !mHeaderCompletionPopup->isVisible()) { - if (pMainWindow->debugger()->executing() - && (pSettings->editor().enableDebugTooltips())) { - showDebugHint(s,p.line); - } else if (pSettings->editor().enableIdentifierToolTips()) { //if devEditor.ParserHints { - hint = getParserHint(expression, s, p.line); - } - } - break; - case TipType::Error: - if (pSettings->editor().enableIssueToolTips()) - hint = getErrorHint(pError); - break; - default: - break; - } -// qDebug()<<"hint:"<(QApplication::instance()); - // if (app->keyboardModifiers().testFlag(Qt::ControlModifier)) { - if (mParser - && mParser->enabled() - && qApp->queryKeyboardModifiers() == Qt::ControlModifier) { - if (!hasFocus()) - activate(); - setCursor(Qt::PointingHandCursor); - } else if (cursor() == Qt::PointingHandCursor) { - updateMouseCursor(); - } - if (pointToLine(helpEvent->pos(),line)) { - invalidateLine(line); - mHoverModifiedLine=line; - } - if (pMainWindow->functionTip()->isVisible()) { - pMainWindow->functionTip()->hide(); - } - QToolTip::showText(mapToGlobal(helpEvent->pos()),hint,this); - event->ignore(); + mTooltipTimer.stop(); + if (pSettings->editor().tipsDelay()>0) { + mTooltipTimer.setSingleShot(true); + mTooltipTimer.start(pSettings->editor().tipsDelay()); } else { - updateMouseCursor(); - event->ignore(); + onTooltipTimer(); } - return true; + event->ignore(); } else if (event->type() == QEvent::HoverLeave) { cancelHint(); return true; } else if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease ) { if (!mCurrentWord.isEmpty()) { - QKeyEvent* keyEvent = dynamic_cast(event); - if (keyEvent->key() == Qt::Key_Control) { - QApplication* app = dynamic_cast(QApplication::instance()); - //postEvent takes the owner ship - QHoverEvent* hoverEvent=new QHoverEvent(QEvent::HoverMove, - mapFromGlobal(QCursor::pos()), - mapFromGlobal(QCursor::pos()), - Qt::ControlModifier - ); - app->postEvent(this,hoverEvent); - } + onTooltipTimer(); } } return QSynEdit::event(event); @@ -1408,7 +1262,7 @@ void Editor::mouseReleaseEvent(QMouseEvent *event) } // if ctrl+clicked - if ((cursor() == Qt::PointingHandCursor) && (event->modifiers() == Qt::ControlModifier) + if ((event->modifiers() == Qt::ControlModifier) && (event->button() == Qt::LeftButton)) { QSynedit::BufferCoord p; @@ -1886,8 +1740,10 @@ void Editor::onStatusChanged(QSynedit::StatusChanges changes) if (pSettings->editor().showFunctionTips()) { updateFunctionTip(false); mFunctionTipTimer.stop(); - mFunctionTipTimer.start(500); -// updateFunctionTip(); + if (pSettings->editor().tipsDelay()>0) + mFunctionTipTimer.start(500); + else + onFunctionTipsTimer(); } } @@ -1970,6 +1826,151 @@ void Editor::onAutoBackupTimer() saveAutoBackup(); } +void Editor::onTooltipTimer() +{ + if(mHoverModifiedLine!=-1) { + invalidateLine(mHoverModifiedLine); + mHoverModifiedLine=-1; + } + + QSynedit::BufferCoord p; + QPoint pos = mapFromGlobal(QCursor::pos()); + TipType reason = getTipType(pos,p); + PSyntaxIssue pError; + int line ; + if (reason == TipType::Error) { + pError = getSyntaxIssueAtPosition(p); + } else if (pointToLine(pos,line)) { + //issue tips is prefered + PSyntaxIssueList issues = getSyntaxIssuesAtLine(line); + if (issues && !issues->isEmpty()) { + reason = TipType::Error; + pError = issues->front(); + } + } + + // Get subject + bool isIncludeLine = false; + bool isIncludeNextLine = false; + QSynedit::BufferCoord pBeginPos,pEndPos; + QString s; + QStringList expression; + switch (reason) { + case TipType::Preprocessor: + // When hovering above a preprocessor line, determine if we want to show an include or a identifier hint + if (mParser) { + s = document()->getLine(p.line - 1); + isIncludeNextLine = mParser->isIncludeNextLine(s); + if (!isIncludeNextLine) + isIncludeLine = mParser->isIncludeLine(s); + if (!isIncludeNextLine &&!isIncludeLine) + s = wordAtRowCol(p); + } + break; + case TipType::Identifier: + if (pMainWindow->debugger()->executing() && !pMainWindow->debugger()->inferiorRunning()) + s = getWordAtPosition(this,p, pBeginPos,pEndPos, WordPurpose::wpEvaluation); // debugging + else if (!mCompletionPopup->isVisible() + && !mHeaderCompletionPopup->isVisible()) { + expression = getExpressionAtPosition(p); + s = expression.join(""); // information during coding + } + break; + case TipType::Selection: + s = selText(); // when a selection is available, always only use that + break; + case TipType::Error: + s = pError->token; + break; + case TipType::None: + cancelHint(); + mCurrentWord = ""; + mCurrentTipType = TipType::None; + return; + } + + s = s.trimmed(); + if ((s == mCurrentWord) && (mCurrentTipType == reason)) { + if (mParser + && mParser->enabled() + && qApp->queryKeyboardModifiers() == Qt::ControlModifier) { + if (!hasFocus()) + activate(); + setCursor(Qt::PointingHandCursor); + } else { + updateMouseCursor(); + } + if (pointToLine(pos,line)) { + invalidateLine(line); + mHoverModifiedLine=line; + } + } + + // Remove hint + cancelHint(); + mCurrentWord = s; + mCurrentTipType = reason; + + + // Determine what to do with subject + QString hint = ""; + switch (reason) { + case TipType::Preprocessor: + if (isIncludeNextLine || isIncludeLine) { + if (pSettings->editor().enableHeaderToolTips()) + hint = getFileHint(s, isIncludeNextLine); + } else if (//devEditor.ParserHints and + !mCompletionPopup->isVisible() + && !mHeaderCompletionPopup->isVisible()) { + if (pSettings->editor().enableIdentifierToolTips()) + hint = getParserHint(QStringList(),s,p.line); + } + break; + case TipType::Identifier: + case TipType::Selection: + if (!mCompletionPopup->isVisible() + && !mHeaderCompletionPopup->isVisible()) { + if (pMainWindow->debugger()->executing() + && (pSettings->editor().enableDebugTooltips())) { + showDebugHint(s,p.line); + } else if (pSettings->editor().enableIdentifierToolTips()) { //if devEditor.ParserHints { + hint = getParserHint(expression, s, p.line); + } + } + break; + case TipType::Error: + if (pSettings->editor().enableIssueToolTips()) + hint = getErrorHint(pError); + break; + default: + break; + } +// qDebug()<<"hint:"<(QApplication::instance()); + // if (app->keyboardModifiers().testFlag(Qt::ControlModifier)) { + if (mParser + && mParser->enabled() + && qApp->queryKeyboardModifiers() == Qt::ControlModifier) { + if (!hasFocus()) + activate(); + setCursor(Qt::PointingHandCursor); + } else if (cursor() == Qt::PointingHandCursor) { + updateMouseCursor(); + } + if (pointToLine(pos,line)) { + invalidateLine(line); + mHoverModifiedLine=line; + } + if (pMainWindow->functionTip()->isVisible()) { + pMainWindow->functionTip()->hide(); + } + QToolTip::showText(mapToGlobal(pos),hint,this); + } else { + updateMouseCursor(); + } +} + void Editor::resolveAutoDetectEncodingOption() { if (mEncodingOption==ENCODING_AUTO_DETECT) { @@ -3829,8 +3830,8 @@ void Editor::cancelHint() // disable editor hint QToolTip::hideText(); - //mCurrentWord = ""; - //mCurrentTipType = TipType::None; + mCurrentWord=""; + mCurrentTipType=TipType::None; updateMouseCursor(); } diff --git a/RedPandaIDE/editor.h b/RedPandaIDE/editor.h index 122525a6..67d93a07 100644 --- a/RedPandaIDE/editor.h +++ b/RedPandaIDE/editor.h @@ -236,6 +236,7 @@ private slots: void onLinesInserted(int first,int count); void onFunctionTipsTimer(); void onAutoBackupTimer(); + void onTooltipTimer(); private: void resolveAutoDetectEncodingOption(); @@ -344,6 +345,7 @@ private: std::shared_ptr > > mStatementColors; QTimer mFunctionTipTimer; QTimer mAutoBackupTimer; + QTimer mTooltipTimer; int mHoverModifiedLine; static QHash> mSharedParsers; diff --git a/RedPandaIDE/settings.cpp b/RedPandaIDE/settings.cpp index a4d398ca..86e90230 100644 --- a/RedPandaIDE/settings.cpp +++ b/RedPandaIDE/settings.cpp @@ -777,6 +777,16 @@ void Settings::Editor::setEnableEditTempBackup(bool newEnableEditTempBackup) mEnableEditTempBackup = newEnableEditTempBackup; } +int Settings::Editor::tipsDelay() const +{ + return mTipsDelay; +} + +void Settings::Editor::setTipsDelay(int newTipsDelay) +{ + mTipsDelay = newTipsDelay; +} + bool Settings::Editor::showTrailingSpaces() const { return mShowTrailingSpaces; @@ -1408,6 +1418,7 @@ void Settings::Editor::doSave() saveValue("enable_header_tooltips",mEnableHeaderToolTips); saveValue("enable_issue_tooltips",mEnableIssueToolTips); saveValue("show_function_tips",mShowFunctionTips); + saveValue("tips_delay",mTipsDelay); } void Settings::Editor::doLoad() @@ -1563,6 +1574,7 @@ void Settings::Editor::doLoad() mEnableHeaderToolTips = boolValue("enable_header_tooltips", true); mEnableIssueToolTips = boolValue("enable_issue_tooltips", true); mShowFunctionTips = boolValue("show_function_tips",true); + mTipsDelay = intValue("tips_delay",500); } QSynedit::EditCaretType Settings::Editor::caretForOverwrite() const diff --git a/RedPandaIDE/settings.h b/RedPandaIDE/settings.h index 5a168725..439344ef 100644 --- a/RedPandaIDE/settings.h +++ b/RedPandaIDE/settings.h @@ -402,6 +402,9 @@ public: bool enableEditTempBackup() const; void setEnableEditTempBackup(bool newEnableEditTempBackup); + int tipsDelay() const; + void setTipsDelay(int newTipsDelay); + private: //General // indents @@ -527,6 +530,7 @@ public: //hints tooltip + int mTipsDelay; bool mEnableTooltips; bool mEnableDebugTooltips; bool mEnableIdentifierToolTips; diff --git a/RedPandaIDE/settingsdialog/editortooltipswidget.cpp b/RedPandaIDE/settingsdialog/editortooltipswidget.cpp index dd942f43..fca760cf 100644 --- a/RedPandaIDE/settingsdialog/editortooltipswidget.cpp +++ b/RedPandaIDE/settingsdialog/editortooltipswidget.cpp @@ -38,7 +38,7 @@ void EditorTooltipsWidget::doLoad() ui->chkIdentifierTooltips->setChecked(pSettings->editor().enableIdentifierToolTips()); ui->chkHeaderTooltips->setChecked(pSettings->editor().enableHeaderToolTips()); ui->chkDebugTooltips->setChecked(pSettings->editor().enableDebugTooltips()); - + ui->spinTipsDelay->setValue(pSettings->editor().tipsDelay()); } void EditorTooltipsWidget::doSave() @@ -49,5 +49,6 @@ void EditorTooltipsWidget::doSave() pSettings->editor().setEnableIdentifierToolTips(ui->chkIdentifierTooltips->isChecked()); pSettings->editor().setEnableHeaderToolTips(ui->chkHeaderTooltips->isChecked()); pSettings->editor().setEnableDebugTooltips(ui->chkDebugTooltips->isChecked()); + pSettings->editor().setTipsDelay(ui->spinTipsDelay->value()); pSettings->editor().save(); } diff --git a/RedPandaIDE/settingsdialog/editortooltipswidget.ui b/RedPandaIDE/settingsdialog/editortooltipswidget.ui index 5f32703b..01ca00e3 100644 --- a/RedPandaIDE/settingsdialog/editortooltipswidget.ui +++ b/RedPandaIDE/settingsdialog/editortooltipswidget.ui @@ -61,6 +61,57 @@ + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Tool tips delay + + + + + + + ms + + + 5000 + + + 100 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + diff --git a/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts b/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts index 843c5e39..f7e9b704 100644 --- a/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts +++ b/RedPandaIDE/translations/RedPandaIDE_pt_BR.ts @@ -1687,6 +1687,14 @@ Show expression value tooltips when debugging Mostrar dicas com valor de expressão ao depurar + + Tool tips delay + + + + ms + ms + EnvironmentAppearenceWidget @@ -6531,6 +6539,10 @@ ASM files + + Lua files + + RegisterModel @@ -7472,6 +7484,53 @@ Valor + + XMakeCompiler + + Building xmake.lua file... + + + + - Filename: %1 + + + + Can't open '%1' for write! + Impossível abrir '%1' para gravar! + + + Compiling project changes... + Compilando alterações em projeto ... + + + - Project Filename: %1 + - Nome de arquivo de projeto: %1 + + + - Compiler Set Name: %1 + + + + Make program '%1' doesn't exists! + + + + Please check the "program" page of compiler settings. + + + + Processing makefile: + Processando makefile: + + + - makefile processer: %1 + - Processador do makefile: %1 + + + - Command: %1 %2 + - Comando: %1 %2 + + editorcustomctypekeywords diff --git a/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts b/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts index ef6833be..cdeae3a3 100644 --- a/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts +++ b/RedPandaIDE/translations/RedPandaIDE_zh_CN.ts @@ -1402,13 +1402,13 @@ Are you really want to continue? 失败 - - - - - - - + + + + + + + Error 错误 @@ -1418,7 +1418,7 @@ Are you really want to continue? - + Error Load File 载入文件错误 @@ -1447,44 +1447,44 @@ Are you really want to continue? 继续保存? - + Save As 另存为 - + File %1 already openned! 文件%1已经被打开! - + The text to be copied exceeds count limit! 要复制的内容超过了行数限制! - + The text to be copied exceeds character limit! 要复制的内容超过了字符数限制! - + The text to be cut exceeds count limit! 要剪切的内容超过了行数限制! - + The text to be cut exceeds character limit! 要剪切的内容超过了字符数限制! - + Print Document 打印文档 - - - + + + Ctrl+click for more info Ctrl+单击以获取更多信息 @@ -1493,27 +1493,27 @@ Are you really want to continue? 未找到符号'%1'! - + astyle not found 找不到astyle程序 - + Can't find astyle in "%1". 找不到astyle程序"%1". - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Readonly 只读 @@ -2333,6 +2333,16 @@ Are you really want to continue? Show expression value tooltips when debugging 调试时显示表达式的值 + + + Tool tips delay + 悬停提示延时 + + + + ms + 毫秒 + EnvironmentAppearenceWidget @@ -4170,18 +4180,18 @@ Are you really want to continue? MainWindow - + Red Panda C++ 小熊猫C++ - - - - - + + + + + Issues 编译器 @@ -4255,7 +4265,7 @@ Are you really want to continue? - + Debug Console 调试主控台 @@ -4331,7 +4341,7 @@ Are you really want to continue? 工具栏2 - + New 新建 @@ -4389,8 +4399,8 @@ Are you really want to continue? - - + + Compile 编译 @@ -4467,9 +4477,9 @@ Are you really want to continue? - - - + + + Copy 复制 @@ -4480,7 +4490,7 @@ Are you really want to continue? - + Paste 粘贴 @@ -4491,8 +4501,8 @@ Are you really want to continue? - - + + Select All 选择全部 @@ -4618,38 +4628,38 @@ Are you really want to continue? - - + + New Problem Set 新建试题集 - + Add Problem 添加试题 - + Remove Problem 删除试题 - - + + Save Problem Set 保存试题集 - - + + Load Problem Set 载入试题集 @@ -4697,7 +4707,7 @@ Are you really want to continue? - + Remove Problem Case Remove Problem Set 删除试题集 @@ -4705,21 +4715,21 @@ Are you really want to continue? - + Open Anwser Source File 打开答案源代码文件 - + Run All Cases Run Current Case 运行所有案例 - + Problem Cases Validation Options 测试案例验证选项 @@ -4779,15 +4789,15 @@ Are you really want to continue? - - + + Import FPS Problem Set 导入FPS试题集 - - + + Export FPS Problem Set 导出FPS试题集 @@ -5034,7 +5044,7 @@ Are you really want to continue? - + Clear all breakpoints 删除所有断点 @@ -5264,7 +5274,7 @@ Are you really want to continue? 保存为模板... - + New File 新建文件 @@ -5305,7 +5315,7 @@ Are you really want to continue? - + Rename Symbol 重命名符号 @@ -5326,13 +5336,13 @@ Are you really want to continue? - + Export As RTF 导出为RTF - + Export As HTML 导出为HTML @@ -5601,42 +5611,42 @@ Are you really want to continue? 运行参数... - + File Encoding 文件编码 - + Recent Files 文件历史 - - - - - - + + + + + + Debugging 正在调试 - - - - - - + + + + + + Running 正在运行 - - - - - - + + + + + + Compiling 正在编译 @@ -5650,17 +5660,17 @@ Are you really want to continue? 行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5 - + Read Only 只读 - + Insert 插入 - + Overwrite 覆写 @@ -5677,18 +5687,18 @@ Are you really want to continue? 确认 - - + + Source file is not compiled. 源文件尚未编译。 - + Compile now? 现在编译? - + Source file is more recent than executable. 源文件比可执行程序新。 @@ -5697,45 +5707,45 @@ Are you really want to continue? 重新编译? - - - - + + + + Wrong Compiler Settings 错误的编译器设置 - - - - + + + + Compiler is set not to generate executable. 编译器被设置为不生成可执行文件。 - - + + We need the executabe to run problem case. 我们需要可执行文件来运行试题案例。 - + No compiler set 无编译器设置 - + No compiler set is configured. 没有配置编译器设置。 - + Can't start debugging. 无法启动调试器 - - + + Enable debugging 启用调试参数 @@ -5752,44 +5762,44 @@ Are you really want to continue? 项目尚未构建。是否构建? - + Host applcation missing 宿主程序不存在 - + DLL project needs a host application to run. 动态链接库(DLL)需要一个宿主程序来运行。 - + But it's missing. 但它不存在。 - + Host application not exists 宿主程序不存在 - + Host application file '%1' doesn't exist. 宿主程序'%1'不存在。 - - + + Please correct this before start debugging 请在调试前改正设置。 - + Recompile? 重新编译? - - + + Save last open info error 保存上次打开信息失败 @@ -5798,60 +5808,60 @@ Are you really want to continue? 无法删除旧上次打开信息文件'%1' - + Can't save last open info file '%1' 无法保存上次打开信息文件'%1' - - + + Load last open info error 载入上次打开信息失败 - - + + Can't load last open info file '%1' 无法载入上次打开信息文件'%1' - + Open Source File 打开源代码文件 - - + + Batch Set Cases 批量设置案例 - + Show detail debug logs 显示详细调试器日志 - + Copy all 全部复制 - + Go to Line 跳转到行 - + Line - + Template Exists 模板已存在 - + Template %1 already exists. Do you want to overwrite? 模板%1已存在。是否覆盖? @@ -5859,25 +5869,25 @@ Are you really want to continue? - - - + + + Clear 清除 - + Export 导出 - + Insert Snippet 插入代码段 - - + + Problem Set %1 试题集%1 @@ -5906,56 +5916,56 @@ Are you really want to continue? 项目已经被修改过,是否需要重新构建? - + Auto Save Error 自动保存出错 - + Auto save "%1" to "%2" failed:%3 自动保存"%1"到"%2"失败:%3 - + Properties... 试题属性... - + Set Problem Set Name 设置试题集名称 - + Problem Set Name: 试题集名称: - + Remove 删除 - + Remove All Bookmarks 删除全部书签 - + Modify Description 修改描述 + + + + + Bookmark Description + 书签描述 + - Bookmark Description - 书签描述 - - - - - Description: 描述: @@ -5964,65 +5974,65 @@ Are you really want to continue? 在调试主控台中显示调试器输出 - + Remove this search 清除这次搜索 - + Clear all searches 删除所有搜索 - + Breakpoint condition... 断点条件... - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Remove All Breakpoints Remove all breakpoints 删除所有断点 - + Remove Breakpoint 删除当前断点 - + Rename File 重命名文件 - - + + Add Folder 添加文件夹 - - + + New folder 新文件夹 - + Folder name: 文件夹: - + Rename Folder 重命名 @@ -6031,167 +6041,167 @@ Are you really want to continue? 您没有使用DEBUG编译配置。 - - + + Do you want to set it now? 要现在去修改设置吗? - + Rename Problem Set 修改试题集名称 - + Can't open last open information file '%1' for write! 无法写入配置文件'%1'。 - + Rename Problem 修改试题名称 - + Line: %1 Col: %2 Lines: %3 行: %1 列: %2 总行数: %3 - + Goto Url 跳转到试题网址 - + Add Problem Case 添加试题案例 - + Run Current Case 运行当前案例 - + Remove Folder 删除文件夹 - + Switch to normal view 切换为普通视图 - + Switch to custom view 切换为自定义视图 - + Sort By Type 按类型排序 - + Sort alphabetically 按名称排序 - + Show inherited members 显示继承的成员 - + Goto declaration 跳转到声明处 - + Goto definition 跳转到定义处 - + In current file 仅当前文件 - + In current project 整个项目 - - + + New Folder 新建文件夹 - + Rename 重命名 - - - - + + + + Delete 删除 - + Open in Editor 在编辑器中打开 - + Open in External Program 使用外部程序打开 - + Open in Terminal 在终端中打开 - + Open in Windows Explorer 在Windows浏览器中打开 - + Character sets 字符集 - + Convert to %1 转换为%1编码 - + Newline 换行符 - + %1 files autosaved 已自动保存%1个文件 - + Set answer to... 设置答案源代码... - + select other file... 选择其他文件... - + Select Answer Source File 选择答案源代码文件 @@ -6200,17 +6210,17 @@ Are you really want to continue? 中止 - + FPS Problem Set Files (*.fps;*.xml) FPS试题集文件(*.fps;*.xml) - + FPS Problem Set Files (*.fps) FPS试题集文件(*.fps) - + Export Error 导出时出错 @@ -6220,7 +6230,7 @@ Are you really want to continue? C/C++源代码文件 (*.c *.cpp *.cc *.cxx) - + New Folder %1 新建文件夹%1 @@ -6233,70 +6243,70 @@ Are you really want to continue? 无标题%1 - + Do you really want to delete %1? 你真的要删除%1吗? - + Do you really want to delete %1 files? 你真的要删除%1个文件吗? - + Save project 保存项目 - + The project '%1' has modifications. 项目'%1'有改动。 - - + + Do you want to save it? 需要保存吗? - - + + File Changed 文件已发生变化 - - + + New Project File? 新建项目文件? - - + + Do you want to add the new file to the project? 您是否要将新建的文件加入项目? - - - - + + + + Save Error 保存失败 - + Change Project Compiler Set 改变项目编译器配置集 - + Change the project's compiler set will lose all custom compiler set options. 改变项目的编译器配置集会导致所有的自定义编译器选项被重置。 - - + + Do you really want to do that? 你真的想要那么做吗? @@ -6305,12 +6315,12 @@ Are you really want to continue? 批量设置案例 - + Choose input files 选择输入数据文件 - + Input data files (*.in) 输入数据文件 (*.in) @@ -6319,78 +6329,78 @@ Are you really want to continue? 无标题%1 - + Modify Watch 修改监视表达式 - + Watch Expression 监视表达式 - + Do you really want to clear all breakpoints in this file? 您真的要清除该文件的所有断点吗? - + New project 新建项目 - + Close %1 and start new project? 关闭'%1'以打开新项目? - + Folder not exist 文件夹不存在 - + Folder '%1' doesn't exist. Create it now? 文件夹'%1'不存在。是否创建? - + Can't create folder 无法创建文件夹 - + Failed to create folder '%1'. 创建文件夹'%1'失败。 - + Save new project as - + Folder %1 is not empty. 文件夹%1不是空的。 - + Do you really want to delete it? 你真的要删除它吗? - + Change working folder 改变工作文件夹 - + File '%1' is not in the current working folder. File '%1' is not in the current working folder 文件'%1'不在当前工作文件夹中。 - + Do you want to change working folder to '%1'? 是否将工作文件夹改设为'%1'? @@ -6399,28 +6409,28 @@ Are you really want to continue? 正在删除试题... - + Can't Commit 无法提交 - + Git needs user info to commit. Git需要用信息进行提交。 - + Choose Input Data File 选择输入数据文件 - - + + All files (*.*) 所有文件 (*.*) - + Choose Expected Output Data File Choose Expected Input Data File 选择期望输出文件 @@ -6432,59 +6442,59 @@ Are you really want to continue? - + Choose Working Folder 选择工作文件夹 - - + + Header Exists 头文件已存在 - - + + Header file "%1" already exists! 头文件"%1"已存在! - + Source Exists 源文件已存在! - + Source file "%1" already exists! 源文件"%1"已存在! - + Can't commit! 无法提交! - + The following files are in conflicting: 下列文件处于冲突状态,请解决后重新添加和提交: - + Commit Message 提交信息 - + Commit Message: 提交信息: - + Commit Failed 提交失败 - + Commit message shouldn't be empty! 提交信息不能为空! @@ -6493,22 +6503,22 @@ Are you really want to continue? 小熊猫Dev-C++项目文件 (*.dev) - + New project fail 新建项目失败 - + Can't assign project template 无法使用模板创建项目 - + Remove file 删除文件 - + Remove the file from disk? 同时从硬盘上删除文件? @@ -6517,257 +6527,257 @@ Are you really want to continue? 无标题 - + New Project File Name 新的项目文件名 - + File Name: 文件名: - + File Already Exists! 文件已存在! - + File '%1' already exists! 文件'%1'已经存在! - + Add to project 添加到项目 - - + + You are not using a Debug compiler setting. 您没有使用Debug编译器设置。 - + Please use a Debug compiler set, or enable the "generate debugging info (-g3)" and disable the "strip additional info (-s)" options in the compiler settings. 请在工具栏中选择Debug编译器配置集,或者在编译器配置集设置中启用“生成调试信息(-g3)”并禁用“剥除附加信息(-s)”选项。 - + Please choose a Debug compiler set in the toolbar, or enable the "generate debugging info (-g3)" and disable the "strip additional info (-s)" options in the compiler set settings's "settings" page. 请在工具栏中选择Debug编译器配置集,或者在“编译器配置集”设置的“编译/链接选项”页中<b>启用</b>“生成调试信息(-g3)”、<b>禁用</b>“剥除附件信息(-3)”。 - + C/C++ Source Files (*.c *.cpp *.cc *.cxx) C/C++源代码文件 (*.c *.cpp *.cc *.cxx) - + This operation will remove all cases for the current problem. 本操作会删除此试题的所有案例。 - + Failed to generate the executable. 未能生成可执行文件。 - + Please check detail info in "Tools Output" panel. 请查看“工具输出”面板中的详细信息。 - + Red Panda C++ project file (*.dev) 小熊猫C++项目文件(*.dev) - + Rename Error 重命名出错 - + Symbol '%1' is defined in system header. 符号'%1'在系统头文件中定义,无法修改。 - + New Name 新名称 - - - - + + + + Replace Error 替换出错 - + Can't open file '%1' for replace! 无法打开文件'%1'进行替换! - + Contents has changed since last search! 内容和上次查找时不一致。 - + Rich Text Format Files (*.rtf) RTF格式文件 (*.rtf) - + HTML Files (*.html) HTML文件 (*.html) - + The current problem set is not empty. 当前的试题集不是空的。 - + Problem %1 试题%1 - - + + Problem Set Files (*.pbs) 试题集文件 (*.pbs) - - + + Load Error 载入失败 - - + + Problem Case %1 试题案例%1 - - - - - - - - - - - - - + + + + + + + + + + + + + Error 错误 - + Recent Projects 项目历史 - + Load Theme Error 载入主题失败 - - + + Clear History 清除历史 - - + + Version Control 版本控制 - + File '%1' was changed. 磁盘文件'%1'已被修改。 - + Reload its content from disk? 是否重新读取它的内容? - + File '%1' was removed. 磁盘文件'%1'已被删除。 - + Keep it open? 是否保持它在小熊猫C++中打开的编辑窗口? - + Open 打开 - - + + Compile Failed 编译失败 - + Run Failed 运行失败 + + + + + + Confirm Convertion + 确认转换 + - Confirm Convertion - 确认转换 - - - - - - The editing file will be saved using %1 encoding. <br />This operation can't be reverted. <br />Are you sure to continue? 当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗? - + New Watch Expression 新监视表达式 - + Enter Watch Expression (it is recommended to use 'this->' for class members): 输入监视表达式 - + Parsing file %1 of %2: "%3" (%1/%2)正在解析文件"%3" - - + + Done parsing %1 files in %2 seconds 完成%1个文件的解析,用时%2秒 - + (%1 files per second) (每秒%1个文件) @@ -7170,105 +7180,105 @@ Are you really want to continue? 无法保存文件'%1'. - + Error Load File 载入文件错误 - - + + Error 错误 - + Can't create folder %1 无法创建文件夹%1 - + Warning 警告 - - + + Can't save file %1 无法保存文件%1 - + File Exists 文件已存在 - + File '%1' is already in the project 文件'%1'已在项目中 - + Project Updated 项目已升级 - + Your project was succesfully updated to a newer file format! 已成功将项目升级到新的格式 - + If something has gone wrong, we kept a backup-file: '%1'... 旧项目文件备份在'%1'。 - + Headers 头文件 - + Sources 源文件 - + Others 其他文件 - + Settings need update 设置需要更新 - + The compiler settings format of Red Panda C++ has changed. The compiler settings format of Dev-C++ has changed. 小熊猫C++的编译器设置格式已发生改变。 - + Please update your settings at Project >> Project Options >> Compiler and save your project. 请在项目 >> 项目属性 >> 编译器设置中修改您的设置并保存您的项目 - + Compiler not found 未找到编译器 - + The compiler set you have selected for this project, no longer exists. 您为该项目设置的编译器不存在。 - + It will be substituted by the global compiler set. 它将会被全局编译器设置代替。 - + Developed using the Red Panda C++ IDE Developed using the Red Panda Dev-C++ IDE 使用小熊猫C++编辑器开发 @@ -7770,32 +7780,32 @@ Are you really want to continue? ProjectModel - + File exists 文件已存在 - + File '%1' already exists. Delete it now? 文件'%1'已存在。是否删除? - + Remove failed 删除失败 - + Failed to remove file '%1' 无法删除文件'%1' - + Rename failed 改名失败 - + Failed to rename file '%1' to '%2' 无法将文件'%1'改名为'%2' @@ -8053,13 +8063,13 @@ Are you really want to continue? QObject - + Save 保存 - + Save changes to %1? 将修改保存到"%1"? @@ -8098,7 +8108,12 @@ Are you really want to continue? ASM文件 - + + Lua files + Lua文件 + + + Icon files 图标文件 @@ -8233,7 +8248,7 @@ Are you really want to continue? 生成调试信息(-g3) - + Would you like Red Panda C++ to search for compilers in PATH? 您同意小熊猫C++在PATH路径中寻找gcc编译器吗? @@ -8346,7 +8361,7 @@ Are you really want to continue? 只生成汇编代码(-S) - + Confirm 确认 @@ -8367,13 +8382,13 @@ Are you really want to continue? 如果仍然保留这些设置,可能会导致编译错误。<br /><br />请选择“是”,除非您清楚的知道选择“否”的后果, - - + + Compiler set not configuared. 未配置编译器设置。 - + Would you like Red Panda C++ to search for compilers in the following locations: <BR />'%1'<BR />'%2'? 您需要小熊猫C++在下列位置搜索编译器吗:<br />%1<br />%2 @@ -8424,22 +8439,22 @@ Are you really want to continue? 下标"%1"越界 - + bytes 字节 - + KB KB - + MB MB - + GB GB @@ -8753,7 +8768,7 @@ Are you really want to continue? - + Can't open file '%1' for write. 无法写入文件'%1'. @@ -9472,18 +9487,18 @@ Are you really want to continue? 性能 - - - + + + Compiler Set 编译器配置集 - - - + + + Compiler @@ -9495,7 +9510,7 @@ Are you really want to continue? 自动链接 - + @@ -9572,15 +9587,15 @@ Are you really want to continue? 杂项 - - + + Program Runner 程序运行 - + Problem Set 试题集 @@ -10129,6 +10144,64 @@ Are you really want to continue? + + XMakeCompiler + + + Building xmake.lua file... + 正在构建xmake.lua文件... + + + + - Filename: %1 + - 文件名: %1 + + + + Can't open '%1' for write! + 无法写入文件'%1'! + + + + Compiling project changes... + 正在编译项目修改... + + + + - Project Filename: %1 + - 项目文件名: %1 + + + + - Compiler Set Name: %1 + - 编译器配置: %1 + + + + Make program '%1' doesn't exists! + Make程序“%1”不存在! + + + + Please check the "program" page of compiler settings. + + + + + Processing makefile: + 正在处理makefile... + + + + - makefile processer: %1 + - makefile处理器: %1 + + + + - Command: %1 %2 + - 命令: %1 %2 + + editorcustomctypekeywords diff --git a/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts b/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts index 92396185..c967f56d 100644 --- a/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts +++ b/RedPandaIDE/translations/RedPandaIDE_zh_TW.ts @@ -1564,6 +1564,14 @@ Show expression value tooltips when debugging + + Tool tips delay + + + + ms + + EnvironmentAppearenceWidget @@ -6152,6 +6160,10 @@ ASM files + + Lua files + + RegisterModel @@ -6955,6 +6967,53 @@ + + XMakeCompiler + + Building xmake.lua file... + + + + - Filename: %1 + + + + Can't open '%1' for write! + + + + Compiling project changes... + + + + - Project Filename: %1 + + + + - Compiler Set Name: %1 + + + + Make program '%1' doesn't exists! + + + + Please check the "program" page of compiler settings. + + + + Processing makefile: + + + + - makefile processer: %1 + + + + - Command: %1 %2 + + + editorcustomctypekeywords