1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 03:45:06 +00:00
serenity/Applications/VisualBuilder/VBWidgetPropertyModel.cpp
Andreas Kling 0e6b273620 LibGUI: Start working on GTableView inline editing.
This is pretty shaky still, but the basic idea is that you subclass GModel
and return true for editable indices. The table view also needs to have its
editable flag set.
2019-04-18 22:27:14 +02:00

70 lines
1.9 KiB
C++

#include "VBWidgetPropertyModel.h"
#include "VBWidget.h"
#include "VBProperty.h"
VBWidgetPropertyModel::VBWidgetPropertyModel(VBWidget& widget)
: m_widget(widget)
{
}
VBWidgetPropertyModel::~VBWidgetPropertyModel()
{
ASSERT_NOT_REACHED();
}
int VBWidgetPropertyModel::row_count(const GModelIndex&) const
{
return m_widget.m_properties.size();
}
String VBWidgetPropertyModel::column_name(int column) const
{
switch (column) {
case Column::Name: return "Name";
case Column::Value: return "Value";
default: ASSERT_NOT_REACHED();
}
}
GModel::ColumnMetadata VBWidgetPropertyModel::column_metadata(int column) const
{
UNUSED_PARAM(column);
return { 90, TextAlignment::CenterLeft };
}
GVariant VBWidgetPropertyModel::data(const GModelIndex& index, Role role) const
{
if (role == Role::Display) {
auto& property = *m_widget.m_properties[index.row()];
switch (index.column()) {
case Column::Name: return property.name();
case Column::Value: return property.value();
}
ASSERT_NOT_REACHED();
}
if (role == Role::ForegroundColor) {
auto& property = *m_widget.m_properties[index.row()];
switch (index.column()) {
case Column::Name: return Color::Black;
case Column::Value: return property.is_readonly() ? Color(Color::MidGray) : Color(Color::Black);
}
ASSERT_NOT_REACHED();
}
return { };
}
void VBWidgetPropertyModel::set_data(const GModelIndex& index, const GVariant& value)
{
ASSERT(index.column() == Column::Value);
auto& property = *m_widget.m_properties[index.row()];
ASSERT(!property.is_readonly());
property.set_value(value);
}
bool VBWidgetPropertyModel::is_editable(const GModelIndex& index) const
{
if (index.column() != Column::Value)
return false;
auto& property = *m_widget.m_properties[index.row()];
return !property.is_readonly();
}