- 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 Version 0.8.2 For Dev-C++ 7 Beta
- fix: highlighter can't correctly find the end of ANSI C-style Comments - 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. - 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"); mFileInfoStatus->setStyleSheet("margin-left:10px; margin-right:10px");
mFileEncodingStatus->setStyleSheet("margin-left:10px; margin-right:10px"); mFileEncodingStatus->setStyleSheet("margin-left:10px; margin-right:10px");
mFileModeStatus->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,mFileModeStatus);
ui->statusbar->insertPermanentWidget(0,mFileEncodingStatus); ui->statusbar->insertPermanentWidget(0,mFileEncodingStatus);
ui->statusbar->insertPermanentWidget(0,mFileInfoStatus); ui->statusbar->insertPermanentWidget(0,mFileInfoStatus);
@ -151,11 +153,11 @@ MainWindow::MainWindow(QWidget *parent)
mCPUDialog = nullptr; mCPUDialog = nullptr;
updateProjectView();
updateEditorActions();
updateCaretActions();
applySettings(); applySettings();
applyUISettings(); applyUISettings();
updateProjectView();
updateEditorActions();
updateCaretActions();
connect(ui->debugConsole,&QConsole::commandInput,this,&MainWindow::onDebugCommandInput); connect(ui->debugConsole,&QConsole::commandInput,this,&MainWindow::onDebugCommandInput);
@ -252,7 +254,6 @@ MainWindow::MainWindow(QWidget *parent)
mFunctionTip = std::make_shared<FunctionTooltipWidget>(); mFunctionTip = std::make_shared<FunctionTooltipWidget>();
mClassBrowserModel.setColors(mStatementColors); mClassBrowserModel.setColors(mStatementColors);
updateAppTitle();
connect(&mAutoSaveTimer, &QTimer::timeout, connect(&mAutoSaveTimer, &QTimer::timeout,
this, &MainWindow::onAutoSaveTimeout); this, &MainWindow::onAutoSaveTimeout);
@ -266,6 +267,7 @@ MainWindow::MainWindow(QWidget *parent)
ui->actionEGE_Manual->setVisible(pSettings->environment().language()=="zh_CN"); ui->actionEGE_Manual->setVisible(pSettings->environment().language()=="zh_CN");
updateAppTitle();
buildContextMenus(); buildContextMenus();
updateEditorColorSchemes(); updateEditorColorSchemes();
@ -552,23 +554,38 @@ void MainWindow::applyUISettings()
const Settings::UI& settings = pSettings->ui(); const Settings::UI& settings = pSettings->ui();
restoreGeometry(settings.mainWindowGeometry()); restoreGeometry(settings.mainWindowGeometry());
restoreState(settings.mainWindowState()); restoreState(settings.mainWindowState());
//we can show/hide left/bottom panels here, cause mainwindow layout is not calculated ui->actionTool_Window_Bars->setChecked(settings.showToolWindowBars());
// ui->tabMessages->setCurrentIndex(settings.bottomPanelIndex()); ui->tabInfos->setVisible(settings.showToolWindowBars());
// if (settings.bottomPanelOpenned()) { ui->tabMessages->setVisible(settings.showToolWindowBars());
// mBottomPanelHeight = settings.bottomPanelHeight(); ui->actionStatus_Bar->setChecked(settings.showStatusBar());
// openCloseBottomPanel(true); ui->statusbar->setVisible(settings.showStatusBar());
// } else {
// openCloseBottomPanel(false); ui->actionProject->setChecked(settings.showProject());
// mBottomPanelHeight = settings.bottomPanelHeight(); showHideInfosTab(ui->tabProject,settings.showProject());
// } ui->actionWatch->setChecked(settings.showWatch());
// ui->tabInfos->setCurrentIndex(settings.leftPanelIndex()); showHideInfosTab(ui->tabWatch,settings.showWatch());
// if (settings.leftPanelOpenned()) { ui->actionStructure->setChecked(settings.showStructure());
// mLeftPanelWidth = settings.leftPanelWidth(); showHideInfosTab(ui->tabStructure,settings.showStructure());
// openCloseLeftPanel(true); ui->actionFiles->setChecked(settings.showFiles());
// } else { showHideInfosTab(ui->tabFiles,settings.showFiles());
// openCloseLeftPanel(false); ui->actionProblem_Set->setChecked(settings.showProblemSet());
// mLeftPanelWidth = settings.leftPanelWidth(); 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() QFileSystemWatcher *MainWindow::fileSystemWatcher()
@ -3218,6 +3235,22 @@ void MainWindow::closeEvent(QCloseEvent *event) {
settings.setLeftPanelWidth(mLeftPanelWidth); settings.setLeftPanelWidth(mLeftPanelWidth);
settings.setLeftPanelIndex(ui->tabInfos->currentIndex()); settings.setLeftPanelIndex(ui->tabInfos->currentIndex());
settings.setLeftPanelOpenned(mLeftPanelOpenned); 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(); settings.save();
//save current folder ( for files view ) //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) void MainWindow::on_EditorTabsLeft_currentChanged(int)
{ {
Editor * editor = mEditorList->getEditor(-1,ui->EditorTabsLeft); Editor * editor = mEditorList->getEditor(-1,ui->EditorTabsLeft);
@ -5410,3 +5532,119 @@ bool MainWindow::openningFiles() const
return mOpenningFiles; 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; CompileSuccessionTaskType type;
QString filename; QString filename;
}; };
using PCompileSuccessionTask = std::shared_ptr<CompileSuccessionTask>; using PCompileSuccessionTask = std::shared_ptr<CompileSuccessionTask>;
struct TabWidgetInfo {
int order;
QString text;
QIcon icon;
};
using PTabWidgetInfo = std::shared_ptr<TabWidgetInfo>;
public: public:
MainWindow(QWidget *parent = nullptr); MainWindow(QWidget *parent = nullptr);
~MainWindow(); ~MainWindow();
@ -216,6 +222,10 @@ private:
void applyCurrentProblemCaseChanges(); void applyCurrentProblemCaseChanges();
void updateEditorParser(QTabWidget* tabWidget); void updateEditorParser(QTabWidget* tabWidget);
void updateEditorHideTime(QTabWidget* tabWidget); void updateEditorHideTime(QTabWidget* tabWidget);
void showHideInfosTab(QWidget *widget, bool show);
void showHideMessagesTab(QWidget *widget, bool show);
void prepareTabInfosData();
void prepareTabMessagesData();
private slots: private slots:
void onAutoSaveTimeout(); void onAutoSaveTimeout();
@ -479,6 +489,34 @@ private slots:
void on_btnOpenProblemAnswer_clicked(); 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: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
EditorList *mEditorList; EditorList *mEditorList;
@ -533,6 +571,9 @@ private:
bool mShouldRemoveAllSettings; bool mShouldRemoveAllSettings;
PCompileSuccessionTask mCompileSuccessionTask; PCompileSuccessionTask mCompileSuccessionTask;
QMap<QWidget*, PTabWidgetInfo> mTabInfosData;
QMap<QWidget*, PTabWidgetInfo> mTabMessagesData;
QTimer mAutoSaveTimer; QTimer mAutoSaveTimer;
CaretList mCaretList; CaretList mCaretList;

View File

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

View File

@ -3277,6 +3277,12 @@ void Settings::CodeCompletion::doLoad()
#endif #endif
mClearWhenEditorHidden = boolValue("clear_when_editor_hidden",doClear); 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): Settings::CodeFormatter::CodeFormatter(Settings *settings):

View File

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