Skip to content

Commit 59ddfa6

Browse files
kdmamrexodia
authored andcommitted
Added action filter box
Added shortcut copyline Added shortcut binding for copyline
1 parent 72d76bb commit 59ddfa6

File tree

6 files changed

+87
-15
lines changed

6 files changed

+87
-15
lines changed

src/gui/Src/Gui/CPUInfoBox.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ void CPUInfoBox::setupContextMenu()
3939
mCopyAddressAction = makeAction(tr("Address"), SLOT(copyAddress()));
4040
mCopyRvaAction = makeAction(tr("RVA"), SLOT(copyRva()));
4141
mCopyOffsetAction = makeAction(tr("File Offset"), SLOT(copyOffset()));
42+
mCopyLineAction = makeAction(tr("Copy Line"), SLOT(copyLineSlot()));
43+
setupShortcuts();
4244
}
4345

4446
int CPUInfoBox::getHeight()
@@ -690,3 +692,9 @@ void CPUInfoBox::doubleClickedSlot()
690692
{
691693
followInDump(curAddr);
692694
}
695+
696+
void CPUInfoBox::setupShortcuts()
697+
{
698+
mCopyLineAction->setShortcut(ConfigShortcut("ActionCopyLine"));
699+
addAction(mCopyLineAction);
700+
}

src/gui/Src/Gui/CPUInfoBox.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ public slots:
4141
QString getInfoLine(int line);
4242
void clear();
4343
void setupContextMenu();
44-
44+
void setupShortcuts();
4545
XrefBrowseDialog* mXrefDlg = nullptr;
4646

4747
QAction* mCopyAddressAction;
4848
QAction* mCopyRvaAction;
4949
QAction* mCopyOffsetAction;
50+
QAction* mCopyLineAction;
5051
};
5152

5253
#endif // INFOBOX_H

src/gui/Src/Gui/ShortcutsDialog.cpp

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,52 @@ ShortcutsDialog::ShortcutsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::
2828
#else
2929
ui->tblShortcuts->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
3030
#endif
31-
3231
ui->tblShortcuts->verticalHeader()->setDefaultSectionSize(15);
33-
34-
const unsigned int numShortcuts = Config()->Shortcuts.count();
35-
ui->tblShortcuts->setRowCount(numShortcuts);
36-
int j = 0;
37-
for(QMap<QString, Configuration::Shortcut>::iterator i = Config()->Shortcuts.begin(); i != Config()->Shortcuts.end(); ++i, j++)
38-
{
39-
QTableWidgetItem* shortcutName = new QTableWidgetItem(i.value().Name);
40-
QTableWidgetItem* shortcutKey = new QTableWidgetItem(i.value().Hotkey.toString(QKeySequence::NativeText));
41-
ui->tblShortcuts->setItem(j, 0, shortcutName);
42-
ui->tblShortcuts->setItem(j, 1, shortcutKey);
43-
}
44-
ui->tblShortcuts->setSortingEnabled(true);
32+
showShortcutsFiltered(QString());
4533

4634
connect(ui->tblShortcuts, SIGNAL(itemSelectionChanged()), this, SLOT(syncTextfield()));
4735
connect(ui->shortcutEdit, SIGNAL(askForSave()), this, SLOT(updateShortcut()));
4836
connect(this, SIGNAL(rejected()), this, SLOT(rejectedSlot()));
37+
connect(ui->bntClearFilter, SIGNAL(released()), this, SLOT(on_btnClearFilter()));
38+
connect(ui->filterEdit, SIGNAL(textChanged(const QString &)), this, SLOT(on_FilterTextChanged(const QString &)));
39+
}
40+
41+
void ShortcutsDialog::showShortcutsFiltered(const QString & actionName)
42+
{
43+
QMap<QString, Configuration::Shortcut> shorcutsToShow;
44+
filterShortcutsByName(actionName, shorcutsToShow);
45+
renderShortcuts(shorcutsToShow);
46+
}
47+
48+
void ShortcutsDialog::filterShortcutsByName(const QString & nameFilter, QMap<QString, Configuration::Shortcut> & mapToFill)
49+
{
50+
for(QMap<QString, Configuration::Shortcut>::iterator i = Config()->Shortcuts.begin();
51+
i != Config()->Shortcuts.end();
52+
++i)
53+
{
54+
if(i.value().Name.contains(nameFilter, Qt::CaseInsensitive) || nameFilter == QString())
55+
{
56+
mapToFill.insert(i.value().Name, i.value());
57+
}
58+
}
59+
}
60+
61+
void ShortcutsDialog::renderShortcuts(QMap<QString, Configuration::Shortcut> & shortcuts)
62+
{
63+
ui->tblShortcuts->clearContents();
64+
ui->tblShortcuts->setRowCount(shortcuts.count());
65+
currentRow = 0;
66+
67+
int row = 0;
68+
for(QMap<QString, Configuration::Shortcut>::const_iterator it = shortcuts.begin(); it != shortcuts.end();
69+
++it, row++)
70+
{
71+
QTableWidgetItem* shortcutName = new QTableWidgetItem(it.value().Name);
72+
QTableWidgetItem* shortcutKey = new QTableWidgetItem(it.value().Hotkey.toString(QKeySequence::NativeText));
73+
ui->tblShortcuts->setItem(row, 0, shortcutName);
74+
ui->tblShortcuts->setItem(row, 1, shortcutKey);
75+
}
76+
ui->tblShortcuts->setSortingEnabled(true);
4977
}
5078

5179
void ShortcutsDialog::updateShortcut()
@@ -163,3 +191,14 @@ void ShortcutsDialog::rejectedSlot()
163191
{
164192
Config()->readShortcuts();
165193
}
194+
195+
void ShortcutsDialog::on_btnClearFilter()
196+
{
197+
ui->filterEdit->clear();
198+
showShortcutsFiltered(QString());
199+
}
200+
201+
void ShortcutsDialog::on_FilterTextChanged(const QString & actionName)
202+
{
203+
showShortcutsFiltered(actionName);
204+
}

src/gui/Src/Gui/ShortcutsDialog.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ private slots:
2828
void on_btnSave_clicked();
2929
void on_btnClearShortcut_clicked();
3030
void rejectedSlot();
31-
31+
void on_btnClearFilter();
32+
void on_FilterTextChanged(const QString & actionName);
3233
private:
3334
Ui::ShortcutsDialog* ui;
3435
QMap<QString, Configuration::Shortcut> ShortcutsBackup;
36+
void filterShortcutsByName(const QString & nameFilter, QMap<QString, Configuration::Shortcut> & mapToFill);
37+
void renderShortcuts(QMap<QString, Configuration::Shortcut> & shortcuts);
38+
void showShortcutsFiltered(const QString & actionName);
3539
};
3640

3741
#endif // SHORTCUTSDIALOG_H

src/gui/Src/Gui/ShortcutsDialog.ui

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,25 @@
2121
<item>
2222
<widget class="QTableWidget" name="tblShortcuts"/>
2323
</item>
24+
<item>
25+
<widget class="QGroupBox" name="filterBox">
26+
<property name="title">
27+
<string>Filter</string>
28+
</property>
29+
<layout class="QHBoxLayout" name="horizontalLayout_3">
30+
<item>
31+
<widget class="QLineEdit" name="filterEdit"/>
32+
</item>
33+
<item>
34+
<widget class="QPushButton" name="bntClearFilter">
35+
<property name="text">
36+
<string>Clear</string>
37+
</property>
38+
</widget>
39+
</item>
40+
</layout>
41+
</widget>
42+
</item>
2443
<item>
2544
<widget class="QGroupBox" name="groupBox">
2645
<property name="title">

src/gui/Src/Utils/Configuration.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
565565
defaultShortcuts.insert("ActionCopyAddress", Shortcut({tr("Actions"), tr("Copy Address")}, "Alt+INS"));
566566
defaultShortcuts.insert("ActionCopyRva", Shortcut({tr("Actions"), tr("Copy RVA")}, ""));
567567
defaultShortcuts.insert("ActionCopySymbol", Shortcut({tr("Actions"), tr("Copy Symbol")}, "Ctrl+S"));
568+
defaultShortcuts.insert("ActionCopyLine", Shortcut({tr("Actions"), tr("Copy Line")}, ""));
568569
defaultShortcuts.insert("ActionLoadScript", Shortcut({tr("Actions"), tr("Load Script")}, "Ctrl+O"));
569570
defaultShortcuts.insert("ActionReloadScript", Shortcut({tr("Actions"), tr("Reload Script")}, "Ctrl+R"));
570571
defaultShortcuts.insert("ActionUnloadScript", Shortcut({tr("Actions"), tr("Unload Script")}, "Ctrl+U"));

0 commit comments

Comments
 (0)