qtvplugin_geomarker_uimethods.cpp 28.1 KB
Newer Older
1 2 3 4 5
#include "qtvplugin_geomarker.h"
#include "ui_qtvplugin_geomarker.h"
#include <QSettings>
#include <QColorDialog>
#include <QSet>
6 7 8
#include <QMap>
#include <QRegExp>
#include <QDebug>
9 10
#include <QFileDialog>
#include <QMessageBox>
11 12
#include "geographicsellipseitem.h"
#include "geographicsrectitem.h"
13 14
#include "geographicslineitem.h"
#include "geographicspolygonitem.h"
15
#include "geographicsmultilineitem.h"
16
#include "dialogselecticon.h"
17 18 19 20 21 22 23

void		qtvplugin_geomarker::timerEvent(QTimerEvent * e)
{
	if (e->timerId()==m_nTimerID_refreshUI && m_bNeedRefresh)
	{
		killTimer(m_nTimerID_refreshUI);
		m_nTimerID_refreshUI = -1;
24 25 26
		if (m_items_to_insert.empty()==true)
		{
			m_items_to_insert = m_pScene->geo_item_names();
27
			m_pGeoItemModel->removeRows(0,m_pGeoItemModel->rowCount());
28
		}
29
		//refersh
30 31 32
		int ct = 0;
		//we do not use geoItemsBase pointer, because a geoItemsBase pointer may be invalid when delayed ipdate approach is taking place.
		while (++ct < 2048 && m_items_to_insert.empty()==false)
33
		{
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
			QString keyname = m_items_to_insert.first();
			m_items_to_insert.pop_front();
			QTVP_GEOMARKER::geoItemBase * item = m_pScene->geoitem_by_name(keyname);
			if (!item)
				continue;
			int c = m_pGeoItemModel->rowCount();
			m_pGeoItemModel->appendRow(new QStandardItem(item->item_name()));
			m_pGeoItemModel->setData(
						m_pGeoItemModel->index(c,1),
						QTVP_GEOMARKER::item_name_by_enum(item->item_type())
						);
			m_pGeoItemModel->setData(
						m_pGeoItemModel->index(c,2),
						item->prop_counts()
						);
49 50

		}
51 52 53
		if (m_items_to_insert.empty()==true)
			m_bNeedRefresh = false;
		m_nTimerID_refreshUI = startTimer(217);
54
	}
丁劲犇's avatar
丁劲犇 已提交
55 56 57 58 59 60
	else if (m_nTimerID_refreshMap==e->timerId() && m_bNeedUpdateView==true)
	{
		m_bNeedUpdateView = false;
		killTimer(m_nTimerID_refreshMap);
		m_nTimerID_refreshMap = -1;
		m_pVi->UpdateWindow();
61
		m_nTimerID_refreshMap = startTimer(97);
丁劲犇's avatar
丁劲犇 已提交
62
	}
63
	else if (m_nTimerID_levelQueue == e->timerId())
丁劲犇's avatar
丁劲犇 已提交
64
	{
65
		killTimer(m_nTimerID_levelQueue);
66
		++m_nDivideTimer;
67
		if (true==m_pScene->deal_level_queue())
68 69
			m_pVi->UpdateWindow();
		else if (m_nDivideTimer % 20 == 0)
丁劲犇's avatar
丁劲犇 已提交
70 71
		{
			if (m_pScene->progress_queue()<0.999)
72
				m_pVi->UpdateWindow();
丁劲犇's avatar
丁劲犇 已提交
73
		}
74
		m_nTimerID_levelQueue = startTimer(119);
丁劲犇's avatar
丁劲犇 已提交
75
	}
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
}




void qtvplugin_geomarker::on_radioButton_tool_point_toggled(bool b)
{
	if (b) ui->stackedWidget_marks->setCurrentIndex(0);
}

void qtvplugin_geomarker::on_radioButton_tool_line_toggled(bool b )
{
	if (b) ui->stackedWidget_marks->setCurrentIndex(1);
}

void qtvplugin_geomarker::on_radioButton_tool_polygon_toggled(bool b)
{
	if (b) ui->stackedWidget_marks->setCurrentIndex(2);
}
95
void qtvplugin_geomarker::on_radioButton_tool_icons_toggled(bool b )
96 97 98
{
	if (b) ui->stackedWidget_marks->setCurrentIndex(3);
}
99

丁劲犇's avatar
丁劲犇 已提交
100
void qtvplugin_geomarker::on_toolButton_selColorPen_clicked()
101
{
丁劲犇's avatar
丁劲犇 已提交
102
	QString str = ui->lineEdit_PenColor->text();
103 104 105

	QColor col = QColorDialog::getColor(string2color(str),this,tr("Select Color"),QColorDialog::ShowAlphaChannel|QColorDialog::DontUseNativeDialog);
	if (col.isValid())
丁劲犇's avatar
丁劲犇 已提交
106
		ui->lineEdit_PenColor->setText(color2string(col));
107
}
丁劲犇's avatar
丁劲犇 已提交
108
void qtvplugin_geomarker::on_toolButton_selColorFill_clicked()
109
{
丁劲犇's avatar
丁劲犇 已提交
110
	QString str = ui->lineEdit_FillColor->text();
111 112 113

	QColor col = QColorDialog::getColor(string2color(str),this,tr("Select Color"),QColorDialog::ShowAlphaChannel|QColorDialog::DontUseNativeDialog);
	if (col.isValid())
丁劲犇's avatar
丁劲犇 已提交
114
		ui->lineEdit_FillColor->setText(color2string(col));
115
}
116 117 118
void qtvplugin_geomarker::on_toolButton_selColorText_clicked()
{
	QString str = ui->lineEdit_TextColor->text();
119

120 121 122 123
	QColor col = QColorDialog::getColor(string2color(str),this,tr("Select Color"),QColorDialog::ShowAlphaChannel|QColorDialog::DontUseNativeDialog);
	if (col.isValid())
		ui->lineEdit_TextColor->setText(color2string(col));
}
124 125 126 127 128 129 130 131 132 133 134 135 136
void qtvplugin_geomarker::on_pushButton_pickToLine1_clicked()
{
	ui->lineEdit_lineLat1->setText(ui->lineEdit_point_lat->text());
	ui->lineEdit_lineLon1->setText(ui->lineEdit_point_lon->text());
}

void qtvplugin_geomarker::on_pushButton_pickToLine2_clicked()
{
	ui->lineEdit_lineLat2->setText(ui->lineEdit_point_lat->text());
	ui->lineEdit_lineLon2->setText(ui->lineEdit_point_lon->text());
}


137
void qtvplugin_geomarker::ini_save()
138
{
139
	QSettings settings(ini_file(),QSettings::IniFormat);
140 141 142
	int radioButton_tool_point = 0;
	if (ui->radioButton_tool_line->isChecked()==true) radioButton_tool_point = 1;
	else if (ui->radioButton_tool_polygon->isChecked()==true) radioButton_tool_point = 2;
143
	else if (ui->radioButton_tool_icons->isChecked()==true) radioButton_tool_point = 3;
144 145 146 147 148 149 150 151 152
	else radioButton_tool_point = 0;
	settings.setValue("ui/radioButton_tool_point",radioButton_tool_point);

	settings.setValue("ui/lineEdit_currentID",ui->lineEdit_currentID->text());

	settings.setValue("ui/lineEdit_point_lat",ui->lineEdit_point_lat->text());
	settings.setValue("ui/lineEdit_point_lon",ui->lineEdit_point_lon->text());
	settings.setValue("ui/spinBox_point_width",ui->spinBox_point_width->value());
	settings.setValue("ui/spinBox_point_size_height",ui->spinBox_point_size_height->value());
丁劲犇's avatar
丁劲犇 已提交
153

154 155 156 157 158 159

	int radioButton_PointRect = 0;
	if (ui->radioButton_PointRound->isChecked()==true) radioButton_PointRect = 1;
	else radioButton_PointRect = 0;
	settings.setValue("ui/radioButton_PointRect",radioButton_PointRect);

丁劲犇's avatar
丁劲犇 已提交
160 161
	settings.setValue("ui/lineEdit_PenColor",ui->lineEdit_PenColor->text());
	settings.setValue("ui/lineEdit_FillColor",ui->lineEdit_FillColor->text());
162
	settings.setValue("ui/lineEdit_TextColor",ui->lineEdit_TextColor->text());
163 164 165 166 167 168
	settings.setValue("ui/lineEdit_prop_name",ui->lineEdit_prop_name->text());
	settings.setValue("ui/lineEdit_prop_string",ui->lineEdit_prop_string->text());
	settings.setValue("ui/lineEdit_lineLat1",ui->lineEdit_lineLat1->text());
	settings.setValue("ui/lineEdit_lineLat2",ui->lineEdit_lineLat2->text());
	settings.setValue("ui/lineEdit_lineLon1",ui->lineEdit_lineLon1->text());
	settings.setValue("ui/lineEdit_lineLon2",ui->lineEdit_lineLon2->text());
丁劲犇's avatar
丁劲犇 已提交
169
	settings.setValue("ui/spinBox_penWidth",ui->spinBox_penWidth->value());
170
	settings.setValue("ui/comboBox_linePad",ui->comboBox_linePad->currentIndex());
丁劲犇's avatar
丁劲犇 已提交
171
	settings.setValue("ui/comboBox_fillPad",ui->comboBox_fillPad->currentIndex());
172
	settings.setValue("ui/plainTextEdit_corners",ui->plainTextEdit_corners->toPlainText());
173 174 175

	settings.setValue("ui/spinBox_textWeight",ui->spinBox_textWeight->value());
	settings.setValue("ui/spinBox_fontSize",ui->spinBox_fontSize->value());
丁劲犇's avatar
丁劲犇 已提交
176 177
	settings.setValue("ui/lineEdit_icon_lat",ui->lineEdit_icon_lat->text());
	settings.setValue("ui/lineEdit_icon_lon",ui->lineEdit_icon_lon->text());
178 179
	settings.setValue("ui/lineEdit_icon_rotate",ui->lineEdit_icon_rotate->text());
	settings.setValue("ui/lineEdit_icon_scale",ui->lineEdit_icon_scale->text());
180
	settings.setValue("ui/checkBox_close",ui->checkBox_close->isChecked()?-1:0);
181 182
}

183
void qtvplugin_geomarker::ini_load()
184
{
185
	QSettings settings(ini_file(),QSettings::IniFormat);
186 187 188 189 190 191 192 193 194 195 196 197
	int radioButton_tool_point =  settings.value("ui/radioButton_tool_point",0).toInt();
	switch (radioButton_tool_point)
	{
	case 0:
		ui->radioButton_tool_point->setChecked(true);
		break;
	case 1:
		ui->radioButton_tool_line->setChecked(true);
		break;
	case 2:
		ui->radioButton_tool_polygon->setChecked(true);
		break;
198
	case 3:
199
		ui->radioButton_tool_icons->setChecked(true);
200
		break;
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
	default:
		ui->radioButton_tool_point->setChecked(true);
		break;
	}
	QString lineEdit_currentID = settings.value("ui/lineEdit_currentID","PT0").toString();
	ui->lineEdit_currentID->setText(lineEdit_currentID);

	QString lineEdit_point_lat = settings.value("ui/lineEdit_point_lat","0").toString();
	ui->lineEdit_point_lat->setText(lineEdit_point_lat);
	QString lineEdit_point_lon = settings.value("ui/lineEdit_point_lon","0").toString();
	ui->lineEdit_point_lon->setText(lineEdit_point_lon);
	int spinBox_point_width = settings.value("ui/spinBox_point_width",8).toInt();
	ui->spinBox_point_width->setValue(spinBox_point_width);
	int spinBox_point_size_height = settings.value("ui/spinBox_point_size_height",8).toInt();
	ui->spinBox_point_size_height->setValue(spinBox_point_size_height);
丁劲犇's avatar
丁劲犇 已提交
216 217 218 219
	QString lineEdit_PenColor = settings.value("ui/lineEdit_PenColor",color2string(QColor(0,0,0,128))).toString();
	ui->lineEdit_PenColor->setText(lineEdit_PenColor);
	QString lineEdit_FillColor = settings.value("ui/lineEdit_FillColor",color2string(QColor(255,255,255,128))).toString();
	ui->lineEdit_FillColor->setText(lineEdit_FillColor);
220 221
	QString lineEdit_TextColor = settings.value("ui/lineEdit_TextColor",color2string(QColor(0,0,0))).toString();
	ui->lineEdit_TextColor->setText(lineEdit_TextColor);
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
	int radioButton_PointRect =  settings.value("ui/radioButton_PointRect",0).toInt();
	switch (radioButton_PointRect)
	{
	case 0:
		ui->radioButton_PointRect->setChecked(true);
		break;
	case 1:
		ui->radioButton_PointRound->setChecked(true);
		break;
	default:
		ui->radioButton_PointRect->setChecked(true);
		break;
	}

	QString lineEdit_prop_name = settings.value("ui/lineEdit_prop_name","LABEL").toString();
	ui->lineEdit_prop_name->setText(lineEdit_prop_name);
	QString lineEdit_prop_string = settings.value("ui/lineEdit_prop_string","please input label here").toString();
	ui->lineEdit_prop_string->setText(lineEdit_prop_string);
	QString lineEdit_lineLat1 = settings.value("ui/lineEdit_lineLat1","0").toString();
	ui->lineEdit_lineLat1->setText(lineEdit_lineLat1);
	QString lineEdit_lineLat2 = settings.value("ui/lineEdit_lineLat2","0").toString();
	ui->lineEdit_lineLat2->setText(lineEdit_lineLat2);
	QString lineEdit_lineLon1 = settings.value("ui/lineEdit_lineLon1","0").toString();
	ui->lineEdit_lineLon1->setText(lineEdit_lineLon1);
	QString lineEdit_lineLon2 = settings.value("ui/lineEdit_lineLon2","0").toString();
	ui->lineEdit_lineLon2->setText(lineEdit_lineLon2);
丁劲犇's avatar
丁劲犇 已提交
248 249
	int spinBox_penWidth = settings.value("ui/spinBox_penWidth",3).toInt();
	ui->spinBox_penWidth->setValue(spinBox_penWidth);
250 251
	int comboBox_linePad = settings.value("ui/comboBox_linePad",1).toInt();
	ui->comboBox_linePad->setCurrentIndex(comboBox_linePad);
丁劲犇's avatar
丁劲犇 已提交
252 253
	int comboBox_fillPad = settings.value("ui/comboBox_fillPad",1).toInt();
	ui->comboBox_fillPad->setCurrentIndex(comboBox_fillPad);
254

255 256 257
	QString plainTextEdit_corners = settings.value("ui/plainTextEdit_corners","0").toString();
	ui->plainTextEdit_corners->setPlainText(plainTextEdit_corners);

258 259 260 261 262
	int spinBox_fontSize = settings.value("ui/spinBox_fontSize",9).toInt();
	ui->spinBox_fontSize->setValue(spinBox_fontSize);

	int spinBox_textWeight = settings.value("ui/spinBox_textWeight",16).toInt();
	ui->spinBox_textWeight->setValue(spinBox_textWeight);
丁劲犇's avatar
丁劲犇 已提交
263 264 265 266 267

	QString lineEdit_icon_lat = settings.value("ui/lineEdit_icon_lat","0").toString();
	ui->lineEdit_icon_lat->setText(lineEdit_icon_lat);
	QString lineEdit_icon_lon = settings.value("ui/lineEdit_icon_lon","0").toString();
	ui->lineEdit_icon_lon->setText(lineEdit_icon_lon);
268 269 270 271 272
	QString lineEdit_icon_scale = settings.value("ui/lineEdit_icon_scale","1.0").toString();
	ui->lineEdit_icon_scale->setText(lineEdit_icon_scale);
	QString lineEdit_icon_rotate = settings.value("ui/lineEdit_icon_rotate","1.0").toString();
	ui->lineEdit_icon_rotate->setText(lineEdit_icon_rotate);

273 274 275
	int checkBox_close = settings.value("ui/checkBox_close",0).toInt();
	ui->checkBox_close->setChecked(checkBox_close?true:false);

276 277 278 279 280 281
}
void qtvplugin_geomarker::on_pushButton_update_clicked()
{
	if (m_pVi==0 || !m_pScene)
		return;
	QString name = ui->lineEdit_currentID->text();
282
	ini_save();
丁劲犇's avatar
丁劲犇 已提交
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

	//Get pen and brush settings
	Qt::PenStyle pst [] ={
		Qt::NoPen	,
		Qt::SolidLine	,
		Qt::DashLine	,
		Qt::DotLine	,
		Qt::DashDotLine	,
		Qt::DashDotDotLine	,
		Qt::CustomDashLine
	};
	Qt::BrushStyle bst [] = {
		Qt::NoBrush,
		Qt::SolidPattern,
		Qt::Dense1Pattern,
		Qt::Dense2Pattern,
		Qt::Dense3Pattern,
		Qt::Dense4Pattern,
		Qt::Dense5Pattern,
		Qt::Dense6Pattern,
		Qt::Dense7Pattern,
		Qt::HorPattern,
		Qt::VerPattern,
		Qt::CrossPattern,
		Qt::BDiagPattern,
		Qt::FDiagPattern,
		Qt::DiagCrossPattern
	};

	int ptdd = ui->comboBox_linePad->currentIndex();
	if (ptdd < 0 || ptdd >=7)
		ptdd = 1;
	QColor penColor = string2color( ui->lineEdit_PenColor->text());
	int penWidth = ui->spinBox_penWidth->value();
	QPen pen;//(QBrush(color),width,pst[ptdd]);
	pen.setColor(penColor);
	pen.setWidth(penWidth);
	pen.setStyle(pst[ptdd]);

	int btdd = ui->comboBox_fillPad->currentIndex();
	if (btdd < 0 || btdd >=15)
		btdd = 1;

	QColor brushColor = string2color( ui->lineEdit_FillColor->text());
	QBrush brush;
	brush.setColor(brushColor);
	brush.setStyle(bst[btdd]);

331 332
	QTVP_GEOMARKER::geoItemBase * newitem = 0;

333 334 335 336 337 338 339 340
	if (ui->radioButton_tool_point->isChecked())
	{
		double lat = ui->lineEdit_point_lat->text().toDouble();
		double lon = ui->lineEdit_point_lon->text().toDouble();
		int tp = ui->radioButton_PointRect->isChecked()?0:1;
		int width = ui->spinBox_point_width->value();
		int height = ui->spinBox_point_size_height->value();
		if (tp==0)
341
			newitem = update_point<QTVP_GEOMARKER::geoGraphicsRectItem>(name,lat,lon,width,height,pen,brush);
342
		else
343
			newitem = update_point<QTVP_GEOMARKER::geoGraphicsEllipseItem>(name,lat,lon,width,height,pen,brush);
344 345 346 347 348 349 350
	}
	else if (ui->radioButton_tool_line->isChecked())
	{
		double lat1 = ui->lineEdit_lineLat1->text().toDouble();
		double lat2 = ui->lineEdit_lineLat2->text().toDouble();
		double lon1 = ui->lineEdit_lineLon1->text().toDouble();
		double lon2 = ui->lineEdit_lineLon2->text().toDouble();
351
		newitem = update_line(name,lat1,lon1,lat2,lon2,pen);
352 353 354
	}
	else if (ui->radioButton_tool_polygon->isChecked())
	{
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
		QPolygonF latlons;
		QString strPlainTexts = ui->plainTextEdit_corners->toPlainText();
		strPlainTexts.remove(' ');
		strPlainTexts.remove('\n');
		strPlainTexts.remove('\r');
		strPlainTexts.remove('\015');
		strPlainTexts.remove('\012');
		QStringList lst = strPlainTexts.split(QRegExp("[,;]"),QString::SkipEmptyParts);
		int c = 0;
		QPointF ll;
		foreach (QString s,lst)
		{
			if (c%2==0)
				ll.setY(s.toDouble());
			else
				ll.setX(s.toDouble());
			if ((++c) % 2==0)
				latlons.push_back(ll);
		}
		if (latlons.size())
375
			newitem = update_polygon(name,latlons,pen,brush,ui->checkBox_close->isChecked()?true:false);
376 377

	}
378
	else if (ui->radioButton_tool_icons->isChecked())
丁劲犇's avatar
丁劲犇 已提交
379 380 381
	{
		double lat = ui->lineEdit_icon_lat->text().toDouble();
		double lon = ui->lineEdit_icon_lon->text().toDouble();
382 383
		qreal scale = ui->lineEdit_icon_scale->text().toFloat();
		qreal rotate = ui->lineEdit_icon_rotate->text().toFloat();
丁劲犇's avatar
丁劲犇 已提交
384
		QString iconname = ui->comboBox_icons->currentText();
385 386
		int smooth = ui->checkBox_icon_smooth->isChecked()?1:0;
		newitem = update_icon(name,lat,lon,scale,rotate,smooth,iconname);
丁劲犇's avatar
丁劲犇 已提交
387
	}
388 389
	else
		return;
390 391 392 393 394 395 396 397 398 399 400 401 402
	if (newitem)
	{
		int fontSz = ui->spinBox_fontSize->value();
		int fontWeight = ui->spinBox_textWeight->value();
		QColor textColor = string2color( ui->lineEdit_TextColor->text());
		QFont f = newitem->labelFont();
		f.setPointSize(fontSz);
		f.setWeight(fontWeight);
		newitem->setLabelFont(f);
		newitem->setLabelColor(textColor);


	}
丁劲犇's avatar
丁劲犇 已提交
403
	scheduleRefreshMarks();
404
	m_pVi->UpdateWindow();
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
}

void qtvplugin_geomarker::on_pushButton_del_clicked()
{
	QSet<int> rows;
	QModelIndexList lst =  ui->tableView_marks->selectionModel()->selectedIndexes();
	foreach (QModelIndex idd, lst)
		rows.insert(idd.row());
	foreach (int row, rows)
	{
		QString namep = m_pGeoItemModel->data(m_pGeoItemModel->index(row,0)).toString();
		QTVP_GEOMARKER::geoItemBase * b = m_pScene->geoitem_by_name(namep);
		if (b)
			m_pScene->removeItem(b,0);
	}
丁劲犇's avatar
丁劲犇 已提交
420
	scheduleRefreshMarks();
421 422 423 424 425

}

void qtvplugin_geomarker::on_pushButton_prop_update_clicked()
{
426
	ini_save();
427 428 429 430 431 432 433
	QString name = ui->lineEdit_currentID->text();
	//Fill in the pages
	QTVP_GEOMARKER::geoItemBase * item = m_pScene->geoitem_by_name(name);
	if (item)
	{
		item->set_prop_data(ui->lineEdit_prop_name->text(),ui->lineEdit_prop_string->text());
		this->refreshProps(item);
丁劲犇's avatar
丁劲犇 已提交
434
		this->scheduleRefreshMarks();
435 436 437 438 439 440 441 442 443 444 445
		//Update Font
		int fontSz = ui->spinBox_fontSize->value();
		int fontWeight = ui->spinBox_textWeight->value();
		QColor textColor = string2color( ui->lineEdit_TextColor->text());
		QFont f = item->labelFont();
		f.setPointSize(fontSz);
		f.setWeight(fontWeight);
		item->setLabelFont(f);
		item->setLabelColor(textColor);

		m_pVi->UpdateWindow();
446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
	}
}
void qtvplugin_geomarker::on_pushButton_prop_delete_clicked()
{
	QString name = ui->lineEdit_currentID->text();
	//Fill in the pages
	QTVP_GEOMARKER::geoItemBase * item = m_pScene->geoitem_by_name(name);
	if (item)
	{
		QSet<int> rows;
		QModelIndexList lst =  ui->tableView_props->selectionModel()->selectedIndexes();
		foreach (QModelIndex idd, lst)
			rows.insert(idd.row());
		foreach (int row, rows)
		{
			QString namep = m_pGeoPropModel->data(m_pGeoPropModel->index(row,0)).toString();
			item->del_prop(namep);
		}
	}
	this->refreshProps(item);
}


void qtvplugin_geomarker::on_tableView_marks_doubleClicked(const QModelIndex & index)
{
	int row = index.row();
	if (row >=0 && row < m_pGeoItemModel->rowCount() )
	{
		QString name = m_pGeoItemModel->data(
					m_pGeoItemModel->index(row,0)
					).toString();

		refreshItemUI(name);
	}
}

482
void qtvplugin_geomarker::on_pushButton_getPolygon_clicked()
483 484 485 486 487 488 489
{
	if (!m_pVi)	return;
	QString strGridName = QString("grid%1").arg(m_nInstance);
	layer_interface * pif =  m_pVi->layer(strGridName);
	if (pif)
	{
		QMap<QString, QVariant> inPara, outPara;
490
		inPara["function"] = "get_polygon";
491 492 493 494 495 496 497 498 499
		outPara = pif->call_func(inPara);
		QString strPlainText = "";
		if (outPara.contains("size"))
		{
			int nsz = outPara["size"].toInt();
			for (int i=0;i<nsz;++i)
			{
				QString latkey = QString("lat%1").arg(i);
				QString lonkey = QString("lon%1").arg(i);
500
				strPlainText += QString("%1,%2;\n").arg(outPara[latkey].toDouble(),0,'f',7).arg(outPara[lonkey].toDouble(),0,'f',7);
501 502 503 504 505
			}
		}
		ui->plainTextEdit_corners->setPlainText(strPlainText);
	}
}
506 507 508 509 510 511 512 513
void qtvplugin_geomarker::refreshItemUI(QString markname)
{
	QString name = markname;
	//Fill in the pages
	QTVP_GEOMARKER::geoItemBase * item = m_pScene->geoitem_by_name(name);
	if (item)
	{
		ui->lineEdit_currentID->setText(item->item_name());
丁劲犇's avatar
丁劲犇 已提交
514 515 516
		//Update Pen and brush
		QPen pen;
		QBrush brush;
517 518 519 520 521 522 523
		switch (item->item_type())
		{
		case QTVP_GEOMARKER::ITEAMTYPE_RECT_POINT:
		{
			QTVP_GEOMARKER::geoGraphicsRectItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsRectItem *>(item);
			if (!pitem)
				break;
丁劲犇's avatar
丁劲犇 已提交
524 525
			pen = pitem->pen();
			brush = pitem->brush();
526 527
			ui->lineEdit_point_lat->setText(QString("%1").arg(pitem->lat(),0,'f',7));
			ui->lineEdit_point_lon->setText(QString("%1").arg(pitem->lon(),0,'f',7));
528 529 530
			ui->radioButton_PointRect->setChecked(true);
			ui->spinBox_point_width->setValue(pitem->width());
			ui->spinBox_point_size_height->setValue(pitem->height());
531
			ui->radioButton_tool_point->setChecked(true);
532 533 534 535 536 537 538
		}
			break;
		case QTVP_GEOMARKER::ITEAMTYPE_ELLIPSE_POINT:
		{
			QTVP_GEOMARKER::geoGraphicsEllipseItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsEllipseItem *>(item);
			if (!pitem)
				break;
丁劲犇's avatar
丁劲犇 已提交
539 540
			pen = pitem->pen();
			brush = pitem->brush();
541 542
			ui->lineEdit_point_lat->setText(QString("%1").arg(pitem->lat(),0,'f',7));
			ui->lineEdit_point_lon->setText(QString("%1").arg(pitem->lon(),0,'f',7));
543 544 545
			ui->radioButton_PointRound->setChecked(true);
			ui->spinBox_point_width->setValue(pitem->width());
			ui->spinBox_point_size_height->setValue(pitem->height());
546
			ui->radioButton_tool_point->setChecked(true);
547 548 549
		}
			break;
		case QTVP_GEOMARKER::ITEAMTYPE_LINE:
550 551 552 553
		{
			QTVP_GEOMARKER::geoGraphicsLineItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsLineItem *>(item);
			if (!pitem)
				break;
丁劲犇's avatar
丁劲犇 已提交
554
			pen = pitem->pen();
555 556 557 558
			ui->lineEdit_lineLat1->setText(QString("%1").arg(pitem->lat1(),0,'f',7));
			ui->lineEdit_lineLat2->setText(QString("%1").arg(pitem->lat2(),0,'f',7));
			ui->lineEdit_lineLon1->setText(QString("%1").arg(pitem->lon1(),0,'f',7));
			ui->lineEdit_lineLon2->setText(QString("%1").arg(pitem->lon2(),0,'f',7));
559
			ui->radioButton_tool_line->setChecked(true);
560
		}
561
			break;
562
		case QTVP_GEOMARKER::ITEAMTYPE_POLYGON:
563 564 565 566
		{
			QTVP_GEOMARKER::geoGraphicsPolygonItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsPolygonItem *>(item);
			if (!pitem)
				break;
丁劲犇's avatar
丁劲犇 已提交
567 568
			pen = pitem->pen();
			brush = pitem->brush();
569 570 571
			QPolygonF pol = pitem->llas();
			QString strPlainText;
			foreach (QPointF p, pol)
572
				strPlainText += QString("%1,%2;\n").arg(p.y(),0,'f',7).arg(p.x(),0,'f',7);
573
			ui->plainTextEdit_corners->setPlainText(strPlainText);
574
			ui->radioButton_tool_polygon->setChecked(true);
575
			ui->checkBox_close->setChecked(false);
576
		}
577
			break;
578 579 580 581 582 583 584
		case QTVP_GEOMARKER::ITEAMTYPE_PIXMAP:
		{
			QTVP_GEOMARKER::geoGraphicsPixmapItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsPixmapItem *>(item);
			if (!pitem)
				break;
			ui->lineEdit_icon_lat->setText(QString("%1").arg(pitem->lat(),0,'f',7));
			ui->lineEdit_icon_lon->setText(QString("%1").arg(pitem->lon(),0,'f',7));
585
			ui->radioButton_tool_icons->setChecked(true);
586 587 588 589 590 591
			ui->lineEdit_icon_rotate->setText(QString("%1").arg(pitem->rotation()));
			ui->lineEdit_icon_scale->setText(QString("%1").arg(pitem->scale()));
			QString nameicon = pitem->icon()->name;
			ui->comboBox_icons->setCurrentText(nameicon);
		}
			break;
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608
		case QTVP_GEOMARKER::ITEAMTYPE_MULTILINE:
		{
			QTVP_GEOMARKER::geoGraphicsMultilineItem * pitem = dynamic_cast<QTVP_GEOMARKER::geoGraphicsMultilineItem *>(item);
			if (!pitem)
				break;
			pen = pitem->pen();
			brush = pitem->brush();
			QPolygonF pol = pitem->llas();
			QString strPlainText;
			foreach (QPointF p, pol)
				strPlainText += QString("%1,%2;\n").arg(p.y(),0,'f',7).arg(p.x(),0,'f',7);
			ui->plainTextEdit_corners->setPlainText(strPlainText);
			ui->radioButton_tool_polygon->setChecked(true);
			ui->checkBox_close->setChecked(true);
		}
			break;

609 610 611 612
		default:
			break;

		}//end switch
丁劲犇's avatar
丁劲犇 已提交
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627

		QColor colorPen = pen.color();
		ui->lineEdit_PenColor->setText(color2string(colorPen));
		QColor colorFill = brush.color();
		ui->lineEdit_FillColor->setText(color2string(colorFill));
		int penwidth = pen.width();
		ui->spinBox_penWidth->setValue(penwidth);
		Qt::PenStyle st = pen.style();
		int nst = int(st);
		if (nst >=0 && nst < ui->comboBox_linePad->count())
			ui->comboBox_linePad->setCurrentIndex((int)st);
		Qt::BrushStyle bs = brush.style();
		int nbs = int(bs);
		if (nbs >=0 && nbs < ui->comboBox_fillPad->count())
			ui->comboBox_fillPad->setCurrentIndex((int)nbs);
628 629 630 631 632 633 634 635 636 637

		QColor colorText = item->labelColor();
		ui->lineEdit_TextColor->setText(color2string(colorText));

		int fsize = item->labelFont().pointSize();
		ui->spinBox_fontSize->setValue(fsize);

		int weight = item->labelFont().weight();
		ui->spinBox_textWeight->setValue(weight);

638 639 640 641
		refreshProps(item);
	}//end if item

}
丁劲犇's avatar
丁劲犇 已提交
642 643 644 645 646 647 648 649 650 651 652
void qtvplugin_geomarker::refreshIconModel()
{
	m_pIconsModel->clear();
	foreach (QString key, m_map_icons.keys())
	{
		QStandardItem * item =  new QStandardItem(key);
		QIcon icon(m_map_icons[key].icon);
		item->setIcon(icon);
		m_pIconsModel->appendRow(item);
	}
}
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669

void qtvplugin_geomarker::refreshProps(QTVP_GEOMARKER::geoItemBase * itm)
{
	m_pGeoPropModel->removeRows(0,m_pGeoPropModel->rowCount());
	int ct = itm->prop_counts();
	QStringList lstNames = itm->prop_names();
	QVariantList lstValues = itm->prop_values();
	for (int i=0;i<ct;++i)
	{
		m_pGeoPropModel->appendRow(new QStandardItem(lstNames.first()));
		m_pGeoPropModel->setData(
					m_pGeoPropModel->index(i,1),
					lstValues.first());
		lstNames.pop_front();
		lstValues.pop_front();
	}
}
670 671
void qtvplugin_geomarker::on_pushButton_save_clicked()
{
672
	QSettings settings(ini_file(),QSettings::IniFormat);
673 674 675 676 677 678
	QString strLastSaveImgDir = settings.value("history/last_save_xml_dir","./").toString();
	QString newfm = QFileDialog::getSaveFileName(this,tr("save to xml"),strLastSaveImgDir,
								 "xml (*.xml);;All files(*.*)"
								 );
	if (newfm.size()>2)
	{
679
		if (true==xml_save(newfm))
680 681
		{
			settings.setValue("history/last_save_xml_dir",newfm);
丁劲犇's avatar
丁劲犇 已提交
682
			//QMessageBox::information(this,tr("succeed"),tr("Successfully saved XML file") + newfm);
683 684 685 686 687
		}
		else
			QMessageBox::warning(this,tr("failed"),tr("Save XML file") + newfm + tr(" Failed"));
	}
}
688

689 690
void qtvplugin_geomarker::on_pushButton_load_clicked()
{
691
	QSettings settings(ini_file(),QSettings::IniFormat);
692 693 694 695 696 697
	QString strLastSaveImgDir = settings.value("history/last_open_xml_dir","./").toString();
	QString newfm = QFileDialog::getOpenFileName(this,tr("load from xml"),strLastSaveImgDir,
								 "xml (*.xml);;All files(*.*)"
								 );
	if (newfm.size()>2)
	{
698
		if (true==xml_load(newfm))
699 700
		{
			settings.setValue("history/last_open_xml_dir",newfm);
丁劲犇's avatar
丁劲犇 已提交
701
			//QMessageBox::information(this,tr("succeed"),tr("Successfully load XML file") + newfm);
702 703 704 705
		}
		else
			QMessageBox::warning(this,tr("failed"),tr("Load XML file") + newfm + tr(" Failed"));
	}
丁劲犇's avatar
丁劲犇 已提交
706
	scheduleRefreshMarks();
707 708
	m_pVi->UpdateWindow();
}
709
void qtvplugin_geomarker::on_pushButton_import_icon_clicked()
丁劲犇's avatar
丁劲犇 已提交
710
{
711
	DialogSelectIcon dlg (ini_file()) ;
712
	if (dlg.exec()==QDialog::Accepted)
丁劲犇's avatar
丁劲犇 已提交
713
	{
714
		m_map_icons[dlg.m_icon.name] = dlg.m_icon;
丁劲犇's avatar
丁劲犇 已提交
715
	}
716
	refreshIconModel();
丁劲犇's avatar
丁劲犇 已提交
717
}
丁劲犇's avatar
丁劲犇 已提交
718 719 720
void qtvplugin_geomarker::on_pushButton_load_icons_clicked()
{
	QSettings settings(ini_file(),QSettings::IniFormat);
721
	QString strLastSaveImgDir = settings.value("history/last_save_icon_xml_dir","./").toString();
丁劲犇's avatar
丁劲犇 已提交
722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755
	QString newfm = QFileDialog::getOpenFileName(this,tr("load from xml"),strLastSaveImgDir,
								 "xml (*.xml);;All files(*.*)"
								 );
	if (newfm.size()>2)
	{
		if (true==xml_icon_load(newfm))
		{
			settings.setValue("history/last_load_icon_xml_dir",newfm);
			//QMessageBox::information(this,tr("succeed"),tr("Successfully load XML file") + newfm);
		}
		else
			QMessageBox::warning(this,tr("failed"),tr("Load XML file") + newfm + tr(" Failed"));
	}
	this->refreshIconModel();
}

void qtvplugin_geomarker::on_pushButton_save_icons_clicked()
{
	QSettings settings(ini_file(),QSettings::IniFormat);
	QString strLastSaveImgDir = settings.value("history/last_save_icon_xml_dir","./").toString();
	QString newfm = QFileDialog::getSaveFileName(this,tr("save to xml"),strLastSaveImgDir,
								 "xml (*.xml);;All files(*.*)"
								 );
	if (newfm.size()>2)
	{
		if (true==xml_icon_save(newfm))
		{
			settings.setValue("history/last_save_icon_xml_dir",newfm);
			//QMessageBox::information(this,tr("succeed"),tr("Successfully saved XML file") + newfm);
		}
		else
			QMessageBox::warning(this,tr("failed"),tr("Save XML file") + newfm + tr(" Failed"));
	}
}
丁劲犇's avatar
丁劲犇 已提交
756
void qtvplugin_geomarker::on_pushButton_collaps_all_clicked()
757
{
丁劲犇's avatar
丁劲犇 已提交
758 759 760 761 762 763 764 765 766 767 768 769 770 771 772
	QList< QTVP_GEOMARKER::geoItemBase *  > lst = m_pScene->geo_items();

	bool needupdate = false;
	foreach (QTVP_GEOMARKER::geoItemBase * base,lst)
	{
		bool bOldVis = base->props_visible();
		if (bOldVis)
			needupdate = true;
		base->show_props(false);
	}
	if (needupdate)
	{
		//scheduleRefreshMarks();
		scheduleUpdateMap();
	}
773
}
丁劲犇's avatar
丁劲犇 已提交
774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820
void qtvplugin_geomarker::on_pushButton_refresh_list_clicked()
{
	this->scheduleRefreshMarks();
}
void qtvplugin_geomarker::on_radioButton_display_clicked()
{
	if (!m_pVi)	return ;
	m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
	m_currentTools = qtvplugin_geomarker::TOOLS_DISPLAY_ONLY;
	layer_interface * pOSM =  m_pVi->layer("OSM");
	if (pOSM)
	{
		pOSM->set_active(true);
		m_pVi->adjust_layers(pOSM);
	}
	m_pVi->UpdateWindow();
	m_pVi->updateLayerGridView();
	ui->toolBox_marks->setCurrentIndex(0);

}

void qtvplugin_geomarker::on_radioButton_rect_selection_clicked()
{
	if (!m_pVi)	return ;
	m_currentTools = qtvplugin_geomarker::TOOLS_RECT_SELECTION;
	m_sel_ptStart_World = m_sel_ptEnd_World = QPointF();
	m_pVi->adjust_layers(this);
	m_pVi->UpdateWindow();
	m_pVi->updateLayerGridView();
	ui->toolBox_marks->setCurrentIndex(1);
}
void qtvplugin_geomarker::on_pushButton_sel_clear_clicked()
{
	clearSelection();
}

void qtvplugin_geomarker::on_pushButton_sel_delselected_clicked()
{
	foreach (QString namep,m_set_itemNameSelected)
	{
		QTVP_GEOMARKER::geoItemBase * b = m_pScene->geoitem_by_name(namep);
		if (b)
			m_pScene->removeItem(b,0);
	}
	clearSelection();
	scheduleRefreshMarks();
}