diff --git a/NEWS.md b/NEWS.md
index 7717c942..2cef7280 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -12,6 +12,7 @@ Red Panda C++ Version 0.14.3
- enhancement: git - add files
- enhancement: git - commit
- enhancement: git - restore
+ - enhancement: git - branch / switch
- fix: compiler set index not correctly saved, when remove compiler sets in options dialog
- enhancement: when create a repository in a project, auto add it's files to the repository
- enhancement: when add files to project, auto add it to git (if the project has a git repository)
diff --git a/RedPandaIDE/RedPandaIDE.pro b/RedPandaIDE/RedPandaIDE.pro
index 82b78de5..2fe16834 100644
--- a/RedPandaIDE/RedPandaIDE.pro
+++ b/RedPandaIDE/RedPandaIDE.pro
@@ -91,6 +91,7 @@ SOURCES += \
thememanager.cpp \
todoparser.cpp \
toolsmanager.cpp \
+ vcs/gitbranchdialog.cpp \
vcs/gitmanager.cpp \
vcs/gitrepository.cpp \
vcs/gitutils.cpp \
@@ -223,6 +224,7 @@ HEADERS += \
thememanager.h \
todoparser.h \
toolsmanager.h \
+ vcs/gitbranchdialog.h \
vcs/gitmanager.h \
vcs/gitrepository.h \
vcs/gitutils.h \
@@ -319,6 +321,7 @@ FORMS += \
settingsdialog/projectprecompilewidget.ui \
settingsdialog/toolsgeneralwidget.ui \
settingsdialog/toolsgitwidget.ui \
+ vcs/gitbranchdialog.ui \
widgets/aboutdialog.ui \
widgets/cpudialog.ui \
mainwindow.ui \
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index 62378be9..4d4d10b9 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -78,7 +78,7 @@ p, li { white-space: pre-wrap; }
<html><head/><body><p>Homepage: <a href="Homepage: https://sourceforge.net/projects/dev-cpp-2020/">https://sourceforge.net/projects/dev-cpp-2020/</a></p></body></html>
- <html><head/><body><p>官方网站: <a href="Homepage: https://sourceforge.net/projects/dev-cpp-2020/">https://sourceforge.net/projects/dev-cpp-2020/</a></p></body></html>
+ <html><head/><body><p>官方网站: <a href="Homepage: https://sourceforge.net/projects/dev-cpp-2020/">https://sourceforge.net/projects/dev-cpp-2020/</a></p></body></html>
<html><head/><body><p>Homepage: <a href="Homepage: https://sourceforge.net/projects/dev-cpp-2020/"><span style=" text-decoration: underline; color:#0000ff;">https://sourceforge.net/projects/dev-cpp-2020/</span></a></p></body></html>
@@ -3105,6 +3105,103 @@ Are you really want to continue?
启用保持多语句单行选项。
+
+ GitBranchDialog
+
+ Dialog
+ 对话框
+
+
+
+ Branch/Switch
+ 分支切换
+
+
+
+ Switch To
+ 切换到
+
+
+
+ Branch
+ 分支
+
+
+
+ Options
+ 选项
+
+
+
+ Overwrite working tree changed(force)
+ 强制覆盖工作树(working tree)变化(--force)
+
+
+
+ Track
+ 跟踪(Track)
+
+
+
+ Pass --track to git
+ 指定--track选项
+
+
+
+ Force Track
+ 强制跟踪
+
+
+
+ Pass --no-track to git
+ 指定--no-track选项
+
+
+
+ Force No Track
+ 强制不跟踪
+
+
+
+ Neither --track nor --no-track is passed to git
+ 不指定--track和--no-track选项
+
+
+
+ Not Specifiied
+ 不指定
+
+
+
+ Create New Branch
+ 创建新分支
+
+
+
+ Merge between original branch, working tree contents and the branch to switch to
+ 合并源分支、要切换的分支和当前工作树内容
+
+
+
+ Merge
+ 合并(--merge)
+
+
+
+ Force Creation (Reset branch if exists)
+ 强制创建,如果指定分支已存在则将其重置(Reset)(--force-creation)
+
+
+
+ Ok
+ 确定
+
+
+
+ Cancel
+ 取消
+
+
GitManager
@@ -3282,18 +3379,18 @@ Are you really want to continue?
MainWindow
-
+
Red Panda C++
小熊猫C++
-
-
-
-
-
-
+
+
+
+
+
+
Issues
编译器
@@ -3302,48 +3399,48 @@ Are you really want to continue?
编译日志
-
+
File
文件
-
+
Tools
工具
-
-
+
+
Run
运行
-
+
Edit
编辑
-
-
+
+
Project
项目
-
+
Watch
监视
-
+
Structure
结构
-
+
Files
文件
@@ -3352,85 +3449,85 @@ Are you really want to continue?
资源
-
-
-
-
-
+
+
+
+
+
Debug
调试
-
+
Evaluate:
求值
-
-
+
+
Debug Console
调试主控台
-
+
Call Stack
调用栈
-
+
Breakpoints
断点
-
+
Locals
局部变量
-
-
-
+
+
+
Search
查找
-
+
History:
历史:
-
+
Search Again
重新查找
-
+
Replace with:
替换为:
-
+
Replace
替换
-
+
Close
关闭
-
+
Execute
运行
-
-
+
+
Code
代码
-
+
Window
窗口
@@ -3443,280 +3540,280 @@ Are you really want to continue?
工具栏2
-
+
New
新建
-
+
Ctrl+N
Ctrl+N
-
+
Open...
打开...
-
+
Ctrl+O
Ctrl+O
-
+
Save
保存
-
+
Ctrl+S
Ctrl+S
-
+
Save As...
另存为...
-
+
Save As
另存为
-
+
Save All
全部保存
-
+
Ctrl+Shift+S
Ctrl+Shift+S
-
+
Options
选项
-
-
-
-
-
+
+
+
+
+
Compile
编译
-
-
+
+
Tools Output
工具输出
-
+
Tool Panels
工具面板
-
+
Git
Git
-
+
F9
F9
-
+
F10
F10
-
+
Undo
恢复
-
+
Ctrl+Z
Ctrl+Z
-
+
Redo
重做
-
+
Ctrl+Y
Ctrl+Y
-
+
Cut
剪切
-
+
Ctrl+X
Ctrl+X
-
-
-
-
+
+
+
+
Copy
复制
-
+
Ctrl+C
Ctrl+C
-
-
+
+
Paste
粘贴
-
+
Ctrl+V
Ctrl+V
-
-
-
+
+
+
Select All
选择全部
-
+
Ctrl+A
Ctrl+A
-
+
Indent
缩进
-
+
UnIndent
取消缩进
-
+
Toggle Comment
切换注释
-
+
Ctrl+/
Ctrl+/
-
+
Collapse All
全部收起
-
+
Uncollapse All
全部展开
-
+
Encode in ANSI
使用ANSI编码
-
+
Encode in UTF-8
使用UTF-8编码
-
+
Auto Detect
自动检测
-
+
Convert to ANSI
转换为ANSI编码
-
+
Convert to UTF-8
转换为UTF-8编码
-
-
+
+
Compile & Run
编译运行
-
+
F11
F11
-
-
+
+
Rebuild All
全部重编译
-
+
F12
F12
-
+
Stop Execution
停止执行
-
+
F6
F6
-
+
F5
F5
-
+
Step Over
单步跳过
-
+
F7
F7
-
+
Step Into
单步进入
-
-
+
+
Problem Set
试题集
-
+
New Problem Set
新建试题集
@@ -3735,116 +3832,116 @@ Are you really want to continue?
-
+
Save Problem Set
保存试题集
-
+
Load Problem Set
载入试题集
-
+
Memory
内存
-
+
Address Expression:
Address:
地址表达式:
-
+
Cancel
取消
-
-
+
+
TODO
TODO
-
-
+
+
Bookmark
书签
-
-
-
-
+
+
+
+
Problem
试题
-
-
+
+
Add Probem Case
添加试题案例
-
-
+
+
Remove Problem Case
Remove Problem Set
删除试题集
-
-
+
+
Open Anwser Source File
打开答案源代码文件
-
-
+
+
Run All Cases
Run Current Case
运行所有案例
-
+
Problem Cases Validation Options
测试案例验证选项
-
+
%v/%m
%v/%m
-
+
Output
输出
-
+
Input
输入
-
+
Expected
期望输出
-
+
Help
帮助
-
+
Refactor
重构
-
+
View
视图
@@ -3853,477 +3950,482 @@ Are you really want to continue?
工具窗口
-
+
Main
主工具栏
-
+
Compiler Set
编译器配置集
-
-
+
+
New Source File
新建源代码文件
-
+
Tab
Tab
-
+
Shift+Tab
Shift+Tab
-
+
F8
F8
-
+
Step Out
单步跳出
-
+
Ctrl+F8
Ctrl+F8
-
+
Run To Cursor
执行到光标处
-
+
Ctrl+F5
Ctrl+F5
-
+
Continue
继续执行
-
+
F4
F4
-
+
Add Watch...
添加监视
-
+
View CPU Window...
打开CPU信息窗口...
-
+
Exit
退出
-
+
Find...
查找...
-
+
Ctrl+F
Ctrl+F
-
+
Find in Files...
在文件中查找...
-
+
Ctrl+Shift+F
Ctrl+Shift+F
-
+
Replace...
替换
-
+
Ctrl+R
Ctrl+R
-
+
Find Next
查找下一个
-
+
F3
F3
-
+
Find Previous
查找前一个
-
+
Shift+F3
Shift+F3
-
+
Remove Watch
删除监视值
-
+
Remove All Watches
Remove All
删除全部监视值
-
+
Modify Watch...
修改监视值
-
+
Reformat Code
对代码重新排版
-
+
Ctrl+Shift+A
Ctrl+Shift+A
-
+
Go back
前一次编辑位置
-
+
Ctrl+Alt+Left
Ctrl+Alt+Left
-
+
Forward
后一次编辑位置
-
+
Ctrl+Alt+Right
Ctrl+Alt+Right
-
+
Ctrl+W
Ctrl+W
-
+
Close All
全部关闭
-
+
Ctrl+Shift+W
Ctrl+Shift+W
-
+
Maximize Editor
最大化编辑器
-
+
Ctrl+F11
Ctrl+F11
-
+
Next
下一窗口
-
+
Ctrl+Tab
Ctrl+Tab
-
+
Previous
前一窗口
-
+
Ctrl+Shift+Tab
Ctrl+Shift+Tab
-
+
Toggle breakpoint
切换断点
-
+
Ctrl+F4
Ctrl+F4
-
-
+
+
Clear all breakpoints
删除所有断点
-
+
Breakpoint property...
设置断点条件...
-
+
Goto Declaration
跳转到声明处
-
+
Goto Definition
跳转到定义处
-
+
Find references
查找符号的引用
-
+
Open containing folder
打开所在的文件夹
-
+
Ctrl+B
Ctrl+B
-
+
Open a terminal here
打开命令行窗口
-
+
File Properties...
文件属性...
-
+
Close Project
关闭项目
-
+
Project options
项目属性
-
+
New Project...
新建项目...
-
+
New File
新建项目文件
-
+
Add to project...
添加到项目...
-
+
Remove from project
从项目删除
-
+
View Makefile
查看Makefile
-
+
Clean
清理构建文件
-
+
Open Folder in Explorer
在浏览器中打开
-
+
Open In Terminal
在终端中打开
-
+
About
关于
-
-
+
+
Rename Symbol
重命名符号
-
+
Shift+F6
Shift+F6
-
+
Print...
打印...
-
+
Ctrl+P
Ctrl+P
-
-
+
+
Export As RTF
导出为RTF
-
-
+
+
Export As HTML
导出为HTML
-
+
Move To Other View
移动到其他视图
-
+
Ctrl+M
Ctrl+M
-
-
+
+
C++ Reference
C++参考手册
-
+
C Reference
C参考手册
-
+
Show Tool Panels
显示全部工具面板
-
+
Create Git Repository
Create Repository
创建Git仓库
-
+
Commit
提交(Commit)
-
+
Revert
撤销(Revert)
-
+
Reset
回滚(Reset)
-
+
Add Files
添加文件
-
+
Restore
还原(Restore)
-
+
Website
官方网站
+
+
+ Branch/Switch
+ 分支切换
+
Tool Window Bars
工具窗口栏
-
+
Status Bar
状态栏
-
+
Ctrl+Backspace
Ctrl+Backspace
-
+
Interrupt
中断
-
-
+
+
Delete To Word Begin
删除到单词开头
-
+
Ctrl+Shift+B
Ctrl+Shift+B
-
+
Delete to Word End
删除到单词结尾
-
+
Ctrl+Shift+E
Ctrl+Shift+E
-
+
New Class...
Add Class...
新建类...
-
-
+
+
New Header...
New Header
新建头文件...
@@ -4333,47 +4435,47 @@ Are you really want to continue?
插入行
-
+
Delete Line
删除当前行
-
+
Ctrl+D
Ctrl+D
-
+
Duplicate Line
复制当前行
-
+
Ctrl+E
Ctrl+E
-
+
Delete Word
删除当前单词
-
+
Ctrl+Shift+D
Ctrl+Shift+D
-
+
Delete to EOL
删除到行尾
-
+
Ctrl+Del
Ctrl+Del
-
+
Delete to BOL
删除到行首
@@ -4382,78 +4484,78 @@ Are you really want to continue?
C/C++参考
-
+
EGE Manual
EGE图形库手册
-
+
Add Bookmark
添加书签
-
+
Remove Bookmark
删除书签
-
+
Modify Bookmark Description
修改书签说明
-
+
Locate in Files View
在文件视图中定位
-
-
+
+
Open Folder
打开文件夹
-
+
Running Parameters...
运行参数...
-
+
File Encoding
文件编码
-
+
Recent Files
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
Debugging
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
Running
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
Compiling
正在编译
@@ -4462,194 +4564,194 @@ Are you really want to continue?
行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5
-
+
Line:%1 Col:%2 Selected:%3 Lines:%4 Length:%5
Line: %1 Col: %2 Selected: %3 Lines: %4 Length: %5
行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5
-
+
Read Only
只读
-
+
Insert
插入
-
+
Overwrite
覆写
-
+
Close project
关闭项目
-
+
Are you sure you want to close %1?
你确定要关闭'%1'吗?
-
-
+
+
Confirm
确认
-
-
-
+
+
+
Source file is not compiled.
源文件尚未编译。
-
-
+
+
Compile now?
现在编译?
-
-
+
+
Source file is more recent than executable.
源文件比可执行程序新。
-
+
Recompile now?
重新编译?
-
+
No compiler set
无编译器设置
-
+
No compiler set is configured.
没有配置编译器设置。
-
+
Can't start debugging.
无法启动调试器
-
-
+
+
Enable debugging
启用调试参数
-
-
+
+
You have not enabled debugging info (-g3) and/or stripped it from the executable (-s) in Compiler Options.<BR /><BR />Do you want to correct this now?
当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题?
-
+
Project not built
项目尚未构建
-
+
Project hasn't been built. Build it now?
项目尚未构建。是否构建?
-
+
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'不存在。
-
+
Recompile?
重新编译?
-
-
+
+
Save last open info error
保存上次打开信息失败
-
+
Can't remove old last open information file '%1'
无法删除旧上次打开信息文件'%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
打开源代码文件
-
+
Show detail debug logs
显示详细调试器日志
-
+
Copy all
全部复制
-
-
-
+
+
+
Clear
清除
-
+
Export
导出
-
+
Insert Snippet
插入代码段
-
-
+
+
Problem Set %1
试题集%1
@@ -4670,68 +4772,68 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
-
+
+
Rebuild Project
重新构建项目
-
-
+
+
Project has been modified, do you want to rebuild it?
项目已经被修改过,是否需要重新构建?
-
+
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
书签描述
-
-
-
+
+
+
Description:
描述:
@@ -4740,322 +4842,322 @@ 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
重命名
-
+
Remove Folder
删除文件夹
-
+
Switch to normal view
切换为普通视图
-
+
Switch to custom view
切换为自定义视图
-
+
Sort By Type
按类型排序
-
+
Sort alphabetically
按名称排序
-
+
Show inherited members
显示继承的成员
-
+
Goto declaration
跳转到声明处
-
+
Goto definition
跳转到定义处
-
-
-
+
+
+
New Folder
新建文件夹
-
-
-
-
+
+
+
+
Delete
删除
-
+
Open in Editor
在编辑器中打开
-
+
Open in External Program
使用外部程序打开
-
+
Open in Terminal
在终端中打开
-
+
Open in Windows Explorer
在Windows浏览器中打开
-
+
Character sets
字符集
-
+
%1 files autosaved
已自动保存%1个文件
-
+
Set answer to...
设置答案源代码...
-
+
select other file...
选择其他文件...
-
+
Select Answer Source File
选择答案源代码文件
-
+
C/C++Source Files (*.c *.cpp *.cc *.cxx)
C/C++Source Files (*.c *.cpp *.cc *.cxx
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
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?
你真的想要做那些吗?
-
+
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?
你真的要删除它吗?
-
-
+
+
Header Exists
头文件已存在
-
-
+
+
Header file "%1" already exists!
头文件"%1"已存在!
-
+
Source Exists
源文件已存在!
-
+
Source file "%1" already exists!
源文件"%1"已存在!
-
+
Commit Message
提交信息
-
+
Commit Failed
提交失败
-
+
Commit message shouldn't be empty!
提交信息不能为空!
@@ -5064,233 +5166,233 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
New project fail
新建项目失败
-
+
Can't assign project template
无法使用模板创建项目
-
+
Remove file
删除文件
-
+
Remove the file from disk?
同时从硬盘上删除文件?
-
+
untitled
无标题
-
+
New Project File Name
新的项目文件名
-
+
File Name:
文件名:
-
+
File Already Exists!
文件已存在!
-
+
File '%1' already exists!
文件'%1'已经存在!
-
+
Add to project
添加到项目
-
+
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
载入主题失败
-
-
+
+
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
确认转换
-
-
+
+
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个文件)
@@ -7419,7 +7521,7 @@ Are you really want to continue?
自动链接
-
+
@@ -7495,15 +7597,15 @@ Are you really want to continue?
杂项
-
-
+
+
Program Runner
程序运行
-
+
Problem Set
试题集
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index 93942c2b..5e2d8193 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -41,6 +41,7 @@
#include "widgets/newheaderdialog.h"
#include "vcs/gitmanager.h"
#include "vcs/gitrepository.h"
+#include "vcs/gitbranchdialog.h"
#include
#include
@@ -3075,10 +3076,12 @@ void MainWindow::onProjectViewContextMenu(const QPoint &pos)
if (shouldAdd)
vcsMenu.addAction(ui->actionGit_Add_Files);
}
+ vcsMenu.addAction(ui->actionGit_Branch);
vcsMenu.addAction(ui->actionGit_Commit);
vcsMenu.addAction(ui->actionGit_Restore);
ui->actionGit_Commit->setEnabled(true);
+ ui->actionGit_Branch->setEnabled(true);
ui->actionGit_Restore->setEnabled(true);
// vcsMenu.addAction(ui->actionGit_Reset);
@@ -3184,10 +3187,12 @@ void MainWindow::onFilesViewContextMenu(const QPoint &pos)
if (shouldAdd)
vcsMenu.addAction(ui->actionGit_Add_Files);
}
+ vcsMenu.addAction(ui->actionGit_Branch);
vcsMenu.addAction(ui->actionGit_Commit);
vcsMenu.addAction(ui->actionGit_Restore);
ui->actionGit_Commit->setEnabled(true);
+ ui->actionGit_Branch->setEnabled(true);
ui->actionGit_Restore->setEnabled(true);
// vcsMenu.addAction(ui->actionGit_Reset);
@@ -5683,7 +5688,9 @@ void MainWindow::updateVCSActions()
}
ui->actionGit_Create_Repository->setEnabled(!hasRepository && shouldEnable);
ui->actionGit_Commit->setEnabled(hasRepository && shouldEnable);
+ ui->actionGit_Branch->setEnabled(hasRepository && shouldEnable);
ui->actionGit_Reset->setEnabled(hasRepository && shouldEnable);
+ ui->actionGit_Restore->setEnabled(hasRepository && shouldEnable);
ui->actionGit_Revert->setEnabled(hasRepository && shouldEnable);
}
@@ -6763,3 +6770,26 @@ void MainWindow::on_actionWebsite_triggered()
}
}
+
+void MainWindow::on_actionGit_Branch_triggered()
+{
+ QString folder;
+ if (ui->treeFiles->isVisible()) {
+ folder = pSettings->environment().currentFolder();
+ } else if (ui->projectView->isVisible() && mProject) {
+ folder = mProject->folder();
+ }
+ if (folder.isEmpty())
+ return;
+ GitBranchDialog dialog(folder);
+ if (dialog.exec()==QDialog::Accepted) {
+ //update project view
+ if (mProject) {
+ mProject->model()->beginUpdate();
+ mProject->model()->endUpdate();
+ }
+ //update files view
+ setFilesViewRoot(pSettings->environment().currentFolder());
+ }
+}
+
diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h
index d114c32e..d7ef7c01 100644
--- a/RedPandaIDE/mainwindow.h
+++ b/RedPandaIDE/mainwindow.h
@@ -588,6 +588,8 @@ private slots:
void on_actionWebsite_triggered();
+ void on_actionGit_Branch_triggered();
+
private:
Ui::MainWindow *ui;
EditorList *mEditorList;
diff --git a/RedPandaIDE/mainwindow.ui b/RedPandaIDE/mainwindow.ui
index 7cd73802..24a54103 100644
--- a/RedPandaIDE/mainwindow.ui
+++ b/RedPandaIDE/mainwindow.ui
@@ -542,7 +542,7 @@
QTabWidget::South
- 1
+ 2
@@ -576,6 +576,7 @@
+ 50
false
@@ -1421,7 +1422,7 @@
0
0
1114
- 25
+ 26
@@ -2788,6 +2790,11 @@
Website
+
+
+ Branch/Switch
+
+
diff --git a/RedPandaIDE/vcs/gitbranchdialog.cpp b/RedPandaIDE/vcs/gitbranchdialog.cpp
new file mode 100644
index 00000000..16c5f7c5
--- /dev/null
+++ b/RedPandaIDE/vcs/gitbranchdialog.cpp
@@ -0,0 +1,83 @@
+#include "gitbranchdialog.h"
+#include "ui_gitbranchdialog.h"
+#include "gitmanager.h"
+
+GitBranchDialog::GitBranchDialog(const QString& folder, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::GitBranchDialog),
+ mFolder(folder)
+{
+ ui->setupUi(this);
+ mManager = new GitManager();
+ int current=-1;
+ QStringList branches =mManager->listBranches(mFolder,current);
+ ui->lstBranches->addItems(branches);
+ ui->lstBranches->setCurrentIndex(current);
+ ui->rbBranch->setChecked(true);
+ ui->rbNonSpecifyTrack->setChecked(true);
+ ui->txtNewBranch->setEnabled(false);
+ if (branches.isEmpty()) {
+ QString currentBranch;
+ if (mManager->hasRepository(mFolder,currentBranch)) {
+ ui->lstBranches->addItem(currentBranch);
+ ui->btnOk->setEnabled(false);
+ }
+ ui->grpOptions->setEnabled(false);
+ }
+}
+
+GitBranchDialog::~GitBranchDialog()
+{
+ delete mManager;
+ delete ui;
+}
+
+void GitBranchDialog::on_btnCancel_clicked()
+{
+ reject();
+}
+
+
+void GitBranchDialog::on_btnOk_clicked()
+{
+ QString branch = ui->lstBranches->currentText();
+ QString text;
+ if (ui->chkCreate->isChecked())
+ text = ui->txtNewBranch->text();
+ else
+ text = ui->lstBranches->currentText();
+ bool result = false;
+ if (!text.isEmpty()) {
+ result = mManager->switchToBranch(
+ mFolder,
+ ui->txtNewBranch->text(),
+ ui->chkCreate->isChecked(),
+ ui->chkForce->isChecked(),
+ ui->chkMerge->isChecked(),
+ ui->rbForceTrack->isChecked(),
+ ui->rbForceNoTrack->isChecked(),
+ ui->chkForceCreation->isChecked());
+ }
+ if (result)
+ accept();
+ else
+ reject();
+}
+
+
+void GitBranchDialog::on_lstBranches_currentIndexChanged(int /*index*/)
+{
+ ui->txtNewBranch->setText("branch_"+ui->lstBranches->currentText());
+}
+
+
+void GitBranchDialog::on_chkCreate_stateChanged(int /*arg1*/)
+{
+ ui->txtNewBranch->setEnabled(ui->chkCreate->isChecked());
+}
+
+void GitBranchDialog::closeEvent(QCloseEvent */* event */)
+{
+ reject();
+}
+
diff --git a/RedPandaIDE/vcs/gitbranchdialog.h b/RedPandaIDE/vcs/gitbranchdialog.h
new file mode 100644
index 00000000..a73ab3de
--- /dev/null
+++ b/RedPandaIDE/vcs/gitbranchdialog.h
@@ -0,0 +1,38 @@
+#ifndef GITBRANCHDIALOG_H
+#define GITBRANCHDIALOG_H
+
+#include
+
+namespace Ui {
+class GitBranchDialog;
+}
+
+class GitManager;
+class GitBranchDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit GitBranchDialog(const QString& folder, QWidget *parent = nullptr);
+ ~GitBranchDialog();
+
+private slots:
+ void on_btnCancel_clicked();
+
+ void on_btnOk_clicked();
+
+ void on_lstBranches_currentIndexChanged(int index);
+
+ void on_chkCreate_stateChanged(int arg1);
+
+private:
+ Ui::GitBranchDialog *ui;
+ GitManager *mManager;
+ QString mFolder;
+
+ // QWidget interface
+protected:
+ void closeEvent(QCloseEvent *event) override;
+};
+
+#endif // GITBRANCHDIALOG_H
diff --git a/RedPandaIDE/vcs/gitbranchdialog.ui b/RedPandaIDE/vcs/gitbranchdialog.ui
new file mode 100644
index 00000000..f21fe7ba
--- /dev/null
+++ b/RedPandaIDE/vcs/gitbranchdialog.ui
@@ -0,0 +1,178 @@
+
+
+ GitBranchDialog
+
+
+
+ 0
+ 0
+ 705
+ 506
+
+
+
+ Branch/Switch
+
+
+ -
+
+
+ Switch To
+
+
+
-
+
+
+ Branch
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+ -
+
+
+ Options
+
+
+
-
+
+
+ Overwrite working tree changed(force)
+
+
+
+ -
+
+
+ Track
+
+
+
-
+
+
+ Pass --track to git
+
+
+ Force Track
+
+
+
+ -
+
+
+ Pass --no-track to git
+
+
+ Force No Track
+
+
+
+ -
+
+
+ Neither --track nor --no-track is passed to git
+
+
+ Not Specifiied
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ Create New Branch
+
+
+
+ -
+
+
+ Merge between original branch, working tree contents and the branch to switch to
+
+
+ Merge
+
+
+
+ -
+
+
+
+
+
+ Force Creation (Reset branch if exists)
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Ok
+
+
+
+ -
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RedPandaIDE/vcs/gitmanager.cpp b/RedPandaIDE/vcs/gitmanager.cpp
index 42c9af19..14a62e9e 100644
--- a/RedPandaIDE/vcs/gitmanager.cpp
+++ b/RedPandaIDE/vcs/gitmanager.cpp
@@ -150,6 +150,47 @@ QStringList GitManager::listChangedFiles(const QString &folder)
return textToLines(runGit(folder,args));
}
+QStringList GitManager::listBranches(const QString &folder, int ¤t)
+{
+ QStringList args;
+ args.append("branch");
+ args.append("-a");
+ args.append("-l");
+ QStringList temp = textToLines(runGit(folder,args));
+ current = -1;
+ for (int i=0;i