floatimageobj.cpp
author insilmaril
Tue, 09 Dec 2008 16:44:46 +0000
branchrelease-1-12-maintained
changeset 56 39b806972b03
parent 0 7a96bd401351
child 2 608f976aa7bb
child 104 270593ab83b2
permissions -rw-r--r--
Bugfix for still visible images in scrolled branches
insilmaril@0
     1
#include "floatimageobj.h"
insilmaril@0
     2
#include "branchobj.h"
insilmaril@0
     3
#include <math.h>
insilmaril@0
     4
insilmaril@0
     5
insilmaril@0
     6
/////////////////////////////////////////////////////////////////
insilmaril@0
     7
// FloatImageObj
insilmaril@0
     8
/////////////////////////////////////////////////////////////////
insilmaril@0
     9
insilmaril@0
    10
int FloatImageObj::counter=0;		// make instance 
insilmaril@0
    11
insilmaril@0
    12
insilmaril@0
    13
FloatImageObj::FloatImageObj ():FloatObj()
insilmaril@0
    14
{
insilmaril@0
    15
//    cout << "Const FloatImageObj ()\n";
insilmaril@0
    16
    setParObj (this);	
insilmaril@0
    17
    init();
insilmaril@0
    18
    depth=-1;
insilmaril@0
    19
}
insilmaril@0
    20
insilmaril@0
    21
FloatImageObj::FloatImageObj (QCanvas* c):FloatObj(c)
insilmaril@0
    22
{
insilmaril@0
    23
 //   cout << "Const FloatImageObj (c)  called from MapCenterObj (c)\n";
insilmaril@0
    24
    setParObj (this);	
insilmaril@0
    25
    init();
insilmaril@0
    26
    depth=-1;
insilmaril@0
    27
}
insilmaril@0
    28
insilmaril@0
    29
FloatImageObj::FloatImageObj (QCanvas* c, LinkableMapObj* p):FloatObj(c,p)
insilmaril@0
    30
{
insilmaril@0
    31
 //   cout << "Const FloatImageObj (c,p)\n";
insilmaril@0
    32
    init();
insilmaril@0
    33
}
insilmaril@0
    34
insilmaril@0
    35
FloatImageObj::~FloatImageObj ()
insilmaril@0
    36
{
insilmaril@0
    37
//	cout << "Destr FloatImageObj "<<this<<"\n";
insilmaril@0
    38
	delete(icon);
insilmaril@0
    39
}
insilmaril@0
    40
insilmaril@0
    41
void FloatImageObj::init () 
insilmaril@0
    42
{
insilmaril@0
    43
	icon=new ImageObj (canvas);
insilmaril@0
    44
	icon->move (absPos.x(), absPos.y() );
insilmaril@0
    45
	icon->setVisibility (true);
insilmaril@0
    46
	bbox.setSize (QSize(icon->size().width(), icon->size().height()));
insilmaril@0
    47
	filename="";
insilmaril@0
    48
	originalFilename="no original name available";
insilmaril@0
    49
	filetype="";
insilmaril@0
    50
	saveInMap=true;
insilmaril@0
    51
}
insilmaril@0
    52
insilmaril@0
    53
void FloatImageObj::copy (FloatImageObj* other)
insilmaril@0
    54
{					
insilmaril@0
    55
	FloatObj::copy (other);
insilmaril@0
    56
	icon->copy (other->icon);
insilmaril@0
    57
	filename=other->filename;
insilmaril@0
    58
	saveInMap=other->saveInMap;
insilmaril@0
    59
    positionBBox();
insilmaril@0
    60
}
insilmaril@0
    61
insilmaril@0
    62
void FloatImageObj::setZ (const int &i)
insilmaril@0
    63
{
insilmaril@0
    64
	icon->setZ (i);
insilmaril@0
    65
	zPlane=i;
insilmaril@0
    66
}
insilmaril@0
    67
insilmaril@0
    68
int FloatImageObj::z ()
insilmaril@0
    69
{
insilmaril@0
    70
	return lrint (icon->z());
insilmaril@0
    71
}
insilmaril@0
    72
insilmaril@0
    73
bool FloatImageObj::load (const QString &fn)
insilmaril@0
    74
{	
insilmaril@0
    75
	if( icon->load (fn))
insilmaril@0
    76
	{
insilmaril@0
    77
		bbox.setSize (QSize(icon->size().width()+8, icon->size().height()+8));
insilmaril@0
    78
		positionBBox();
insilmaril@0
    79
		filename=fn;
insilmaril@0
    80
		filetype=QPixmap::imageFormat (fn);
insilmaril@0
    81
		return true;
insilmaril@0
    82
	} else
insilmaril@0
    83
		return false;
insilmaril@0
    84
	
insilmaril@0
    85
}
insilmaril@0
    86
insilmaril@0
    87
void FloatImageObj::save (const QString &fn, const char *format)
insilmaril@0
    88
{	
insilmaril@0
    89
	icon->save (fn,format);
insilmaril@0
    90
}
insilmaril@0
    91
insilmaril@0
    92
void FloatImageObj::setOriginalFilename(const QString & fn)
insilmaril@0
    93
{
insilmaril@0
    94
	originalFilename=fn;
insilmaril@0
    95
}
insilmaril@0
    96
insilmaril@0
    97
QString FloatImageObj::getOriginalFilename()
insilmaril@0
    98
{
insilmaril@0
    99
	return originalFilename;
insilmaril@0
   100
}
insilmaril@0
   101
insilmaril@0
   102
void FloatImageObj::setVisibility(bool v)
insilmaril@0
   103
{
insilmaril@0
   104
    LinkableMapObj::setVisibility(v);
insilmaril@0
   105
	if (v)
insilmaril@0
   106
	    icon->setVisibility(true);
insilmaril@0
   107
	else
insilmaril@0
   108
	    icon->setVisibility(false);
insilmaril@0
   109
}
insilmaril@0
   110
insilmaril@0
   111
void FloatImageObj::move (double x, double y)
insilmaril@0
   112
{
insilmaril@0
   113
	FloatObj::move(x,y);
insilmaril@0
   114
	icon->move (x+4,y+4);
insilmaril@0
   115
    positionBBox();
insilmaril@0
   116
}
insilmaril@0
   117
insilmaril@0
   118
void FloatImageObj::move (QPoint p)
insilmaril@0
   119
{
insilmaril@0
   120
	move (p.x(), p.y());
insilmaril@0
   121
}
insilmaril@0
   122
insilmaril@0
   123
void FloatImageObj::positionBBox()
insilmaril@0
   124
{
insilmaril@0
   125
	// TODO
insilmaril@0
   126
}
insilmaril@0
   127
insilmaril@0
   128
void FloatImageObj::calcBBoxSize()
insilmaril@0
   129
{
insilmaril@0
   130
	// TODO
insilmaril@0
   131
}
insilmaril@0
   132
insilmaril@0
   133
QString FloatImageObj::saveToDir (const QString &tmpdir,const QString &prefix)
insilmaril@0
   134
{
insilmaril@0
   135
	counter++;
insilmaril@0
   136
insilmaril@0
   137
	QString posAttr=
insilmaril@0
   138
		attribut("relPosX",QString().setNum(relPos.x(),10)) +
insilmaril@0
   139
		attribut("relPosY",QString().setNum(relPos.y(),10)); 
insilmaril@0
   140
insilmaril@0
   141
	QString useOrientAttr;
insilmaril@0
   142
	if (useOrientation)
insilmaril@0
   143
		useOrientAttr=attribut ("useOrientation","true");
insilmaril@0
   144
	else	
insilmaril@0
   145
		useOrientAttr=attribut ("useOrientation","false");
insilmaril@0
   146
		
insilmaril@0
   147
	QString saveInMapAttr;
insilmaril@0
   148
	if (saveInMap)
insilmaril@0
   149
		saveInMapAttr=attribut ("saveInMap","true");
insilmaril@0
   150
	else	
insilmaril@0
   151
		
insilmaril@0
   152
		saveInMapAttr=attribut ("saveInMap","false");
insilmaril@0
   153
insilmaril@0
   154
	QString exportAttr;
insilmaril@0
   155
	if (floatExport)
insilmaril@0
   156
		exportAttr=attribut ("floatExport","true");
insilmaril@0
   157
	else	
insilmaril@0
   158
		exportAttr=attribut ("floatExport","false");
insilmaril@0
   159
insilmaril@0
   160
	QString zAttr=attribut ("zPlane",QString().setNum(zPlane));
insilmaril@0
   161
	QString url;
insilmaril@0
   162
insilmaril@0
   163
	// prevent saving as GIF
insilmaril@0
   164
	if (filetype=="GIF")
insilmaril@0
   165
		filetype="PNG";
insilmaril@0
   166
		
insilmaril@0
   167
	url="images/"+prefix+"image-" + QString().number(counter,10) + "." +filetype;
insilmaril@0
   168
insilmaril@0
   169
	// And really save the image
insilmaril@0
   170
	icon->save (tmpdir + "/" + url, filetype);
insilmaril@0
   171
insilmaril@0
   172
    return singleElement ("floatimage",  
insilmaril@0
   173
		posAttr + 
insilmaril@0
   174
		useOrientAttr + 
insilmaril@0
   175
		saveInMapAttr + 
insilmaril@0
   176
		exportAttr + 
insilmaril@0
   177
		zAttr + 
insilmaril@0
   178
		attribut ("href",QString ("file:")+url)
insilmaril@0
   179
	);	
insilmaril@0
   180
}
insilmaril@0
   181
insilmaril@0
   182
void FloatImageObj::resetSaveCounter()
insilmaril@0
   183
{
insilmaril@0
   184
	counter=0;
insilmaril@0
   185
}
insilmaril@0
   186
insilmaril@0
   187
insilmaril@0
   188
QRect FloatImageObj::getTotalBBox()
insilmaril@0
   189
{
insilmaril@0
   190
	return bbox;
insilmaril@0
   191
}
insilmaril@0
   192
insilmaril@0
   193
QRect FloatImageObj::getBBoxSizeWithChilds()
insilmaril@0
   194
{
insilmaril@0
   195
	//FIXME  abstract in linkablemapobj.h, not calculated
insilmaril@0
   196
	return bboxTotal;
insilmaril@0
   197
}
insilmaril@0
   198
insilmaril@0
   199
void FloatImageObj::calcBBoxSizeWithChilds()
insilmaril@0
   200
{
insilmaril@0
   201
	//FIXME  abstract in linkablemapobj.h
insilmaril@0
   202
}
insilmaril@0
   203
insilmaril@0
   204
QString FloatImageObj::getSelectString()
insilmaril@0
   205
{
insilmaril@0
   206
	QString s;
insilmaril@0
   207
	if (parObj)
insilmaril@0
   208
	{
insilmaril@0
   209
		if (parObj->getDepth()==0)
insilmaril@0
   210
			s= "fi:" + QString("%1").arg( ((BranchObj*)(parObj))->getFloatImageNum(this));
insilmaril@0
   211
		else	
insilmaril@0
   212
			s= ((BranchObj*)(parObj))->getSelectString() + ",fi:" + QString("%1").arg( ((BranchObj*)(parObj))->getFloatImageNum(this));
insilmaril@0
   213
	} else
insilmaril@0
   214
		s="mc:";
insilmaril@0
   215
	
insilmaril@0
   216
	return s;
insilmaril@0
   217
insilmaril@0
   218
}
insilmaril@0
   219