Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions src/common/Configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -948,7 +948,7 @@ bool Configuration::getNavBarLegendEnabled()
void Configuration::setShowQuickFilter(bool show)
{
s.setValue("showQuickFilter", show);
emit quickFilterToggled(show);
emit quickFilterOptionsChanged();
}

bool Configuration::getShowQuickFilter() const
Expand All @@ -959,7 +959,7 @@ bool Configuration::getShowQuickFilter() const
void Configuration::setItemCountVisible(bool visible)
{
s.setValue("itemCountVisible", visible);
emit itemCountToggled(visible);
emit itemCountOptionsChanged();
}

bool Configuration::getItemCountVisible() const
Expand All @@ -969,11 +969,33 @@ bool Configuration::getItemCountVisible() const

void Configuration::setItemCountAutoHide(bool value)
{
s.value("autoHideItemCount", value);
emit itemCountAutoHideToggled(value);
s.setValue("autoHideItemCount", value);
emit itemCountOptionsChanged();
}

bool Configuration::getItemCountAutoHide() const
{
return s.value("autoHideItemCount", false).toBool();
}

void Configuration::setTruncateFunctionNameCol(bool value)
{
s.setValue("truncateFcnNameCol", value);
emit functionsOptionsChanged();
}

bool Configuration::getTruncateFunctionNameCol() const
{
return s.value("truncateFcnNameCol", true).toBool();
}

void Configuration::setFunctionNameColWidth(int width)
{
s.setValue("fcnNameColWidth", width);
emit functionsOptionsChanged();
}

int Configuration::getFunctionNameColWidth() const
{
return s.value("fcnNameColWidth", 400).toInt();
}
23 changes: 20 additions & 3 deletions src/common/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -338,15 +338,32 @@ class CUTTER_EXPORT Configuration : public QObject
*/
bool getItemCountAutoHide() const;

/**
* @brief Enable or Disable default width of function name column in widgets
*
* Prevents long function names from excessively stretching the UI.
* The default width is specified by @ref setFunctionNameColumnWidth
*/
void setTruncateFunctionNameCol(bool value);
bool getTruncateFunctionNameCol() const;

/**
* @brief Set the function name column width in pixels
*
* This is only used if @ref setTruncateFunctionNameCol is set to true
*/
void setFunctionNameColWidth(int width);
int getFunctionNameColWidth() const;

public slots:
void refreshFont();
signals:
void fontsUpdated();
void colorsUpdated();
void interfaceThemeChanged();
void quickFilterToggled(bool show);
void itemCountToggled(bool visible);
void itemCountAutoHideToggled(bool value);
void itemCountOptionsChanged();
void quickFilterOptionsChanged();
void functionsOptionsChanged();
#ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING
void kSyntaxHighlightingThemeChanged();
#endif
Expand Down
23 changes: 22 additions & 1 deletion src/common/Helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,16 @@ QString formatBytecount(const uint64_t bytecount)

void adjustColumns(QTreeView *tv, int columnCount, int padding)
{
for (int i = 0; i != columnCount; ++i) {
adjustColumns(tv, 0, columnCount, padding);
}

void adjustColumns(QTreeView *tv, int startIndex, int endIndex, int padding)
{
if (!tv) {
return;
}

for (int i = startIndex; i < endIndex; ++i) {
tv->resizeColumnToContents(i);
if (padding > 0) {
int width = tv->columnWidth(i);
Expand All @@ -56,6 +65,18 @@ void adjustColumns(QTreeWidget *tw, int padding)
adjustColumns(tw, tw->columnCount(), padding);
}

void adjustColumn(QTreeView *tv, int columnIndex, int width)
{
if (!tv) {
return;
}

tv->resizeColumnToContents(columnIndex);
if (width >= 0 && tv->columnWidth(columnIndex) > width) {
tv->setColumnWidth(columnIndex, width);
}
}

QTreeWidgetItem *appendRow(QTreeWidget *tw, const QString &str, const QString &str2,
const QString &str3, const QString &str4, const QString &str5)
{
Expand Down
13 changes: 13 additions & 0 deletions src/common/Helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,20 @@ class QMouseEvent;
namespace qhelpers {
CUTTER_EXPORT QString formatBytecount(const uint64_t bytecount);
CUTTER_EXPORT void adjustColumns(QTreeView *tv, int columnCount, int padding);
CUTTER_EXPORT void adjustColumns(QTreeView *tw, int startIndex, int endIndex, int padding);
CUTTER_EXPORT void adjustColumns(QTreeWidget *tw, int padding);
/**
* @brief Resize column to contents or speicifed width
*
* Width is only applied if it's non-negative and less than the width of
* specified columns contents
*
* @param tv TreeView which contains the column
* @param columnIndex The index of column to resize
* @param width Width in pixels for resizing the column
*/
CUTTER_EXPORT void adjustColumn(QTreeView *tv, int columnIndex, int width = -1);

CUTTER_EXPORT bool selectFirstItem(QAbstractItemView *itemView);
CUTTER_EXPORT QTreeWidgetItem *appendRow(QTreeWidget *tw, const QString &str,
const QString &str2 = QString(),
Expand Down
21 changes: 21 additions & 0 deletions src/core/Cutter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4031,6 +4031,27 @@ QList<VTableDescription> CutterCore::getAllVTables()
return vtableDescs;
}

QList<BacktraceDescription> CutterCore::getAllBacktraces()
{
QList<BacktraceDescription> backtraces;

CORE_LOCK();
RzList *list = rz_core_debug_backtraces(core);
RzListIter *iter;
RzBacktrace *bt;
CutterRzListForeach (list, iter, RzBacktrace, bt) {
BacktraceDescription backtrace;
backtrace.functionName = bt->fcn ? bt->fcn->name : "";
backtrace.pc = RzAddressString(bt->frame ? bt->frame->addr : 0);
backtrace.sp = RzAddressString(bt->frame ? bt->frame->sp : 0);
backtrace.frameSize = QString::number(bt->frame ? bt->frame->size : 0);
backtrace.description = bt->desc;
backtraces.append(backtrace);
}
rz_list_free(list);
return backtraces;
}

QList<TypeDescription> CutterCore::getAllTypes()
{
QList<TypeDescription> types;
Expand Down
1 change: 1 addition & 0 deletions src/core/Cutter.h
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,7 @@ class CUTTER_EXPORT CutterCore : public QObject
QList<BinClassDescription> getAllClassesFromFlags();
QList<ResourcesDescription> getAllResources();
QList<VTableDescription> getAllVTables();
QList<BacktraceDescription> getAllBacktraces();

/**
* @return all loaded types
Expand Down
10 changes: 10 additions & 0 deletions src/core/CutterDescriptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,15 @@ struct MarkDescription
QColor color;
};

struct BacktraceDescription
{
QString functionName;
QString pc;
QString sp;
QString frameSize;
QString description;
};

Q_DECLARE_METATYPE(FunctionDescription)
Q_DECLARE_METATYPE(ImportDescription)
Q_DECLARE_METATYPE(ExportDescription)
Expand Down Expand Up @@ -472,5 +481,6 @@ Q_DECLARE_METATYPE(VariableDescription)
Q_DECLARE_METATYPE(BasefindCoreStatusDescription)
Q_DECLARE_METATYPE(BasefindResultDescription)
Q_DECLARE_METATYPE(MarkDescription)
Q_DECLARE_METATYPE(BacktraceDescription)

#endif // DESCRIPTIONS_H
25 changes: 21 additions & 4 deletions src/dialogs/preferences/InterfaceOptionsWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,41 @@ InterfaceOptionsWidget::InterfaceOptionsWidget(PreferencesDialog *dialog)
ui->setupUi(this);

setUpQuickFilter();
setUpFunctions();
}

InterfaceOptionsWidget::~InterfaceOptionsWidget() {}

void InterfaceOptionsWidget::setUpFunctions()
{
bool truncate = Config()->getTruncateFunctionNameCol();
ui->fcnTruncateCheckBox->setChecked(truncate);
ui->fcnTruncateSpinBox->setEnabled(truncate);
ui->fcnTruncateSpinBox->setValue(Config()->getFunctionNameColWidth());

connect(ui->fcnTruncateCheckBox, &QCheckBox::toggled, this, [this](bool checked) {
ui->fcnTruncateSpinBox->setEnabled(checked);
Config()->setTruncateFunctionNameCol(checked);
});

connect<void (QSpinBox::*)(int)>(ui->fcnTruncateSpinBox, &QSpinBox::valueChanged, Config(),
&Configuration::setFunctionNameColWidth);
}

void InterfaceOptionsWidget::setUpQuickFilter()
{
ui->quickFilterCheckBox->setChecked(Config()->getShowQuickFilter());
connect(ui->quickFilterCheckBox, &QCheckBox::toggled, this,
[](bool checked) { Config()->setShowQuickFilter(checked); });
connect(ui->quickFilterCheckBox, &QCheckBox::toggled, Config(),
&Configuration::setShowQuickFilter);

ui->itemCountCheckBox->setChecked(Config()->getItemCountVisible());
connect(ui->itemCountCheckBox, &QCheckBox::toggled, this, [this](bool checked) {
Config()->setItemCountVisible(checked);
ui->hideItemCountCheckBox->setEnabled(checked);
});

connect(ui->hideItemCountCheckBox, &QCheckBox::toggled, this,
[](bool checked) { Config()->setItemCountAutoHide(checked); });
connect(ui->hideItemCountCheckBox, &QCheckBox::toggled, Config(),
&Configuration::setItemCountAutoHide);
ui->hideItemCountCheckBox->setChecked(Config()->getItemCountAutoHide());
ui->hideItemCountCheckBox->setEnabled(ui->itemCountCheckBox->isChecked());
}
4 changes: 4 additions & 0 deletions src/dialogs/preferences/InterfaceOptionsWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@ class InterfaceOptionsWidget : public QDialog
explicit InterfaceOptionsWidget(PreferencesDialog *dialog);
~InterfaceOptionsWidget();

signals:
void interfaceOptionsChanged();

private:
std::unique_ptr<Ui::InterfaceOptionsWidget> ui;

void setUpFunctions();
void setUpQuickFilter();
};

Expand Down
119 changes: 82 additions & 37 deletions src/dialogs/preferences/InterfaceOptionsWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -45,44 +45,89 @@
</property>
<layout class="QVBoxLayout" name="scrollLayout">
<item>
<widget class="QGroupBox" name="quickFilterGroupBox">
<property name="title">
<string>Quick FIlter</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="topMargin">
<number>24</number>
</property>
<item>
<widget class="QCheckBox" name="quickFilterCheckBox">
<property name="text">
<string>Show Quick Filter by default</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="itemCountCheckBox">
<property name="text">
<string>Show Item Count in Quick Filter</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="hideItemCountCheckBox">
<property name="text">
<string>Hide Item Count on overflow</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="fcnWidgetGroupBox">
<property name="title">
<string>Functions</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="topMargin">
<number>24</number>
</property>
<item>
<layout class="QHBoxLayout" name="fcnTruncateLayout" stretch="0,0">
<item>
<widget class="QCheckBox" name="fcnTruncateCheckBox">
<property name="toolTip">
<string>Sets the default width for function name columns in widgets. In Functions widget the width is only applied if in Horizontal view</string>
</property>
<property name="text">
<string>Limit function name column width to</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="fcnTruncateSpinBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Sets the default width for function name columns in widgets. In Functions widget the width is only applied if in Horizontal view</string>
</property>
<property name="suffix">
<string>px</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="quickFilterGroupBox">
<property name="title">
<string>Quick FIlter</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="topMargin">
<number>24</number>
</property>
<item>
<widget class="QCheckBox" name="quickFilterCheckBox">
<property name="text">
<string>Show Quick Filter by default</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="itemCountCheckBox">
<property name="text">
<string>Show Item Count in Quick Filter</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="hideItemCountCheckBox">
<property name="text">
<string>Hide Item Count on overflow</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
Expand Down
Loading
Loading