Przeglądaj źródła

-added additional checks on file load(in all dialogs)
-added filename filter to the dialogs
-fixed few bugs

gapchich 13 lat temu
rodzic
commit
dbc8ace0a7
5 zmienionych plików z 99 dodań i 16 usunięć
  1. 1 0
      ImageHolder.cpp
  2. 87 12
      ImageLabeler.cpp
  3. 7 0
      ImageLabeler.h
  4. 2 2
      functions.cpp
  5. 2 2
      functions.h

+ 1 - 0
ImageHolder.cpp

@@ -492,6 +492,7 @@ ImageHolder::clearAll()
 	polygon_.poly.clear();
 	clearFocusOnArea();
 	state_ = StandBy;
+	scale_ = 1;
 
 	update();
 }

+ 87 - 12
ImageLabeler.cpp

@@ -180,6 +180,13 @@ ImageLabeler::ImageLabeler(QWidget *aParent) :
 	popup_label_list_->addAction(action_toggle_priority_);
 	popup_label_list_->addAction(action_delete_label_);
 
+	popup_images_list_ = new QMenu;
+
+	action_remove_image_ = new QAction(this);
+	action_remove_image_->setText(tr("&remove image"));
+
+	popup_images_list_->addAction(action_remove_image_);
+
 	/*
 	 * widgets part begins
 	 */
@@ -228,7 +235,7 @@ ImageLabeler::ImageLabeler(QWidget *aParent) :
 	list_areas_ = new QListWidget(central_widget_);
 	list_areas_->setContextMenuPolicy(Qt::CustomContextMenu);
 	list_images_widget_ = new QListWidget(central_widget_);
-	//list_images_widget_->setContextMenuPolicy(Qt::CustomContextMenu);
+	list_images_widget_->setContextMenuPolicy(Qt::CustomContextMenu);
 //	addLabel(0, false, "BACKGROUND");
 //	list_label_->item(0)->setFlags(Qt::ItemIsSelectable);
 	//QListWidgetItem *background = list_label_->item(0);
@@ -544,6 +551,12 @@ ImageLabeler::ImageLabeler(QWidget *aParent) :
 		this,
 		SLOT(selectImage(QListWidgetItem *))
 		);
+	connect(
+		list_images_widget_,
+		SIGNAL(customContextMenuRequested(const QPoint &)),
+		this,
+		SLOT(imageListPopupMenu(const QPoint &))
+		);
 	connect(
 		action_delete_area_,
 		SIGNAL(triggered()),
@@ -574,6 +587,12 @@ ImageLabeler::ImageLabeler(QWidget *aParent) :
 		this,
 		SLOT(removeLabel())
 		);
+	connect(
+		action_remove_image_,
+		SIGNAL(triggered()),
+		this,
+		SLOT(removeImage())
+		);
 	connect(
 		image_holder_,
 		SIGNAL(selectionStarted()),
@@ -653,6 +672,10 @@ ImageLabeler::~ImageLabeler()
 
 	delete popup_label_list_;
 
+	delete action_remove_image_;
+
+	delete popup_images_list_;
+
 	delete image_;
 	delete image_holder_;
 
@@ -1592,6 +1615,10 @@ ImageLabeler::loadInfo()
 					return;
 					/* NOTREACHED */
 				}
+				if (!image_->load(string)) {
+					return;
+					/* NOTREACHED */
+				}
 				addImage(&string);
 				current_image_ = string;
 				image_ID_ = list_images_widget_->count() - 1;
@@ -1602,7 +1629,7 @@ ImageLabeler::loadInfo()
 				winTitle.append(current_image_);
 				setWindowTitle(winTitle);
 
-				image_->load(current_image_);
+
 				image_holder_->resize(image_->size());
 				image_holder_->setPixmap(*image_);
 			}
@@ -1675,7 +1702,12 @@ ImageLabeler::loadImage()
 	}
 
 	QFileDialog fileDialog(0, tr("Load image"));
-	fileDialog.setFileMode(QFileDialog::AnyFile);
+	fileDialog.setFileMode(QFileDialog::ExistingFile);
+	QStringList filters;
+	filters << "Image files (*.jpeg *.jpg *.gif *.png *.bmp *.tiff)"
+			<< "Any files (*)";
+
+	fileDialog.setNameFilters(filters);
 	QString filename;
 
 	if (fileDialog.exec()) {
@@ -1695,7 +1727,17 @@ ImageLabeler::loadImage()
 	clearAllTool();
 
 
-	addImage(&filename);
+	QString winTitle;
+	winTitle.append("ImageLabeler - ");
+	winTitle.append(current_image_);
+	setWindowTitle(winTitle);
+
+	if (!image_->load(filename)) {
+		return;
+		/* NOTREACHED */
+	}
+	image_holder_->resize(image_->size());
+	image_holder_->setPixmap(*image_);
 
 	if (!list_images_widget_->count()) {
 		return;
@@ -1706,14 +1748,8 @@ ImageLabeler::loadImage()
 	image_ID_ = list_images_widget_->count() - 1;
 	list_images_widget_->setCurrentRow(image_ID_);
 
-	QString winTitle;
-	winTitle.append("ImageLabeler - ");
-	winTitle.append(current_image_);
-	setWindowTitle(winTitle);
 
-	image_->load(current_image_);
-	image_holder_->resize(image_->size());
-	image_holder_->setPixmap(*image_);
+	addImage(&filename);
 
 	enableTools();
 }
@@ -1778,6 +1814,10 @@ ImageLabeler::loadImages()
 		/* NOTREACHED */
 	}
 
+	if (!image_->load(list_images_->at(0))) {
+		return;
+		/* NOTREACHED */
+	}
 	current_image_ = list_images_->at(0);
 	image_ID_ = 0;
 	list_images_widget_->setCurrentRow(image_ID_);
@@ -1787,7 +1827,6 @@ ImageLabeler::loadImages()
 	winTitle.append(current_image_);
 	setWindowTitle(winTitle);
 
-	image_->load(current_image_);
 	image_holder_->resize(image_->size());
 	image_holder_->setPixmap(*image_);
 
@@ -2718,6 +2757,36 @@ ImageLabeler::selectImage(QListWidgetItem *anItem)
 	image_holder_->resize(image_->size());
 }
 
+void
+ImageLabeler::imageListPopupMenu(const QPoint &aPos)
+{
+	QPoint globalPos = list_images_widget_->mapToGlobal(aPos);
+	QModelIndex index = list_images_widget_->indexAt(aPos);
+
+	if (-1 == index.row()) {
+		return;
+		/* NOTREACHED */
+	}
+
+	list_images_widget_->item(index.row())->setSelected(true);
+
+	popup_images_list_->exec(globalPos);
+}
+
+void
+ImageLabeler::removeImage()
+{
+	int num = list_images_widget_->currentRow();
+	list_images_widget_->takeItem(num);
+	list_images_->takeAt(num);
+
+	for (int i = num ; i < list_images_widget_->count(); i++) {
+		QString newStr = getFilenameFromPath(&(list_images_->at(i)));
+		newStr.prepend(QString("%1: ").arg(i));
+		list_images_widget_->item(i)->setText(newStr);
+	}
+}
+
 void
 ImageLabeler::resizeEvent (QResizeEvent *anEvent)
 {
@@ -2781,6 +2850,12 @@ ImageLabeler::keyPressEvent(QKeyEvent *anEvent)
 	QWidget::keyPressEvent(anEvent);
 }
 
+void
+ImageLabeler::keyReleaseEvent(QKeyEvent *anEvent)
+{
+	keyboard_modifier_ = anEvent->modifiers();
+}
+
 void
 ImageLabeler::wheelEvent(QWheelEvent *anEvent)
 {

+ 7 - 0
ImageLabeler.h

@@ -42,6 +42,7 @@ protected:
 	void mousePressEvent(QMouseEvent *anEvent);
 	void wheelEvent(QWheelEvent *anEvent);
 	void keyPressEvent(QKeyEvent *anEvent);
+	void keyReleaseEvent(QKeyEvent *anEvent);
 
 	void getImagesFromDir(const QDir &dir);
 	void showWarning(const QString text);
@@ -133,6 +134,8 @@ public slots:
 	void viewSegmented();
 	void interruptSearch();
 	void selectImage(QListWidgetItem *);
+	void removeImage();
+	void imageListPopupMenu(const QPoint &);
 
 private:
 	/* menu */
@@ -177,6 +180,10 @@ private:
 	QAction *action_set_color_;
 	QAction *action_delete_label_;
 
+	QMenu *popup_images_list_;
+
+	QAction *action_remove_image_;
+
 	/* layouts */
 	QHBoxLayout *layout_main_;
 	QVBoxLayout *layout_left_;

+ 2 - 2
functions.cpp

@@ -87,7 +87,7 @@ QString alterFileName(const QString &aFilename, const QString &aSuffix)
 }
 
 QString
-getDirFromPath(QString *aPath)
+getDirFromPath(const QString *aPath)
 {
 	int lastSlash = aPath->lastIndexOf("/");
 	int symbolCount = aPath->size() - (aPath->size() - lastSlash);
@@ -97,7 +97,7 @@ getDirFromPath(QString *aPath)
 }
 
 QString
-getFilenameFromPath(QString *aPath)
+getFilenameFromPath(const QString *aPath)
 {
 	int lastSlash = aPath->lastIndexOf("/") + 1;
 	int strLen = aPath->size() - lastSlash;

+ 2 - 2
functions.h

@@ -13,10 +13,10 @@ class QChar;
 class QDomDocument;
 
 QString getDirFromPath(
-	QString *aPath
+	const QString *aPath
 	);
 QString getFilenameFromPath(
-	QString *aPath
+	const QString *aPath
 	);
 int getNumFromString(
 	QString *aString,