src/versionEditor.cpp

changeset 25
256bb5c6b77f
child 27
b9307871cf10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/versionEditor.cpp	Sun Sep 08 19:56:11 2013 +0300
@@ -0,0 +1,225 @@
+#include "versionEditor.h"
+#include "ui_versionEditor.h"
+#include "ui_addversion.h"
+#include "config.h"
+#include "misc.h"
+#include "build/moc_versionEditor.cpp"
+
+EXTERN_CONFIG (Map,  binaryPaths)
+EXTERN_CONFIG (List, devBuildNames)
+EXTERN_CONFIG (List, releaseNames)
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+VersionEditor::VersionEditor (QWidget* parent, Qt::WindowFlags f) :
+	QDialog (parent, f),
+	m_ui (new Ui_VersionEditor)
+{
+	m_ui->setupUi (this);
+	
+	connect (m_ui->m_versions, SIGNAL (currentCellChanged (int, int, int, int)),
+	         this, SLOT (selectionChanged (int)));
+	
+	connect (m_ui->m_add,    SIGNAL (clicked (bool)), this, SLOT (add()));
+	connect (m_ui->m_edit,   SIGNAL (clicked (bool)), this, SLOT (edit()));
+	connect (m_ui->m_remove, SIGNAL (clicked (bool)), this, SLOT (remove()));
+	connect (m_ui->m_clear,  SIGNAL (clicked (bool)), this, SLOT (clear()));
+	
+	initVersions();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+VersionEditor::~VersionEditor() {
+	delete m_ui;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::initVersions() {
+	int i = 0;
+	
+	for (const QVariant& ver : (cfg::releaseNames + cfg::devBuildNames)) {
+		bool isRelease = (i < cfg::releaseNames.size());
+		addVersion (ver.toString(), cfg::binaryPaths[ver.toString()].toString(), isRelease);
+		
+		++i;
+	}
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::add() {
+	AddVersionPrompt* dlg = new AddVersionPrompt (this);
+	if (!dlg->exec())
+		return;
+	
+	addVersion (dlg->name(), dlg->path(), dlg->release());
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::edit() {
+	QTableWidget* const vers = m_ui->m_versions;
+	int row = vers->currentRow();
+	
+	if (row < 0)
+		return;
+	
+	AddVersionPrompt* dlg = new AddVersionPrompt (this);
+	dlg->setName (vers->item (row, NameColumn)->text());
+	dlg->setPath (vers->item (row, PathColumn)->text());
+	dlg->setRelease (getReleaseCheckbox(row)->isChecked());
+	
+	if (!dlg->exec())
+		return;
+	
+	addVersion (dlg->name(), dlg->path(), dlg->release());
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::remove() {
+	QTableWidget* const vers = m_ui->m_versions;
+	
+	str name = vers->item (vers->currentRow(), NameColumn)->text();
+	if (!confirm (fmt (tr ("Really remove version %1?"), name)))
+		return;
+	
+	vers->removeRow (vers->currentRow());
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::clear() {
+	if (!confirm (tr ("Really remove all versions?")))
+		return;
+	
+	m_ui->m_versions->clear();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::addVersion (str name, str path, bool isRelease) {
+	QTableWidget* const vers = m_ui->m_versions;
+	
+	int row = vers->rowCount();
+	vers->insertRow (row);
+	vers->setItem (row, NameColumn, new QTableWidgetItem);
+	vers->setItem (row, PathColumn, new QTableWidgetItem);
+	vers->item (row, NameColumn)->setText (name);
+	vers->item (row, PathColumn)->setText (path);
+	
+	QCheckBox* cb = new QCheckBox;
+	cb->setChecked (isRelease);
+	vers->setCellWidget (row, ReleaseColumn, cb);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::saveChanges() {
+	QTableWidget* const vers = m_ui->m_versions;
+	
+	cfg::devBuildNames.clear();
+	cfg::releaseNames.clear();
+	cfg::binaryPaths.clear();
+	
+	for (int i = 0; i < vers->rowCount(); ++i) {
+		const QCheckBox* cb = getReleaseCheckbox (i);
+		bool isRelease = cb->isChecked();
+		const str name = vers->item (i, NameColumn)->text(),
+		          path = vers->item (i, PathColumn)->text();
+		
+		if (isRelease)
+			cfg::releaseNames << QVariant (name);
+		else
+			cfg::devBuildNames << QVariant (name);
+		
+		cfg::binaryPaths[name] = path;
+	}
+	
+	cfg::save();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void VersionEditor::selectionChanged (int row) {
+	bool ok = (row != -1);
+	m_ui->m_edit->setEnabled (ok);
+	m_ui->m_remove->setEnabled (ok);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+QCheckBox* VersionEditor::getReleaseCheckbox (int i) {
+	return static_cast<QCheckBox*> (m_ui->m_versions->cellWidget (i, ReleaseColumn));
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+AddVersionPrompt::AddVersionPrompt (QWidget* parent, Qt::WindowFlags f) :
+	QDialog (parent, f),
+	m_ui (new Ui_AddVersion)
+{
+	m_ui->setupUi (this);
+	connect (m_ui->m_binaryName, SIGNAL (textChanged (QString)), this, SLOT (fieldsChanged()));
+	connect (m_ui->m_binaryPath, SIGNAL (textChanged (QString)), this, SLOT (fieldsChanged()));
+	connect (m_ui->m_findBinary, SIGNAL (clicked (bool)), this, SLOT (findPath()));
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+AddVersionPrompt::~AddVersionPrompt() {
+	delete m_ui;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AddVersionPrompt::findPath() {
+	str path = ConfigBox::getBinaryPath (this);
+	if (!path.isEmpty())
+		m_ui->m_binaryPath->setText (path);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+str AddVersionPrompt::name() {
+	return m_ui->m_binaryName->text();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+str AddVersionPrompt::path() {
+	return m_ui->m_binaryPath->text();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+bool AddVersionPrompt::release() {
+	return m_ui->m_release->isChecked();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AddVersionPrompt::setName (const str& a) {
+	m_ui->m_binaryName->setText (a);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AddVersionPrompt::setPath (const str& a) {
+	m_ui->m_binaryPath->setText (a);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AddVersionPrompt::setRelease (bool a) {
+	m_ui->m_release->setChecked (a);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void AddVersionPrompt::fieldsChanged() {
+	bool ok = (!m_ui->m_binaryName->text().isEmpty()) && (!m_ui->m_binaryPath->text().isEmpty());
+	m_ui->buttonBox->button (QDialogButtonBox::Ok)->setEnabled (ok);
+}
\ No newline at end of file

mercurial