Added option to save/load MainWindow tab orders with a setting in the Misc tab in the settingsDialog
This commit is contained in:
parent
4407f93bc2
commit
5e647ecea7
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue