void VBoxGuestRAMSlider::init() { ulong fullSize = vboxGlobal().host().GetMemorySize(); CSystemProperties sys = vboxGlobal().virtualBox().GetSystemProperties(); mMinRAM = sys.GetMinGuestRAM(); mMaxRAM = RT_MIN (RT_ALIGN (fullSize, _1G / _1M), sys.GetMaxGuestRAM()); /* Come up with some nice round percent boundaries relative to * the system memory. A max of 75% on a 256GB config is ridiculous, * even on an 8GB rig reserving 2GB for the OS is way to conservative. * The max numbers can be estimated using the following program: * * double calcMaxPct(uint64_t cbRam) * { * double cbRamOverhead = cbRam * 0.0390625; // 160 bytes per page. * double cbRamForTheOS = RT_MAX(RT_MIN(_512M, cbRam * 0.25), _64M); * double OSPct = (cbRamOverhead + cbRamForTheOS) * 100.0 / cbRam; * double MaxPct = 100 - OSPct; * return MaxPct; * } * * int main() * { * uint64_t cbRam = _1G; * for (; !(cbRam >> 33); cbRam += _1G) * printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam), * (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20); * for (; !(cbRam >> 51); cbRam <<= 1) * printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam), * (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20); * return 0; * } * * Note. We might wanna put these calculations somewhere global later. */ /* System RAM amount test */ mMaxRAMAlw = (uint)(0.75 * fullSize); mMaxRAMOpt = (uint)(0.50 * fullSize); if (fullSize < 3072) /* done */; else if (fullSize < 4096) /* 3GB */ mMaxRAMAlw = (uint)(0.80 * fullSize); else if (fullSize < 6144) /* 4-5GB */ { mMaxRAMAlw = (uint)(0.84 * fullSize); mMaxRAMOpt = (uint)(0.60 * fullSize); } else if (fullSize < 8192) /* 6-7GB */ { mMaxRAMAlw = (uint)(0.88 * fullSize); mMaxRAMOpt = (uint)(0.65 * fullSize); } else if (fullSize < 16384) /* 8-15GB */ { mMaxRAMAlw = (uint)(0.90 * fullSize); mMaxRAMOpt = (uint)(0.70 * fullSize); } else if (fullSize < 32768) /* 16-31GB */ { mMaxRAMAlw = (uint)(0.93 * fullSize); mMaxRAMOpt = (uint)(0.75 * fullSize); } else if (fullSize < 65536) /* 32-63GB */ { mMaxRAMAlw = (uint)(0.94 * fullSize); mMaxRAMOpt = (uint)(0.80 * fullSize); } else if (fullSize < 131072) /* 64-127GB */ { mMaxRAMAlw = (uint)(0.95 * fullSize); mMaxRAMOpt = (uint)(0.85 * fullSize); } else /* 128GB- */ { mMaxRAMAlw = (uint)(0.96 * fullSize); mMaxRAMOpt = (uint)(0.90 * fullSize); } /* Now check the calculated maximums are out of the range for the guest * RAM. If so change it accordingly. */ mMaxRAMAlw = RT_MIN (mMaxRAMAlw, mMaxRAM); mMaxRAMOpt = RT_MIN (mMaxRAMOpt, mMaxRAM); setPageStep (calcPageStep (mMaxRAM)); setSingleStep (pageStep() / 4); setTickInterval (pageStep()); /* Setup the scale so that ticks are at page step boundaries */ setMinimum ((mMinRAM / pageStep()) * pageStep()); setMaximum (mMaxRAM); setSnappingEnabled (true); setOptimalHint (mMinRAM, mMaxRAMOpt); setWarningHint (mMaxRAMOpt, mMaxRAMAlw); setErrorHint (mMaxRAMAlw, mMaxRAM); }
DoubleEditor::DoubleEditor(QWidget* parent) : QDoubleSpinBox(parent) { setMinimum(-FLT_MAX); setMaximum(FLT_MAX); setSingleStep(0.01); }
int QAbstractSlider::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: sliderPressed(); break; case 2: sliderMoved((*reinterpret_cast< int(*)>(_a[1]))); break; case 3: sliderReleased(); break; case 4: rangeChanged((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 5: actionTriggered((*reinterpret_cast< int(*)>(_a[1]))); break; case 6: setValue((*reinterpret_cast< int(*)>(_a[1]))); break; case 7: setOrientation((*reinterpret_cast< Qt::Orientation(*)>(_a[1]))); break; } _id -= 8; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< int*>(_v) = minimum(); break; case 1: *reinterpret_cast< int*>(_v) = maximum(); break; case 2: *reinterpret_cast< int*>(_v) = singleStep(); break; case 3: *reinterpret_cast< int*>(_v) = pageStep(); break; case 4: *reinterpret_cast< int*>(_v) = value(); break; case 5: *reinterpret_cast< int*>(_v) = sliderPosition(); break; case 6: *reinterpret_cast< bool*>(_v) = hasTracking(); break; case 7: *reinterpret_cast< Qt::Orientation*>(_v) = orientation(); break; case 8: *reinterpret_cast< bool*>(_v) = invertedAppearance(); break; case 9: *reinterpret_cast< bool*>(_v) = invertedControls(); break; case 10: *reinterpret_cast< bool*>(_v) = isSliderDown(); break; } _id -= 11; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setMinimum(*reinterpret_cast< int*>(_v)); break; case 1: setMaximum(*reinterpret_cast< int*>(_v)); break; case 2: setSingleStep(*reinterpret_cast< int*>(_v)); break; case 3: setPageStep(*reinterpret_cast< int*>(_v)); break; case 4: setValue(*reinterpret_cast< int*>(_v)); break; case 5: setSliderPosition(*reinterpret_cast< int*>(_v)); break; case 6: setTracking(*reinterpret_cast< bool*>(_v)); break; case 7: setOrientation(*reinterpret_cast< Qt::Orientation*>(_v)); break; case 8: setInvertedAppearance(*reinterpret_cast< bool*>(_v)); break; case 9: setInvertedControls(*reinterpret_cast< bool*>(_v)); break; case 10: setSliderDown(*reinterpret_cast< bool*>(_v)); break; } _id -= 11; } else if (_c == QMetaObject::ResetProperty) { _id -= 11; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 11; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 11; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 11; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 11; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 11; } #endif // QT_NO_PROPERTIES return _id; }
/// <summary> /// Event filter for taking special action on double click events. /// </summary> /// <param name="o">The object</param> /// <param name="e">The eevent</param> /// <returns>false</returns> bool SpinBox::eventFilter(QObject* o, QEvent* e) { QMouseEvent* me = dynamic_cast<QMouseEvent*>(e); if (isEnabled() && me && me->type() == QMouseEvent::MouseButtonPress && me->button() == Qt::RightButton) { m_MouseDownPoint = m_MouseMovePoint = me->pos(); StartTimer(); //qDebug() << "Right mouse down"; // QPoint pt; // // if (QMouseEvent* me = (QMouseEvent*)e) // pt = me->localPos().toPoint(); // // int pos = lineEdit()->cursorPositionAt(pt); // // if (lineEdit()->selectedText() != "") // { // lineEdit()->deselect(); // lineEdit()->setCursorPosition(pos); // return true; // } // else if (m_Select) // { // lineEdit()->setCursorPosition(pos); // selectAll(); // m_Select = false; // return true; // } } else if (isEnabled() && me && me->type() == QMouseEvent::MouseButtonRelease && me->button() == Qt::RightButton) { StopTimer(); m_MouseDownPoint = m_MouseMovePoint = me->pos(); //qDebug() << "Right mouse up"; } else if (isEnabled() && me && me->type() == QMouseEvent::MouseMove && QGuiApplication::mouseButtons() & Qt::RightButton) { m_MouseMovePoint = me->pos(); qDebug() << "Mouse move while right down. Pt = " << me->pos() << ", global: " << mapToGlobal(me->pos()); } else if (m_DoubleClick && e->type() == QMouseEvent::MouseButtonDblClick && isEnabled()) { if (value() == 0) setValue(m_DoubleClickZero); else setValue(m_DoubleClickNonZero); } else { if (e->type() == QEvent::Wheel) { //Take special action for shift to reduce the scroll amount. Control already //increases it automatically. if (QWheelEvent* wev = dynamic_cast<QWheelEvent*>(e)) { Qt::KeyboardModifiers mod = wev->modifiers(); if (mod.testFlag(Qt::ShiftModifier)) setSingleStep(m_SmallStep); else setSingleStep(m_Step); } } } return QSpinBox::eventFilter(o, e); }
void GIntSpinBox::SetStep( double theStep ) { setSingleStep(theStep); }
bool ScrSpinBox::eventFilter( QObject* watched, QEvent* event ) { bool retval = false; /* Adding this to be sure that the IM* events are processed correctly i.e not intercepted by our KeyPress/Release handlers */ if (event->type() == QEvent::InputMethod) return QDoubleSpinBox::eventFilter(watched, event); /* if ( event->type() == QEvent::KeyPress ) { QKeyEvent* k = (QKeyEvent*)event; bool shiftB=k->modifiers() & Qt::ShiftModifier; bool controlB=k->modifiers() & Qt::ControlModifier; if (k->key() == Qt::Key_Shift && !controlB) { setSingleStep(0.1); retval = QWidget::event(event); } else if (k->key() == Qt::Key_Control && !shiftB) { setSingleStep(10.0); retval = QWidget::event(event); } else if ((k->key() == Qt::Key_Control && shiftB) || (k->key() == Qt::Key_Shift && controlB)) { qDebug("boo1"); setSingleStep(0.01); retval = QWidget::event(event); } else if ((k->key() == Qt::Key_Return) || (k->key() == Qt::Key_Enter) || (k->key() == Qt::Key_Tab)) { if (!m_tabAdvance) { // qDebug() << "eventFilter: interpretText"; QDoubleSpinBox::interpretText(); return true; } } } else if (event->type() == QEvent::KeyRelease ) { QKeyEvent* k = (QKeyEvent*)event; bool shiftB=k->modifiers() & Qt::ShiftModifier; bool controlB=k->modifiers() & Qt::ControlModifier; if ((k->key() == Qt::Key_Shift && !controlB) || (k->key() == Qt::Key_Control && !shiftB)) { setSingleStep(1.0); retval = QWidget::event(event); } else if (k->key() == Qt::Key_Shift && controlB) { setSingleStep(10.0); retval = QWidget::event(event); } else if (k->key() == Qt::Key_Control && shiftB) { setSingleStep(0.1); retval = QWidget::event(event); } } */ if ( event->type() == QEvent::Wheel ) { //If read only dont spin if (isReadOnly()) return false; QWheelEvent* k = (QWheelEvent*)event; bool shiftB=k->modifiers() & Qt::ShiftModifier; bool altB=k->modifiers() & Qt::AltModifier; if (shiftB && !altB) { setSingleStep(0.1); retval=QWidget::event(event); } else if (!shiftB && altB) { setSingleStep(10.0); retval=QWidget::event(event); } else if (shiftB && altB) { setSingleStep(0.01); retval=QWidget::event(event); } else if (!shiftB && !altB) { setSingleStep(1.0); retval=QWidget::event(event); } } else return QDoubleSpinBox::eventFilter(watched, event); return retval; }
SpinBox( int min, int max, int step, QWidget *parent ): QSpinBox( parent ) { setRange( min, max ); setSingleStep( step ); }
void QSliderSpinBox::SetChangeStep(double step) { setSingleStep(step); m_Slider->setSingleStep(step*m_Ratio); }
SeekSlider::SeekSlider( Qt::Orientation q, QWidget *_parent, bool _static ) : QSlider( q, _parent ), b_classic( _static ) { isSliding = false; f_buffering = 1.0; mHandleOpacity = 1.0; chapters = NULL; mHandleLength = -1; b_seekable = true; alternativeStyle = NULL; // prepare some static colors QPalette p = palette(); QColor background = p.color( QPalette::Active, QPalette::Window ); tickpointForeground = p.color( QPalette::Active, QPalette::WindowText ); tickpointForeground.setHsv( tickpointForeground.hue(), ( background.saturation() + tickpointForeground.saturation() ) / 2, ( background.value() + tickpointForeground.value() ) / 2 ); // set the background color and gradient QColor backgroundBase( p.window().color() ); backgroundGradient.setColorAt( 0.0, backgroundBase.darker( 140 ) ); backgroundGradient.setColorAt( 1.0, backgroundBase ); // set the foreground color and gradient QColor foregroundBase( 50, 156, 255 ); foregroundGradient.setColorAt( 0.0, foregroundBase ); foregroundGradient.setColorAt( 1.0, foregroundBase.darker( 140 ) ); // prepare the handle's gradient handleGradient.setColorAt( 0.0, p.window().color().lighter( 120 ) ); handleGradient.setColorAt( 0.9, p.window().color().darker( 120 ) ); // prepare the handle's shadow gradient QColor shadowBase = p.shadow().color(); if( shadowBase.lightness() > 100 ) shadowBase = QColor( 60, 60, 60 ); // Palette's shadow is too bright shadowDark = shadowBase.darker( 150 ); shadowLight = shadowBase.lighter( 180 ); shadowLight.setAlpha( 50 ); /* Timer used to fire intermediate updatePos() when sliding */ seekLimitTimer = new QTimer( this ); seekLimitTimer->setSingleShot( true ); /* Tooltip bubble */ mTimeTooltip = new TimeTooltip( this ); mTimeTooltip->setMouseTracking( true ); /* Properties */ setRange( MINIMUM, MAXIMUM ); setSingleStep( 2 ); setPageStep( 10 ); setMouseTracking( true ); setTracking( true ); setFocusPolicy( Qt::NoFocus ); /* Use the new/classic style */ if( !b_classic ) { alternativeStyle = new SeekStyle; setStyle( alternativeStyle ); } /* Init to 0 */ setPosition( -1.0, 0, 0 ); secstotimestr( psz_length, 0 ); animHandle = new QPropertyAnimation( this, "handleOpacity", this ); animHandle->setDuration( FADEDURATION ); animHandle->setStartValue( 0.0 ); animHandle->setEndValue( 1.0 ); hideHandleTimer = new QTimer( this ); hideHandleTimer->setSingleShot( true ); hideHandleTimer->setInterval( FADEOUTDELAY ); CONNECT( this, sliderMoved( int ), this, startSeekTimer() ); CONNECT( seekLimitTimer, timeout(), this, updatePos() ); CONNECT( hideHandleTimer, timeout(), this, hideHandle() ); mTimeTooltip->installEventFilter( this ); }