- enhancement: View menu

- enhancement: hide/show statusbar
 - enhancement: hide/show left/bottom tool window bars
 - enhancement: hide/show individual left/bottom tool window
This commit is contained in:
royqh1979 2021-11-09 21:22:50 +08:00
parent 64e4ec3176
commit 5878f59958
6 changed files with 314 additions and 32 deletions

View File

@ -1,3 +1,9 @@
Version 0.8.3 For Dev-C++ 7 Beta
- enhancement: View menu
- enhancement: hide/show statusbar
- enhancement: hide/show left/bottom tool window bars
- enhancement: hide/show individual left/bottom tool window
Version 0.8.2 For Dev-C++ 7 Beta
- fix: highlighter can't correctly find the end of ANSI C-style Comments
- enhancement: add default color scheme to themes. Change theme option will change color scheme too.

View File

@ -71,6 +71,8 @@ MainWindow::MainWindow(QWidget *parent)
mFileInfoStatus->setStyleSheet("margin-left:10px; margin-right:10px");
mFileEncodingStatus->setStyleSheet("margin-left:10px; margin-right:10px");
mFileModeStatus->setStyleSheet("margin-left:10px; margin-right:10px");
prepareTabInfosData();
prepareTabMessagesData();
ui->statusbar->insertPermanentWidget(0,mFileModeStatus);
ui->statusbar->insertPermanentWidget(0,mFileEncodingStatus);
ui->statusbar->insertPermanentWidget(0,mFileInfoStatus);
@ -151,11 +153,11 @@ MainWindow::MainWindow(QWidget *parent)
mCPUDialog = nullptr;
applySettings();
applyUISettings();
updateProjectView();
updateEditorActions();
updateCaretActions();
applySettings();
applyUISettings();
connect(ui->debugConsole,&QConsole::commandInput,this,&MainWindow::onDebugCommandInput);
@ -252,7 +254,6 @@ MainWindow::MainWindow(QWidget *parent)
mFunctionTip = std::make_shared<FunctionTooltipWidget>();
mClassBrowserModel.setColors(mStatementColors);
updateAppTitle();
connect(&mAutoSaveTimer, &QTimer::timeout,
this, &MainWindow::onAutoSaveTimeout);
@ -266,6 +267,7 @@ MainWindow::MainWindow(QWidget *parent)
ui->actionEGE_Manual->setVisible(pSettings->environment().language()=="zh_CN");
updateAppTitle();
buildContextMenus();
updateEditorColorSchemes();
@ -552,23 +554,38 @@ void MainWindow::applyUISettings()
const Settings::UI& settings = pSettings->ui();
restoreGeometry(settings.mainWindowGeometry());
restoreState(settings.mainWindowState());
//we can show/hide left/bottom panels here, cause mainwindow layout is not calculated
// ui->tabMessages->setCurrentIndex(settings.bottomPanelIndex());
// if (settings.bottomPanelOpenned()) {
// mBottomPanelHeight = settings.bottomPanelHeight();
// openCloseBottomPanel(true);
// } else {
// openCloseBottomPanel(false);
// mBottomPanelHeight = settings.bottomPanelHeight();
// }
// ui->tabInfos->setCurrentIndex(settings.leftPanelIndex());
// if (settings.leftPanelOpenned()) {
// mLeftPanelWidth = settings.leftPanelWidth();
// openCloseLeftPanel(true);
// } else {
// openCloseLeftPanel(false);
// mLeftPanelWidth = settings.leftPanelWidth();
// }
ui->actionTool_Window_Bars->setChecked(settings.showToolWindowBars());
ui->tabInfos->setVisible(settings.showToolWindowBars());
ui->tabMessages->setVisible(settings.showToolWindowBars());
ui->actionStatus_Bar->setChecked(settings.showStatusBar());
ui->statusbar->setVisible(settings.showStatusBar());
ui->actionProject->setChecked(settings.showProject());
showHideInfosTab(ui->tabProject,settings.showProject());
ui->actionWatch->setChecked(settings.showWatch());
showHideInfosTab(ui->tabWatch,settings.showWatch());
ui->actionStructure->setChecked(settings.showStructure());
showHideInfosTab(ui->tabStructure,settings.showStructure());
ui->actionFiles->setChecked(settings.showFiles());
showHideInfosTab(ui->tabFiles,settings.showFiles());
ui->actionProblem_Set->setChecked(settings.showProblemSet());
showHideInfosTab(ui->tabProblem,settings.showProblem());
ui->actionIssues->setChecked(settings.showIssues());
showHideMessagesTab(ui->tabIssues,settings.showIssues());
ui->actionCompile_Log->setChecked(settings.showCompileLog());
showHideMessagesTab(ui->tabCompilerOutput,settings.showCompileLog());
ui->actionDebug_Window->setChecked(settings.showDebug());
showHideMessagesTab(ui->tabDebug,settings.showDebug());
ui->actionSearch->setChecked(settings.showSearch());
showHideMessagesTab(ui->tabSearch,settings.showSearch());
ui->actionTODO->setChecked(settings.showTODO());
showHideMessagesTab(ui->tabTODO,settings.showTODO());
ui->actionBookmark->setChecked(settings.showBookmark());
showHideMessagesTab(ui->tabBookmark,settings.showBookmark());
ui->actionProblem->setChecked(settings.showProblem());
showHideMessagesTab(ui->tabProblem,settings.showProblem());
//we can't show/hide left/bottom panels here, cause mainwindow layout is not calculated
}
QFileSystemWatcher *MainWindow::fileSystemWatcher()
@ -3218,6 +3235,22 @@ void MainWindow::closeEvent(QCloseEvent *event) {
settings.setLeftPanelWidth(mLeftPanelWidth);
settings.setLeftPanelIndex(ui->tabInfos->currentIndex());
settings.setLeftPanelOpenned(mLeftPanelOpenned);
settings.setShowStatusBar(ui->actionStatus_Bar->isChecked());
settings.setShowToolWindowBars(ui->actionTool_Window_Bars->isChecked());
settings.setShowProject(ui->actionProject->isChecked());
settings.setShowWatch(ui->actionWatch->isChecked());
settings.setShowStructure(ui->actionStructure->isChecked());
settings.setShowFiles(ui->actionFiles->isChecked());
settings.setShowProblemSet(ui->actionProblem_Set->isChecked());
settings.setShowIssues(ui->actionIssues->isChecked());
settings.setShowDebug(ui->actionDebug_Window->isChecked());
settings.setShowSearch(ui->actionSearch->isChecked());
settings.setShowTODO(ui->actionTODO->isChecked());
settings.setShowBookmark(ui->actionBookmark->isChecked());
settings.setShowProblem(ui->actionProblem->isChecked());
settings.save();
//save current folder ( for files view )
@ -4810,6 +4843,95 @@ void MainWindow::updateEditorHideTime(QTabWidget* tabWidget) {
}
}
}
static int findTabIndex(QTabWidget* tabWidget , QWidget* w) {
for (int i=0;i<tabWidget->count();i++) {
if (w==tabWidget->widget(i))
return i;
}
return -1;
}
void MainWindow::showHideInfosTab(QWidget *widget, bool show)
{
int idx = findTabIndex(ui->tabInfos,widget);
if (idx>=0) {
if (!show) {
ui->tabInfos->removeTab(idx);
}
} else {
if (show && mTabInfosData.contains(widget)) {
PTabWidgetInfo info = mTabInfosData[widget];
int insert = -1;
for (int i=0;i<ui->tabInfos->count();i++) {
QWidget * w=ui->tabInfos->widget(i);
PTabWidgetInfo infoW = mTabInfosData[w];
if (infoW->order>info->order) {
insert = i;
break;
}
}
if (insert>=0) {
ui->tabInfos->insertTab(insert, widget, info->icon, info->text);
} else {
ui->tabInfos->addTab(widget, info->icon, info->text);
}
}
}
}
void MainWindow::showHideMessagesTab(QWidget *widget, bool show)
{
int idx = findTabIndex(ui->tabMessages,widget);
if (idx>=0) {
if (!show) {
ui->tabMessages->removeTab(idx);
}
} else {
if (show && mTabMessagesData.contains(widget)) {
PTabWidgetInfo info = mTabMessagesData[widget];
int insert = -1;
for (int i=0;i<ui->tabMessages->count();i++) {
QWidget * w=ui->tabMessages->widget(i);
PTabWidgetInfo infoW = mTabMessagesData[w];
if (infoW->order>info->order) {
insert = i;
break;
}
}
if (insert>=0) {
ui->tabMessages->insertTab(insert, widget, info->icon, info->text);
} else {
ui->tabMessages->addTab(widget, info->icon, info->text);
}
}
}
}
void MainWindow::prepareTabInfosData()
{
for (int i=0;i<ui->tabInfos->count();i++) {
QWidget* widget = ui->tabInfos->widget(i);
PTabWidgetInfo info = std::make_shared<TabWidgetInfo>();
info->order =i;
info->text = ui->tabInfos->tabText(i);
info->icon = ui->tabInfos->tabIcon(i);
mTabInfosData[widget]=info;
}
}
void MainWindow::prepareTabMessagesData()
{
for (int i=0;i<ui->tabMessages->count();i++) {
QWidget* widget = ui->tabMessages->widget(i);
PTabWidgetInfo info = std::make_shared<TabWidgetInfo>();
info->order =i;
info->text = ui->tabMessages->tabText(i);
info->icon = ui->tabMessages->tabIcon(i);
mTabMessagesData[widget]=info;
}
}
void MainWindow::on_EditorTabsLeft_currentChanged(int)
{
Editor * editor = mEditorList->getEditor(-1,ui->EditorTabsLeft);
@ -5410,3 +5532,119 @@ bool MainWindow::openningFiles() const
return mOpenningFiles;
}
void MainWindow::on_actionTool_Window_Bars_triggered()
{
bool state = ui->tabInfos->isVisible();
state = !state;
ui->tabInfos->setVisible(state);
ui->tabMessages->setVisible(state);
ui->actionTool_Window_Bars->setChecked(state);
}
void MainWindow::on_actionStatus_Bar_triggered()
{
bool state = ui->statusbar->isVisible();
state = !state;
ui->statusbar->setVisible(state);
ui->actionStatus_Bar->setChecked(state);
}
void MainWindow::on_actionProject_triggered()
{
bool state = ui->actionProject->isChecked();
ui->actionProject->setChecked(state);
showHideInfosTab(ui->tabProject,state);
}
void MainWindow::on_actionWatch_triggered()
{
bool state = ui->actionWatch->isChecked();
ui->actionWatch->setChecked(state);
showHideInfosTab(ui->tabWatch,state);
}
void MainWindow::on_actionStructure_triggered()
{
bool state = ui->actionStructure->isChecked();
ui->actionStructure->setChecked(state);
showHideInfosTab(ui->tabStructure,state);
}
void MainWindow::on_actionFiles_triggered()
{
bool state = ui->actionFiles->isChecked();
ui->actionFiles->setChecked(state);
showHideInfosTab(ui->tabFiles,state);
}
void MainWindow::on_actionProblem_Set_triggered()
{
bool state = ui->actionProblem_Set->isChecked();
ui->actionProblem_Set->setChecked(state);
showHideInfosTab(ui->tabProblem,state);
}
void MainWindow::on_actionIssues_triggered()
{
bool state = ui->actionIssues->isChecked();
ui->actionIssues->setChecked(state);
showHideMessagesTab(ui->tabIssues,state);
}
void MainWindow::on_actionCompile_Log_triggered()
{
bool state = ui->actionCompile_Log->isChecked();
ui->actionCompile_Log->setChecked(state);
showHideMessagesTab(ui->tabCompilerOutput,state);
}
void MainWindow::on_actionDebug_Window_triggered()
{
bool state = ui->actionCompile_Log->isChecked();
ui->actionDebug_Window->setChecked(state);
showHideMessagesTab(ui->tabDebug, state);
}
void MainWindow::on_actionSearch_triggered()
{
bool state = ui->actionSearch->isChecked();
ui->actionSearch->setChecked(state);
showHideMessagesTab(ui->tabSearch,state);
}
void MainWindow::on_actionTODO_triggered()
{
bool state = ui->actionTODO->isChecked();
ui->actionTODO->setChecked(state);
showHideMessagesTab(ui->tabTODO,state);
}
void MainWindow::on_actionBookmark_triggered()
{
bool state = ui->actionBookmark->isChecked();
ui->actionBookmark->setChecked(state);
showHideMessagesTab(ui->tabBookmark,state);
}
void MainWindow::on_actionProblem_triggered()
{
bool state = ui->actionProblem->isChecked();
ui->actionProblem->setChecked(state);
showHideMessagesTab(ui->tabProblem,state);
}

View File

@ -65,9 +65,15 @@ class MainWindow : public QMainWindow
CompileSuccessionTaskType type;
QString filename;
};
using PCompileSuccessionTask = std::shared_ptr<CompileSuccessionTask>;
struct TabWidgetInfo {
int order;
QString text;
QIcon icon;
};
using PTabWidgetInfo = std::shared_ptr<TabWidgetInfo>;
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
@ -216,6 +222,10 @@ private:
void applyCurrentProblemCaseChanges();
void updateEditorParser(QTabWidget* tabWidget);
void updateEditorHideTime(QTabWidget* tabWidget);
void showHideInfosTab(QWidget *widget, bool show);
void showHideMessagesTab(QWidget *widget, bool show);
void prepareTabInfosData();
void prepareTabMessagesData();
private slots:
void onAutoSaveTimeout();
@ -479,6 +489,34 @@ private slots:
void on_btnOpenProblemAnswer_clicked();
void on_actionTool_Window_Bars_triggered();
void on_actionStatus_Bar_triggered();
void on_actionProject_triggered();
void on_actionWatch_triggered();
void on_actionStructure_triggered();
void on_actionFiles_triggered();
void on_actionProblem_Set_triggered();
void on_actionIssues_triggered();
void on_actionCompile_Log_triggered();
void on_actionDebug_Window_triggered();
void on_actionSearch_triggered();
void on_actionTODO_triggered();
void on_actionBookmark_triggered();
void on_actionProblem_triggered();
private:
Ui::MainWindow *ui;
EditorList *mEditorList;
@ -533,6 +571,9 @@ private:
bool mShouldRemoveAllSettings;
PCompileSuccessionTask mCompileSuccessionTask;
QMap<QWidget*, PTabWidgetInfo> mTabInfosData;
QMap<QWidget*, PTabWidgetInfo> mTabMessagesData;
QTimer mAutoSaveTimer;
CaretList mCaretList;

View File

@ -1540,7 +1540,6 @@
<addaction name="actionBookmark"/>
<addaction name="actionProblem"/>
</widget>
<addaction name="actionToolbar"/>
<addaction name="actionTool_Window_Bars"/>
<addaction name="menuTool_Windows"/>
<addaction name="actionStatus_Bar"/>
@ -2492,14 +2491,6 @@
<string>C Reference</string>
</property>
</action>
<action name="actionToolbar">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Toolbar</string>
</property>
</action>
<action name="actionTool_Window_Bars">
<property name="checkable">
<bool>true</bool>

View File

@ -3277,6 +3277,12 @@ void Settings::CodeCompletion::doLoad()
#endif
mClearWhenEditorHidden = boolValue("clear_when_editor_hidden",doClear);
#ifdef Q_OS_WIN
if (statex.ullAvailPhys < (long long int)1024*1024*1024) {
mClearWhenEditorHidden = true;
}
#endif
}
Settings::CodeFormatter::CodeFormatter(Settings *settings):

View File

@ -3,7 +3,7 @@
#include <QStringList>
#define DEVCPP_VERSION "beta.0.8.2"
#define DEVCPP_VERSION "beta.0.8.3"
#define APP_SETTSINGS_FILENAME "redpandacpp.ini"
#ifdef Q_OS_WIN