1
0
Fork 0

Added option to save/load MainWindow tab orders with a setting in the Misc tab in the settingsDialog

This commit is contained in:
Herzeh 2015-12-03 01:29:12 +01:00
parent 4407f93bc2
commit 5e647ecea7
8 changed files with 161 additions and 19 deletions

View File

@ -146,19 +146,25 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi
// Create the tab widget
mTabWidget = new MHTabWidget(NULL);
// Setup tabs
addQWidgetTab(mCpuWidget);
addQWidgetTab(mLogView);
addQWidgetTab(mNotesManager);
addQWidgetTab(mBreakpointsView);
addQWidgetTab(mMemMapView);
addQWidgetTab(mCallStackView);
addQWidgetTab(mScriptView);
addQWidgetTab(mSymbolView);
addQWidgetTab(mSourceViewManager);
addQWidgetTab(mReferenceManager);
addQWidgetTab(mThreadView);
addQWidgetTab(mSnowmanView);
// Add all widgets to the list
mWidgetList.push_back(mCpuWidget);
mWidgetList.push_back(mLogView);
mWidgetList.push_back(mNotesManager);
mWidgetList.push_back(mBreakpointsView);
mWidgetList.push_back(mMemMapView);
mWidgetList.push_back(mCallStackView);
mWidgetList.push_back(mScriptView);
mWidgetList.push_back(mSymbolView);
mWidgetList.push_back(mSourceViewManager);
mWidgetList.push_back(mReferenceManager);
mWidgetList.push_back(mThreadView);
mWidgetList.push_back(mSnowmanView);
// If LoadSaveTabOrder disabled, load tabs in default order
if(!ConfigBool("Miscellaneous", "LoadSaveTabOrder"))
loadTabDefaultOrder();
else
loadTabSavedOrder();
setCentralWidget(mTabWidget);
@ -243,13 +249,16 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi
connect(mCpuWidget->getDisasmWidget(), SIGNAL(decompileAt(dsint, dsint)), this, SLOT(decompileAt(dsint, dsint)));
connect(mCpuWidget->getDumpWidget(), SIGNAL(displayReferencesWidget()), this, SLOT(displayReferencesWidget()));
connect(mCpuWidget->getStackWidget(), SIGNAL(displayReferencesWidget()), this, SLOT(displayReferencesWidget()));
connect(mTabWidget, SIGNAL(tabMovedTabWidget(int,int)), this, SLOT(tabMovedSlot(int, int)));
connect(Config(), SIGNAL(shortcutsUpdated()), this, SLOT(refreshShortcuts()));
// Set default setttings (when not set)
SettingsDialog defaultSettings;
lastException = 0;
defaultSettings.SaveSettings();
// Create updatechecker
mUpdateChecker = new UpdateChecker(this);
@ -305,6 +314,49 @@ void MainWindow::setTab(QWidget* widget)
}
}
void MainWindow::loadTabDefaultOrder()
{
clearTabWidget();
// Setup tabs
for(int i=0; i < mWidgetList.size(); i++)
addQWidgetTab(mWidgetList[i]);
}
void MainWindow::loadTabSavedOrder()
{
clearTabWidget();
QMap<duint, QWidget* > tabIndexToWidget;
// Get tabIndex for each widget and add them to tabIndexToWidget
for(int i=0; i < mWidgetList.size(); i++)
{
QString tabName = mWidgetList[i]->windowTitle();
tabName = tabName.replace(" ", "") + "Tab";
duint tabIndex = Config()->getUint("TabOrder", tabName);
tabIndexToWidget.insert(tabIndex, mWidgetList[i]);
}
// Setup tabs
QMap<duint, QWidget* >::iterator it = tabIndexToWidget.begin();
for(it; it != tabIndexToWidget.end(); it++)
{
addQWidgetTab(it.value());
}
}
void MainWindow::clearTabWidget()
{
if(!mTabWidget->count())
return;
for(int i=mTabWidget->count()-1; i >= 0; i--)
{
mTabWidget->removeTab(i);
}
}
void MainWindow::setGlobalShortcut(QAction* action, const QKeySequence & key)
{
action->setShortcut(key);
@ -715,9 +767,10 @@ void MainWindow::displaySnowmanWidget()
void MainWindow::openSettings()
{
SettingsDialog settings(this);
settings.lastException = lastException;
settings.exec();
SettingsDialog *settings = new SettingsDialog(this);
connect(settings, SIGNAL(chkSaveLoadTabOrderStateChanged(bool)), this, SLOT(chkSaveloadTabSavedOrderStateChangedSlot(bool)));
settings->lastException = lastException;
settings->exec();
}
void MainWindow::openAppearance()
@ -1162,3 +1215,21 @@ void MainWindow::executeOnGuiThread(void* cbGuiThread)
{
((GUICALLBACK)cbGuiThread)();
}
void MainWindow::tabMovedSlot(int from, int to)
{
for(int i=0; i < mTabWidget->count(); i++)
{
// Remove space in widget name and append Tab to get config settings (CPUTab, MemoryMapTab, etc...)
QString tabName = mTabWidget->tabText(i).replace(" ", "") + "Tab";
Config()->setUint("TabOrder", tabName, i);
}
}
void MainWindow::chkSaveloadTabSavedOrderStateChangedSlot(bool state)
{
if(state == Qt::Checked)
loadTabSavedOrder();
else
loadTabDefaultOrder();
}

View File

@ -24,6 +24,7 @@
#include "MainWindowCloseThread.h"
#include "TimeWastedCounter.h"
#include "NotesManager.h"
#include "SettingsDialog.h"
namespace Ui
{
@ -40,6 +41,9 @@ public:
static DWORD WINAPI closeThread(void* ptr);
void closeEvent(QCloseEvent* event);
void setTab(QWidget* widget);
void loadTabDefaultOrder();
void loadTabSavedOrder();
void clearTabWidget();
public slots:
void executeCommand();
@ -111,6 +115,8 @@ public slots:
void showQWidgetTab(QWidget* qWidget);
void closeQWidgetTab(QWidget* qWidget);
void executeOnGuiThread(void* cbGuiThread);
void tabMovedSlot(int from, int to);
void chkSaveloadTabSavedOrderStateChangedSlot(bool state);
private:
Ui::MainWindow* ui;
@ -186,6 +192,7 @@ private:
bool bCanClose;
MainWindowCloseThread* mCloseThread;
QVector<QWidget* > mWidgetList;
protected:
void dragEnterEvent(QDragEnterEvent* pEvent);

View File

@ -230,6 +230,9 @@ void SettingsDialog::LoadSettings()
bJitOld = settings.miscSetJIT;
bJitAutoOld = settings.miscSetJITAuto;
GetSettingBool("Miscellaneous", "LoadSaveTabOrder", &settings.miscLoadSaveTabOrder);
ui->chkSaveLoadTabOrder->setChecked(settings.miscLoadSaveTabOrder);
}
void SettingsDialog::SaveSettings()
@ -297,6 +300,8 @@ void SettingsDialog::SaveSettings()
if(settings.miscSymbolCache)
BridgeSettingSet("Symbols", "CachePath", ui->editSymbolCache->text().toUtf8().constData());
BridgeSettingSetUint("Miscellaneous", "LoadSaveTabOrder", settings.miscLoadSaveTabOrder);
BridgeSettingFlush();
Config()->load();
DbgSettingsUpdated();
@ -624,3 +629,13 @@ void SettingsDialog::on_editSymbolCache_textEdited(const QString & arg1)
Q_UNUSED(arg1);
settings.miscSymbolCache = true;
}
void SettingsDialog::on_chkSaveLoadTabOrder_stateChanged(int arg1)
{
if(arg1 == Qt::Unchecked)
settings.miscLoadSaveTabOrder = false;
else
settings.miscLoadSaveTabOrder = true;
emit chkSaveLoadTabOrderStateChanged((bool)arg1);
}

View File

@ -18,6 +18,9 @@ public:
void SaveSettings();
unsigned int lastException;
signals:
void chkSaveLoadTabOrderStateChanged(bool state);
private slots:
//Manual slots
void setLastException(unsigned int exceptionCode);
@ -62,6 +65,8 @@ private slots:
void on_editSymbolStore_textEdited(const QString & arg1);
void on_editSymbolCache_textEdited(const QString & arg1);
void on_chkSaveLoadTabOrder_stateChanged(int arg1);
private:
//enums
enum CalcType
@ -127,6 +132,7 @@ private:
bool miscSetJITAuto;
bool miscSymbolStore;
bool miscSymbolCache;
bool miscLoadSaveTabOrder;
};
//variables

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>383</width>
<height>307</height>
<height>365</height>
</rect>
</property>
<property name="sizePolicy">
@ -33,7 +33,7 @@
<bool>true</bool>
</property>
<property name="currentIndex">
<number>0</number>
<number>4</number>
</property>
<widget class="QWidget" name="tabEvents">
<attribute name="title">
@ -432,7 +432,7 @@
<x>11</x>
<y>13</y>
<width>341</width>
<height>145</height>
<height>168</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
@ -507,6 +507,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkSaveLoadTabOrder">
<property name="text">
<string>Load/Save Tab Order</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

View File

@ -11,6 +11,7 @@ MHTabWidget::MHTabWidget(QWidget* parent, bool allowDetach, bool allowDelete) :
connect(m_tabBar, SIGNAL(OnDetachTab(int, QPoint &)), this, SLOT(DetachTab(int, QPoint &)));
connect(m_tabBar, SIGNAL(OnMoveTab(int, int)), this, SLOT(MoveTab(int, int)));
connect(m_tabBar, SIGNAL(OnDeleteTab(int)), this, SLOT(DeleteTab(int)));
connect(m_tabBar, SIGNAL(tabMoved(int,int)), this, SLOT(tabMoved(int, int)));
setTabBar(m_tabBar);
setMovable(true);
@ -132,6 +133,11 @@ void MHTabWidget::DeleteTab(int index)
removeTab(index);
}
void MHTabWidget::tabMoved(int from, int to)
{
emit tabMovedTabWidget(from, to);
}
void MHTabWidget::setCurrentIndex(int index)
{
// Check if it's just a normal tab

View File

@ -30,11 +30,15 @@ public:
int count() const;
QList<QWidget*> windows();
signals:
void tabMovedTabWidget(int from, int to);
public slots:
void AttachTab(QWidget* parent);
void DetachTab(int index, QPoint &);
void MoveTab(int fromIndex, int toIndex);
void DeleteTab(int index);
void tabMoved(int from, int to);
public Q_SLOTS:
void setCurrentIndex(int index);

View File

@ -170,6 +170,10 @@ Configuration::Configuration() : QObject()
engineBool.insert("ListAllPages", false);
defaultBools.insert("Engine", engineBool);
QMap<QString, bool> miscellaneousBool;
miscellaneousBool.insert("LoadSaveTabOrder", false);
defaultBools.insert("Miscellaneous", miscellaneousBool);
//uint settings
QMap<QString, duint> hexdumpUint;
hexdumpUint.insert("DefaultView", 0);
@ -177,6 +181,20 @@ Configuration::Configuration() : QObject()
QMap<QString, duint> disasmUint;
disasmUint.insert("MaxModuleSize", -1);
defaultUints.insert("Disassembler", disasmUint);
QMap<QString, duint> tabOrderUint;
tabOrderUint.insert("CPUTab", 0);
tabOrderUint.insert("LogTab", 1);
tabOrderUint.insert("NotesTab", 2);
tabOrderUint.insert("BreakpointsTab", 3);
tabOrderUint.insert("MemoryMapTab", 4);
tabOrderUint.insert("CallStackTab", 5);
tabOrderUint.insert("ScriptTab", 6);
tabOrderUint.insert("SymbolsTab", 7);
tabOrderUint.insert("SourceTab", 8);
tabOrderUint.insert("ReferencesTab", 9);
tabOrderUint.insert("ThreadsTab", 10);
tabOrderUint.insert("SnowmanTab", 11);
defaultUints.insert("TabOrder", tabOrderUint);
//font settings
QFont font("Lucida Console", 8, QFont::Normal, false);
@ -398,6 +416,9 @@ void Configuration::readUints()
void Configuration::writeUints()
{
duint setting;
bool bSaveLoadTabOrder = ConfigBool("Miscellaneous", "LoadSaveTabOrder");
//write config
for(int i = 0; i < Uints.size(); i++)
{
@ -406,6 +427,11 @@ void Configuration::writeUints()
for(int j = 0; j < currentUint->size(); j++)
{
QString id = (*currentUint).keys().at(j);
// Do not save settings to file if saveLoadTabOrder checkbox is Unchecked
if(!bSaveLoadTabOrder && category == "TabOrder" && BridgeSettingGetUint(category.toUtf8().constData(), id.toUtf8().constData(), &setting))
continue;
uintToConfig(category, id, (*currentUint)[id]);
}
}