major change: Add security support & Adjust GUI

Change-Id: I7abef37169dec1ef4b68e760dee5214c147c1915
diff --git a/src/profile-editor.cpp b/src/profile-editor.cpp
new file mode 100644
index 0000000..ac5dcbf
--- /dev/null
+++ b/src/profile-editor.cpp
@@ -0,0 +1,108 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
+#include "profile-editor.h"
+#include "ui_profile-editor.h"
+#include <QtSql/QSqlRecord>
+#include <QtSql/QSqlField>
+#include <QtSql/QSqlError>
+
+#ifndef Q_MOC_RUN
+#include "logging.h"
+#endif
+
+INIT_LOGGER("ProfileEditor")
+
+using namespace std;
+
+ProfileEditor::ProfileEditor(QWidget *parent) 
+  : QDialog(parent)
+  , ui(new Ui::ProfileEditor)
+  , m_tableModel(new QSqlTableModel())
+{
+  ui->setupUi(this);
+
+  connect(ui->addRowButton, SIGNAL(clicked()),
+          this, SLOT(onAddClicked()));
+  connect(ui->deleteRowButton, SIGNAL(clicked()),
+          this, SLOT(onDeleteClicked()));
+  connect(ui->okButton, SIGNAL(clicked()),
+          this, SLOT(onOkClicked()));
+}
+
+ProfileEditor::~ProfileEditor()
+{
+    delete ui;
+    delete m_tableModel;
+}
+
+void
+ProfileEditor::onCloseDBModule()
+{
+  _LOG_DEBUG("close db module");
+  if(m_tableModel)
+    {
+      delete m_tableModel;
+      _LOG_DEBUG("tableModel closed");
+    }
+}
+
+void
+ProfileEditor::onIdentityUpdated(const QString& identity)
+{
+  m_tableModel = new QSqlTableModel();
+
+  m_identity = identity;
+  ui->identityInput->setText(identity);
+  
+  m_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
+  m_tableModel->setTable("SelfProfile");
+  m_tableModel->select();
+  m_tableModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Type"));
+  m_tableModel->setHeaderData(1, Qt::Horizontal, QObject::tr("Value"));
+
+  ui->profileTable->setModel(m_tableModel);
+  ui->profileTable->show();
+}
+
+void
+ProfileEditor::onAddClicked()
+{
+  int rowCount = m_tableModel->rowCount();
+  QSqlRecord record;
+  m_tableModel->insertRow(rowCount);
+  m_tableModel->setRecord(rowCount, record);
+}
+
+void
+ProfileEditor::onDeleteClicked()
+{
+  QItemSelectionModel* selectionModel = ui->profileTable->selectionModel();
+  QModelIndexList indexList = selectionModel->selectedIndexes();
+
+  int i = indexList.size() - 1;  
+  for(; i >= 0; i--)
+    m_tableModel->removeRow(indexList[i].row());
+    
+  m_tableModel->submitAll();
+}
+
+void
+ProfileEditor::onOkClicked()
+{
+  m_tableModel->submitAll();
+  emit updateProfile();
+  this->hide();
+}
+
+#if WAF
+#include "profile-editor.moc"
+#include "profile-editor.cpp.moc"
+#endif