/*
* PDFedit - free program for PDF document manipulation.
* Copyright (C) 2006, 2007 PDFedit team: Michal Hocko,
* Miroslav Jahoda,
* Jozef Misutka,
* Martin Petricek
*
* Project is hosted on http://sourceforge.net/projects/pdfedit
*/
/** @file
Property - abstract class for widget containing one editable property
Should be subclassed for editing specific property types (integer, string, ...)
@author Martin Petricek
*/
#include "property.h"
#include "qtcompat.h"
#include
#include
#include
#include "util.h"
#include
namespace gui {
using namespace util;
/**
Default constructor of property item
@param parent parent Property Editor containing this control
@param _name name of this property
@param _flags flags of this property items (default 0)
*/
Property::Property(const QString &_name/*=0*/,QWidget *parent/*=0*/, PropertyFlags _flags/*=defaultPropertyMode*/)
: QWidget (parent){
name=_name;
changed=false;
effectiveReadonly=hidden=readonly=false;
setFlags(_flags);
}
/**
Return name of this property
@return Property name
*/
QString Property::getName() {
return name;
}
/**
Modify the widget color according to widget flags
Best results are with themes in which the widget is "white or at least light color"
@param widget Widget to modify its color
*/
void Property::modifyColor(QWidget* widget) {
switch (flags) {
case mdNormal:
//No color modification
return;
case mdHidden:
//Shift to blue fg
colorMod(widget,QColor(0,0,255),0.4,QColor(0,0,0),0.0);
return;
case mdAdvanced:
//Shift to reddish fg/bg
colorMod(widget,QColor(255,64,64),0.3,QColor(255,64,64),0.3);
return;
case mdReadOnly:
//Shift to gray fg/bg
colorMod(widget,QColor(128,128,128),0.3,QColor(128,128,128),0.3);
return;
case mdUnknown:
//No color modification
return;
}
}
/**
Initialize label belonging to this property.
Called after setting text to the label.
Guaranteed to be called before override.
Property may change the label test, style or colors.
@param widget Property's label
*/
void Property::initLabel(QLabel *widget) {
guiPrintDbg(debug::DBG_DBG,"Property " << Q_OUT(widget->text()) << " " << Q_OUT(modeName(flags)));
propertyLabel=widget;
switch (flags) {
case mdNormal:
//No color modification
return;
case mdReadOnly:
//Shift to gray foreground
colorMod(widget,QColor(128,128,128),0.4,QColor(0,0,0),0);
return;
case mdAdvanced:
//Shift to gray foreground, blue background
colorMod(widget,QColor(128,128,128),0.4,QColor(0,0,255),0.14);
return;
case mdHidden:
//Shift to blue background
colorMod(widget,QColor(0,0,0),0,QColor(0,0,255),0.14);
return;
case mdUnknown:
//Shift to light green foreground
colorMod(widget,QColor(128,255,128),0.4,QColor(0,0,0),0.0);
return;
}
}
/**
Apply overrides bypassing limitation set by modecontroller.
@param showHidden Show hidden properties
@param editReadOnly Edit read-only properties
*/
void Property::override(bool showHidden,bool editReadOnly) {
bool effectiveHidden=hidden && !showHidden;
applyHidden(effectiveHidden);
effectiveReadonly=readonly && !editReadOnly;
applyReadOnly(effectiveReadonly);
}
/**
Apply "hidden" flag to property, thus showing or hiding it
@param hideThis New hidden flag value
*/
void Property::applyHidden(bool hideThis) {
assert(dynamic_cast(propertyLabel));
guiPrintDbg(debug::DBG_DBG,"Hide/show >> " << hideThis << " ?? " << Q_OUT(dynamic_cast(propertyLabel)->text()));
if (hideThis) {
propertyLabel->hide();
this->hide();
} else {
propertyLabel->show();
this->show();
}
}
/**
Check if this property is hidden
@return true if hidden
*/
bool Property::isHidden() {
return hidden;
}
/**
Return flags of this property
@return Property flags
*/
PropertyFlags Property::getFlags() {
return flags;
}
/**
Set flags of this property
@param flag New value for property flags
*/
void Property::setFlags(PropertyFlags flag) {
flags=flag;
readonly=(flags==mdReadOnly || flags==mdAdvanced);
hidden= (flags==mdHidden || flags==mdAdvanced);
}
/**
Event handler for mouse cursor entering widget.
@param e Event
*/
void Property::enterEvent(QEvent *e) {
emit infoText(modeName(flags));
QWidget::enterEvent(e);
}
/**
Event handler for mouse cursor leaving widget.
@param e Event
*/
void Property::leaveEvent(QEvent *e) {
emit infoText(QString::null);
QWidget::leaveEvent(e);
}
/**
For given properyy mode return its localized description
@param flag Mode
@return description
*/
QString Property::modeName(PropertyFlags flag) {
if (flag==mdReadOnly) return tr("Read only");
if (flag==mdAdvanced) return tr("Advanced");
if (flag==mdHidden) return tr("Hidden");
if (flag==mdUnknown) return tr("Unknown");
if (flag==mdNormal) return tr("Normal");
assert(0);
return "?";
}
/** default destructor */
Property::~Property() {
//Nothing to do here
}
/**
Emit signal indicating change of the property and set state
of property to 'changed'
*/
void Property::emitChanged() {
emit propertyChanged(this);
guiPrintDbg(debug::DBG_DBG,"Property was edited: " << Q_OUT(name));
changed=true;
}
} // namespace gui