• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • controllers
  • view
  • structures
  • datatypes
  • primitive
  • bitfield
signedbitfielddatainformation.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of the Okteta Kasten Framework, made within the KDE community.
3  *
4  * Copyright 2010 Alex Richardson <alex.richardson@gmx.de>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) version 3, or any
10  * later version accepted by the membership of KDE e.V. (or its
11  * successor approved by the membership of KDE e.V.), which shall
12  * act as a proxy defined in Section 6 of version 3 of the license.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
21  */
22 #include "signedbitfielddatainformation.h"
23 
24 #include <QScriptValue>
25 
26 #include "../poddecoder/typeeditors/sintspinbox.h"
27 #include "../sintdatainformation.h"
28 
29 
30 QString SignedBitfieldDataInformation::valueStringImpl() const
31 {
32  Q_ASSERT(mWasAbleToRead);
33  return SIntDataInformationMethods<qint64>::staticValueString(mValue.value<qint64>());
34 }
35 
36 QWidget* SignedBitfieldDataInformation::createEditWidget(QWidget* parent) const
37 {
38  SIntSpinBox* ret = new SIntSpinBox(parent);
39  ret->setBase(Kasten2::StructViewPreferences::signedDisplayBase());
40  ret->setRange(~mask(), mask() >> 1); //mask is unsigned, so shift will do the right thing
41  return ret;
42 }
43 
44 QVariant SignedBitfieldDataInformation::dataFromWidget(const QWidget* w) const
45 {
46  const SIntSpinBox* spin = dynamic_cast<const SIntSpinBox*> (w);
47  if (spin)
48  return spin->value();
49  else
50  return QVariant();
51 }
52 
53 void SignedBitfieldDataInformation::setWidgetData(QWidget* w) const
54 {
55  SIntSpinBox* spin = dynamic_cast<SIntSpinBox*> (w);
56  if (spin)
57  spin->setValue(mValue.value<qint64>());
58 }
59 
60 QScriptValue SignedBitfieldDataInformation::valueAsQScriptValue() const
61 {
62  if (width() <= 32)
63  return qint32(mValue.value<qint32>()); //32 bit or less -> can be put in as value
64  else //have to save it as string since 64 bit values are not supported
65  return QString::number(mValue.value<qint64>());
66 }
67 
68 void SignedBitfieldDataInformation::setValue(AllPrimitiveTypes newVal)
69 {
70  //check that values are not too large
71  Q_ASSERT((newVal.value<qint64>() < 0 && (newVal.value<qint64>() | ~mask()) == newVal.value<quint64>())
72  || (newVal.value<quint64>() & mask()) == newVal.value<quint64>());
73  mValue = newVal.value<quint64>() & mask();
74  //check if MSB is set -> negative -> sign extend
75  if (newVal.value<quint64>() & (quint64(1) << (width() - 1))) {
76  mValue = mValue.value<quint64>() | (~mask());
77  }
78 }
79 
80 AllPrimitiveTypes SignedBitfieldDataInformation::fromVariant(const QVariant& variant, bool* ok) const
81 {
82  return AllPrimitiveTypes(variant.toLongLong(ok));
83 }
SIntSpinBox::value
qint64 value() const
Definition: sintspinbox.h:78
AbstractBitfieldDataInformation::width
BitCount32 width() const
Definition: abstractbitfielddatainformation.h:86
signedbitfielddatainformation.h
SIntSpinBox::setRange
void setRange(qint64 minimum, qint64 maximum)
Definition: sintspinbox.h:95
QWidget
SIntDataInformationMethods::staticValueString
static QString staticValueString(T val, int base=Kasten2::StructViewPreferences::signedDisplayBase())
Definition: sintdatainformation.cpp:31
SIntSpinBox
Definition: sintspinbox.h:32
SignedBitfieldDataInformation::createEditWidget
virtual QWidget * createEditWidget(QWidget *parent) const
create a QWidget for the QItemDelegate
Definition: signedbitfielddatainformation.cpp:36
DataInformation::mWasAbleToRead
bool mWasAbleToRead
Definition: datainformation.h:243
SIntSpinBox::setBase
void setBase(int base)
Definition: sintspinbox.h:114
SignedBitfieldDataInformation::setWidgetData
virtual void setWidgetData(QWidget *w) const
initialize the delegate widget with the correct data
Definition: signedbitfielddatainformation.cpp:53
Kasten2::StructViewPreferences::signedDisplayBase
static int signedDisplayBase()
Get SignedDisplayBase.
Definition: structviewpreferences.h:61
SignedBitfieldDataInformation::dataFromWidget
virtual QVariant dataFromWidget(const QWidget *w) const
get the needed data from the widget
Definition: signedbitfielddatainformation.cpp:44
SIntSpinBox::setValue
void setValue(qint64 value)
Definition: sintspinbox.h:80
AllPrimitiveTypes::value
T value() const
AbstractBitfieldDataInformation::mask
quint64 mask() const
Definition: abstractbitfielddatainformation.h:67
AllPrimitiveTypes
This union holds the value of one primitive datatype.
Definition: allprimitivetypes.h:70
AbstractBitfieldDataInformation::mValue
AllPrimitiveTypes mValue
Definition: abstractbitfielddatainformation.h:55
SignedBitfieldDataInformation::setValue
virtual void setValue(AllPrimitiveTypes newVal)
sign extend the value if it is negative, so it can always be treated as a plain qint64 ...
Definition: signedbitfielddatainformation.cpp:68
SignedBitfieldDataInformation::valueAsQScriptValue
virtual QScriptValue valueAsQScriptValue() const
Definition: signedbitfielddatainformation.cpp:60
SignedBitfieldDataInformation::fromVariant
virtual AllPrimitiveTypes fromVariant(const QVariant &variant, bool *ok) const
Definition: signedbitfielddatainformation.cpp:80
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:09 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal