DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dbe::widgets::editors::multiattr Class Reference

#include <BuildingBlockEditors.hpp>

Inheritance diagram for dbe::widgets::editors::multiattr:
[legend]
Collaboration diagram for dbe::widgets::editors::multiattr:
[legend]

Public Types

typedef dunedaq::conffwk::attribute_t t_virtue
typedef editor_data< t_virtue > t_build_block_editor

Public Member Functions

 multiattr (t_virtue const &attr, QWidget *parent=nullptr, bool owned=false, bool readonly=false)
void SetEditor () override
Public Member Functions inherited from dbe::widgets::editors::base
template<typename T = editor_data_state>
std::shared_ptr< T > dataeditor ()
virtual void setdata (QStringList const &)
virtual void setdefaults (QString const &)
void setchanged (bool)
bool ischanged () const
virtual QStringList getdata ()
template<>
std::shared_ptr< editor_data_state > dataeditor ()

Private Slots

void AddToDataList (const QString &Data)
void RemoveFromDataList ()
void UpdateActions ()
void LineValueChanged ()
void LineValueChanged (QListWidgetItem *p)
void ListOrderChange (const QModelIndexList &IndexList)
void EndSignal ()
void CustomContextMenuRequested (const QPoint &pos)
void RemoveSlot ()

Private Member Functions

void buildtooltip ()
void closeEvent (QCloseEvent *Event)
void SetStatusBar ()
bool eventFilter (QObject *Target, QEvent *Event)

Private Attributes

std::shared_ptr< t_build_block_editor > m_base_data_editor
bool m_readonly
QStatusBar * StatusBar
QPushButton * OkButton
QPushButton * RemoveButton
QListWidget * ListWidget
base * BaseWidget
QMenu * ContextMenu
QAction * RemoveAction

Additional Inherited Members

Public Slots inherited from dbe::widgets::editors::base
virtual void slot_set_initial_loaded ()
Signals inherited from dbe::widgets::editors::base
void signal_force_close ()
void signal_edit_end ()
void signal_internal_value_change ()
void signal_value_change ()
Public Attributes inherited from dbe::widgets::editors::base
const QString c_input_placeholder { "Add a new value" }
const QString c_no_object_placeholder { "No Object currently set" }
Protected Member Functions inherited from dbe::widgets::editors::base
 base (std::shared_ptr< editor_data_state > editordata, QWidget *parent=nullptr, bool owned=false)
Protected Attributes inherited from dbe::widgets::editors::base
std::shared_ptr< editor_data_state > p_data_editor
QString this_defaults
QStringList this_data
bool this_is_owned
bool this_value_changed
bool this_initial_load

Detailed Description

Definition at line 366 of file BuildingBlockEditors.hpp.

Member Typedef Documentation

◆ t_build_block_editor

◆ t_virtue

Constructor & Destructor Documentation

◆ multiattr()

dbe::widgets::editors::multiattr::multiattr ( t_virtue const & attr,
QWidget * parent = nullptr,
bool owned = false,
bool readonly = false )

Frame

Frame

Definition at line 1921 of file BuildingBlockEditors.cpp.

1922 : base(std::make_shared<t_build_block_editor>(attr), parent, owned)
1923 , m_base_data_editor(std::static_pointer_cast<t_build_block_editor>(p_data_editor))
1924 , m_readonly(readonly)
1925 , StatusBar(nullptr)
1926 , OkButton(nullptr)
1927 , RemoveButton(nullptr)
1928 , ListWidget(nullptr)
1929 , ContextMenu(nullptr)
1930 , RemoveAction(nullptr)
1931{
1932 t_virtue const& Virtue = m_base_data_editor->get();
1933
1934 setWindowTitle(QString("Edit Attribute : %1").arg(Virtue.p_name.c_str()));
1935 QVBoxLayout* MainLayout = new QVBoxLayout(this);
1936 MainLayout->setSpacing(0);
1937 MainLayout->setMargin(0);
1938 MainLayout->setContentsMargins(0, 0, 0, 0);
1939 QHBoxLayout* ButtonLayout = new QHBoxLayout();
1940 ListWidget = new QListWidget(this);
1941 ListWidget->setContextMenuPolicy(Qt::CustomContextMenu);
1942 MainLayout->addWidget(ListWidget);
1943
1944 switch (Virtue.p_type) {
1945 // Bool and enums have the same widget
1946
1950 combo* Combo = new combo(attr, this);
1951 MainLayout->addWidget(Combo);
1952 connect(Combo->Combo,
1953 SIGNAL(activated(const QString&)),
1954 this,
1955 SLOT(AddToDataList(const QString&)),
1956 Qt::UniqueConnection);
1957 BaseWidget = Combo;
1958 Combo->setStyleSheet("QLineEdit { background: #c0c0c0;} "
1959 "QLineEdit:focus {background: white;}");
1960 break;
1961 }
1962
1963 // All numeric types are treated as uint64
1964
1975 numericattr* Numeric = new numericattr(Virtue, this);
1976 MainLayout->addWidget(Numeric);
1977 connect(Numeric, SIGNAL(signal_value_change()), this, SLOT(LineValueChanged()), Qt::UniqueConnection);
1978 connect(Numeric, SIGNAL(signal_value_duplicated()), this, SLOT(LineValueChanged()), Qt::UniqueConnection);
1979 BaseWidget = Numeric;
1981 Numeric->GetLineEdit()->setFrame(false);
1982 Numeric->GetLineEdit()->setReadOnly(m_readonly);
1983 Numeric->GetLineEdit()->setPlaceholderText(c_input_placeholder);
1984 Numeric->setStyleSheet("QLineEdit { background: #c0c0c0;} QLineEdit:focus {background: white;}");
1985 Numeric->GetLineEdit()->setFixedHeight(24);
1986 ListWidget->setFrameStyle(QFrame::NoFrame);
1987 break;
1988 }
1989
1990 // Types below are all treated as string types
1994 stringattr* String = new stringattr(Virtue, this);
1995 String->SetMultiCheck(true);
1996 MainLayout->addWidget(String);
1997 connect(String, SIGNAL(signal_value_change()), this, SLOT(LineValueChanged()), Qt::UniqueConnection);
2000 String->GetLineEdit()->setReadOnly(m_readonly);
2001 String->GetLineEdit()->setFrameStyle(QFrame::NoFrame);
2002 String->GetLineEdit()->setPlaceholderText(c_input_placeholder);
2003 String->setStyleSheet("QLineEdit { background: #c0c0c0;} "
2004 "QLineEdit:focus {background: white;}");
2005 // String->GetLineEdit()->setFixedHeight ( 24 );
2006
2007 ListWidget->setFrameStyle(QFrame::NoFrame);
2008 break;
2009 }
2010
2011 default:
2012 break;
2013 }
2014
2015 OkButton = new QPushButton(tr("Apply"));
2016 // RemoveButton = new QPushButton(tr("Remove"));
2017 ButtonLayout->addWidget(OkButton);
2018 // ButtonLayout->addWidget(RemoveButton);
2019 connect(OkButton, SIGNAL(clicked()), this, SLOT(EndSignal()));
2020 // connect(RemoveButton,SIGNAL(clicked()),this,SLOT(RemoveFromDataList()));
2021 connect(this, SIGNAL(signal_internal_value_change()), this, SLOT(UpdateActions()));
2022 connect(ListWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(CustomContextMenuRequested(QPoint)));
2023
2024 MainLayout->addLayout(ButtonLayout);
2025 SetStatusBar();
2026 MainLayout->addWidget(StatusBar);
2027
2028 setLayout(MainLayout);
2029
2030 if (Virtue.p_is_not_null) {
2031 m_base_data_editor->set_valid(false);
2032 OkButton->setDisabled(true);
2033 }
2034
2035 if (this_is_owned) {
2036 OkButton->setHidden(true);
2037 }
2038
2039 else {
2040 QFont Font;
2041 QFontMetrics FontMetrics(Font);
2042 setMinimumWidth(2 * FontMetrics.horizontalAdvance(QString("Edit Relationship: %1").arg(Virtue.p_name.c_str())) -
2043 15);
2044 setMinimumHeight(100);
2045 }
2046
2047 buildtooltip();
2048 UpdateActions();
2049}
base(std::shared_ptr< editor_data_state > editordata, QWidget *parent=nullptr, bool owned=false)
std::shared_ptr< editor_data_state > p_data_editor
combo(t_virtue const &attr, QWidget *parent=nullptr, bool owned=false, bool readonly=false)
void CustomContextMenuRequested(const QPoint &pos)
std::shared_ptr< t_build_block_editor > m_base_data_editor
dunedaq::conffwk::attribute_t t_virtue
numericattr(t_virtue const &attr, QWidget *parent=nullptr, bool owned=false, bool readonly=false)
stringattr(t_virtue const &attr, QWidget *parent=nullptr, bool owned=false, bool readonly=false)

Member Function Documentation

◆ AddToDataList

void dbe::widgets::editors::multiattr::AddToDataList ( const QString & Data)
privateslot

Definition at line 2117 of file BuildingBlockEditors.cpp.

2118{
2119 if (Data.isEmpty()) {
2120 return;
2121 }
2122
2123 this_data.append(Data);
2124
2125 ListWidget->clear();
2126 ListWidget->addItems(this_data);
2127 StatusBar->showMessage(QString("Item %1 was added.").arg(Data));
2128
2129 this_value_changed = true;
2131}
nlohmann::json Data
Definition Structs.hpp:24

◆ buildtooltip()

void dbe::widgets::editors::multiattr::buildtooltip ( )
privatevirtual

Implements dbe::widgets::editors::base.

Definition at line 2075 of file BuildingBlockEditors.cpp.

2076{
2077 t_virtue const& Virtue = m_base_data_editor->get();
2078
2079 setToolTip(
2080 QString("Attribute Name: %1 \n").arg(Virtue.p_name.c_str()) +
2081 QString(" Type: %1 \n").arg(dunedaq::conffwk::attribute_t::type2str(Virtue.p_type)) +
2082 QString(" Range: %1 \n").arg(Virtue.p_range.c_str()) +
2083 QString(" Format: %1 \n").arg(dunedaq::conffwk::attribute_t::format2str(Virtue.p_int_format)) +
2084 QString(" Not Null: %1 \n").arg(Virtue.p_is_not_null) +
2085 QString(" Is Multi Value: %1 \n").arg(Virtue.p_is_multi_value) +
2086 QString(" Default Value: %1 \n").arg(Virtue.p_default_value.c_str()) +
2087 QString(" Description: %1 \n").arg(Virtue.p_description.c_str()));
2088}
static const char * type2str(type_t type)
static const char * format2str(int_format_t format)

◆ closeEvent()

void dbe::widgets::editors::multiattr::closeEvent ( QCloseEvent * Event)
privatevirtual

Reimplemented from dbe::widgets::editors::base.

Definition at line 2091 of file BuildingBlockEditors.cpp.

2092{
2093 Q_UNUSED(Event)
2094 emit signal_force_close();
2095}

◆ CustomContextMenuRequested

void dbe::widgets::editors::multiattr::CustomContextMenuRequested ( const QPoint & pos)
privateslot

Definition at line 2256 of file BuildingBlockEditors.cpp.

2257{
2258 if (ContextMenu == nullptr) {
2259 ContextMenu = new QMenu(ListWidget);
2260
2261 RemoveAction = new QAction(tr("Remove"), this);
2262 RemoveAction->setShortcutContext(Qt::WidgetShortcut);
2263 connect(RemoveAction, SIGNAL(triggered()), this, SLOT(RemoveSlot()), Qt::UniqueConnection);
2264 ContextMenu->addAction(RemoveAction);
2265 }
2266
2267 ContextMenu->exec(ListWidget->mapToGlobal(pos));
2268}

◆ EndSignal

void dbe::widgets::editors::multiattr::EndSignal ( )
privateslot

Definition at line 2237 of file BuildingBlockEditors.cpp.

2238{
2239 this_data.clear();
2240
2241 for (int i = 0; i < ListWidget->count(); ++i) {
2242 this_data.append(ListWidget->item(i)->text());
2243 }
2244
2245 if (!this_is_owned) {
2246 m_base_data_editor->set_valid(true);
2247 emit signal_edit_end();
2248 }
2249
2250 else {
2251 emit signal_value_change();
2252 }
2253}

◆ eventFilter()

bool dbe::widgets::editors::multiattr::eventFilter ( QObject * Target,
QEvent * Event )
private

Definition at line 2109 of file BuildingBlockEditors.cpp.

2110{
2111 (void)Target;
2112 (void)Event;
2113 return false;
2114}

◆ LineValueChanged [1/2]

void dbe::widgets::editors::multiattr::LineValueChanged ( )
privateslot

Definition at line 2201 of file BuildingBlockEditors.cpp.

2202{
2203 QStringList Data = BaseWidget->getdata();
2204
2205 if ((!Data.isEmpty()) && BaseWidget->dataeditor()->is_valid()) {
2206 AddToDataList(Data.at(0));
2207 }
2208}

◆ LineValueChanged [2/2]

void dbe::widgets::editors::multiattr::LineValueChanged ( QListWidgetItem * p)
privateslot

Definition at line 2211 of file BuildingBlockEditors.cpp.

2212{
2213 int r = ListWidget->row(changed);
2214 QString newtext = changed->text();
2215 QString oldtext = this_data.at(r);
2216 this_data.replace(r, newtext);
2217 this_value_changed = true;
2218
2219 StatusBar->showMessage(QString("Item %1 was modified.").arg(oldtext));
2220
2222}
Changes could not be no object was changed

◆ ListOrderChange

void dbe::widgets::editors::multiattr::ListOrderChange ( const QModelIndexList & IndexList)
privateslot

Definition at line 2225 of file BuildingBlockEditors.cpp.

2226{
2227 Q_UNUSED(IndexList)
2228
2229 this_data.clear();
2230
2231 for (int i = 0; i < ListWidget->count(); ++i) {
2232 this_data.append(ListWidget->item(i)->text());
2233 }
2234}

◆ RemoveFromDataList

void dbe::widgets::editors::multiattr::RemoveFromDataList ( )
privateslot

Color management needs to be done

Definition at line 2134 of file BuildingBlockEditors.cpp.

2135{
2136 QList<QListWidgetItem*> widgets = ListWidget->selectedItems();
2137 this_value_changed = true;
2138
2139 for (QListWidgetItem* widget : widgets) {
2140 int index = this_data.indexOf(widget->text());
2141
2142 if (index != -1) {
2143 this_data.takeAt(index);
2144 }
2145
2146 int r = ListWidget->row(widget);
2147
2148 if (QListWidgetItem* w = ListWidget->takeItem(r)) {
2149 delete w;
2150 }
2151 }
2152
2153 if (this_is_owned) {
2154 StatusBar->showMessage("The selected items were removed.");
2155 }
2156
2157 if (dynamic_cast<stringattr*>(BaseWidget)) {
2159 stringattr* StringWidget = dynamic_cast<stringattr*>(BaseWidget);
2160 StringWidget->GetLineEdit()->selectAll();
2161 StringWidget->GetLineEdit()->clear();
2162 StringWidget->SetCheckDefaults(false);
2163 StringWidget->SetNullCheck(true);
2164 }
2165
2167 emit signal_value_change();
2168}

◆ RemoveSlot

void dbe::widgets::editors::multiattr::RemoveSlot ( )
privateslot

Definition at line 2271 of file BuildingBlockEditors.cpp.

◆ SetEditor()

void dbe::widgets::editors::multiattr::SetEditor ( )
overridevirtual

Implements dbe::widgets::editors::base.

Definition at line 2052 of file BuildingBlockEditors.cpp.

2053{
2055
2056 ListWidget->clear();
2057 ListWidget->addItems(this_data);
2058 ListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
2059 ListWidget->setDragEnabled(true);
2060 ListWidget->setAcceptDrops(true);
2061 ListWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
2062 ListWidget->setDragDropMode(QAbstractItemView::InternalMove);
2063
2064 for (int i = 0; i < ListWidget->count(); ++i) {
2065 QListWidgetItem* widget = ListWidget->item(i);
2066 widget->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled |
2067 Qt::ItemIsEnabled);
2068 }
2069
2070 connect(ListWidget, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(LineValueChanged(QListWidgetItem*)));
2072}
virtual void SetEditor()=0

◆ SetStatusBar()

void dbe::widgets::editors::multiattr::SetStatusBar ( )
private

Color Management needs to be done

Uncomment if you want a status bar

Definition at line 2098 of file BuildingBlockEditors.cpp.

2099{
2100 StatusBar = new QStatusBar(this);
2101 StatusBar->setSizeGripEnabled(false);
2103 StatusBar->setAutoFillBackground(true);
2105 StatusBar->setHidden(true);
2106}

◆ UpdateActions

void dbe::widgets::editors::multiattr::UpdateActions ( )
privateslot

EditString validator string

Null Check validator string

Definition at line 2171 of file BuildingBlockEditors.cpp.

2172{
2173 t_virtue const& Virtue = m_base_data_editor->get();
2174
2175 if (Virtue.p_is_not_null and this_data.size() == 0) {
2176 OkButton->setDisabled(true);
2177 StatusBar->showMessage("Attribute can not be null.");
2178 m_base_data_editor->set_valid(false);
2181 }
2182
2183 else if (Virtue.p_is_not_null and this_data.size() > 0) {
2185
2186 StatusBar->showMessage("Attribute is set.");
2187 ListWidget->setPalette(QApplication::palette(this));
2188 OkButton->setEnabled(true);
2189 m_base_data_editor->set_valid(true);
2190
2191 if (this_is_owned) {
2192 EndSignal();
2193 }
2194 } else if (not Virtue.p_is_not_null and this_is_owned) {
2195 m_base_data_editor->set_valid(true);
2196 EndSignal();
2197 }
2198}
static QPalette WarningStatusBarPallete

Member Data Documentation

◆ BaseWidget

base* dbe::widgets::editors::multiattr::BaseWidget
private

Definition at line 391 of file BuildingBlockEditors.hpp.

◆ ContextMenu

QMenu* dbe::widgets::editors::multiattr::ContextMenu
private

Definition at line 392 of file BuildingBlockEditors.hpp.

◆ ListWidget

QListWidget* dbe::widgets::editors::multiattr::ListWidget
private

Definition at line 390 of file BuildingBlockEditors.hpp.

◆ m_base_data_editor

std::shared_ptr<t_build_block_editor> dbe::widgets::editors::multiattr::m_base_data_editor
private

Definition at line 384 of file BuildingBlockEditors.hpp.

◆ m_readonly

bool dbe::widgets::editors::multiattr::m_readonly
private

Definition at line 386 of file BuildingBlockEditors.hpp.

◆ OkButton

QPushButton* dbe::widgets::editors::multiattr::OkButton
private

Definition at line 388 of file BuildingBlockEditors.hpp.

◆ RemoveAction

QAction* dbe::widgets::editors::multiattr::RemoveAction
private

Definition at line 393 of file BuildingBlockEditors.hpp.

◆ RemoveButton

QPushButton* dbe::widgets::editors::multiattr::RemoveButton
private

Definition at line 389 of file BuildingBlockEditors.hpp.

◆ StatusBar

QStatusBar* dbe::widgets::editors::multiattr::StatusBar
private

Definition at line 387 of file BuildingBlockEditors.hpp.


The documentation for this class was generated from the following files: