git-svn-id: file:///svnroot/family-shop-mgr@35 26eb2498-383b-47a6-be48-5d6f36779e85
[family-shop-mgr] / code / family-shop-mgr / GUI / FamilyShoppingManagerMainWindow.cpp
diff --git a/code/family-shop-mgr/GUI/FamilyShoppingManagerMainWindow.cpp b/code/family-shop-mgr/GUI/FamilyShoppingManagerMainWindow.cpp
new file mode 100644 (file)
index 0000000..1041806
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * This file is part of family-shop-mgr.
+ *
+ * family-shop-mgr is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * family-shop-mgr is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with family-shop-mgr.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Unai IRIGOYEN
+ * Date: 12/07/2009
+ *
+ */
+
+#include "FamilyShoppingManagerMainWindow.h"
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QInputDialog>
+
+#include "ListManagerView.h"
+#include "GoShoppingView.h"
+#include "ShoppingTreeModel.h"
+
+/*******************************************************************/
+FamilyShoppingManagerMainWindow::FamilyShoppingManagerMainWindow(QWidget *parent)
+    : QMainWindow(parent), activityView(NULL), //editMenu(NULL),
+    showCheckedItemsAction(NULL), goShoppingAction(NULL), endShoppingAction(NULL)
+{
+    aboutAction = new QAction(tr("&About"), this);
+    aboutAction->setSoftKeyRole(QAction::PositiveSoftKey);
+    connect(aboutAction, SIGNAL(triggered()), this, SLOT(showAbout()));
+    menuBar()->addAction(aboutAction);
+
+
+    showListManager();
+}
+
+/*******************************************************************/
+FamilyShoppingManagerMainWindow::~FamilyShoppingManagerMainWindow()
+{
+    delete activityView;
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::showListManager()
+{
+    menuBar()->clear();
+
+    delete showCheckedItemsAction;
+    delete endShoppingAction;
+
+    delete activityView;
+    activityView = new ListManagerView("ShoppingList.xml", this);
+
+    addCategoryAction = new QAction(tr("Add category"), this);
+    addCategoryAction->setSoftKeyRole(QAction::PositiveSoftKey);
+    connect(addCategoryAction, SIGNAL(triggered()),
+            this, SLOT(addCategory()));
+    menuBar()->addAction(addCategoryAction);
+    removeCategoryAction = new QAction(tr("Remove category"), this);
+    removeCategoryAction->setSoftKeyRole(QAction::NegativeSoftKey);
+    connect(removeCategoryAction, SIGNAL(triggered()),
+            this, SLOT(removeCategoryOrItem()));
+    menuBar()->addAction(removeCategoryAction);
+    addItemAction = new QAction(tr("Add item"), this);
+    addItemAction->setSoftKeyRole(QAction::PositiveSoftKey);
+    connect(addItemAction, SIGNAL(triggered()),
+            this, SLOT(addItem()));
+    menuBar()->addAction(addItemAction);
+    removeItemAction = new QAction(tr("Remove item"), this);
+    removeItemAction->setSoftKeyRole(QAction::NegativeSoftKey);
+    connect(removeItemAction, SIGNAL(triggered()),
+            this, SLOT(removeCategoryOrItem()));
+    menuBar()->addAction(removeItemAction);
+
+    goShoppingAction = new QAction(tr("Go shopping!"), this);
+    goShoppingAction->setSoftKeyRole(QAction::PositiveSoftKey);
+    connect(goShoppingAction, SIGNAL(triggered()),
+            this, SLOT(showGoShopping()));
+    menuBar()->addAction(goShoppingAction);
+
+    menuBar()->addAction(aboutAction);
+
+    setCentralWidget(activityView);
+    update();
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::showGoShopping()
+{
+    menuBar()->clear();
+
+    delete addCategoryAction;
+    delete addItemAction;
+    delete removeCategoryAction;
+    delete removeItemAction;
+    delete goShoppingAction;
+
+    delete activityView;
+    activityView = new GoShoppingView("ShoppingList.xml", this);
+    setCentralWidget(activityView);
+
+    showCheckedItemsAction = new QAction(tr("&Show checked"), this);
+    showCheckedItemsAction->setCheckable(true);
+    showCheckedItemsAction->setSoftKeyRole(QAction::PositiveSoftKey);
+    connect(showCheckedItemsAction, SIGNAL(toggled(bool)),
+            activityView, SLOT(showChecked(bool)));
+    menuBar()->addAction(showCheckedItemsAction);
+
+    endShoppingAction = new QAction(tr("&End shopping"), this);
+    endShoppingAction->setSoftKeyRole(QAction::NegativeSoftKey);
+    connect(endShoppingAction, SIGNAL(triggered()),
+            this, SLOT(showListManager()));
+    menuBar()->addAction(endShoppingAction);
+
+    menuBar()->addAction(aboutAction);
+    update();
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::showAbout()
+{
+    QString text;
+    text = tr("Application name:") + " Family shopping manager\n\n";
+    text += tr("Project maintainer:") + "\n";
+    text += "\tUnai IRIGOYEN";
+    text += "\n\n";
+    text += tr("Developers:") + "\n";
+    text += "\tUnai IRIGOYEN";
+    text += "\n\n";
+    text += tr("Licence:") + " GPLv3";
+    QMessageBox::about(this,tr("About"), text);
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::addCategory()
+{
+    ShoppingTreeModel *model = (ShoppingTreeModel*)
+                               ((ListManagerView*) activityView)->model();
+
+    bool* ok = new bool(false);
+    QString name = QInputDialog::getText(this, tr("Enter category name"),
+                                         tr("Category name:"),
+                                         QLineEdit::Normal, QString(), ok);
+    if(!ok)
+        return;
+
+    if(((ListManagerView*) activityView)->addCategory(name))
+        ((ListManagerView*) activityView)->updateActions();
+    delete ok;
+}
+
+/*******************************************************************
+void FamilyShoppingManagerMainWindow::addSubCategory()
+{
+    QModelIndex index = ((ListManagerView*) activityView)->
+                        selectionModel()->currentIndex().parent();
+    ShoppingTreeModel *model = (ShoppingTreeModel*)
+                               ((ListManagerView*) activityView)->model();
+
+    bool* ok = new bool(false);
+    QString name = QInputDialog::getText(this, tr("Enter category name"),
+                                         tr("Category name:"),
+                                         QLineEdit::Normal, QString(), ok);
+    if(!ok)
+        return;
+
+    if(model->addSubCategory(name, index.row()+1, index))
+        ((ListManagerView*) activityView)->updateActions();
+
+    delete ok;
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::addItem()
+{
+    QModelIndex index = ((ListManagerView*) activityView)->
+                        selectionModel()->currentIndex().parent();
+    ShoppingTreeModel *model = (ShoppingTreeModel*)
+                               ((ListManagerView*) activityView)->model();
+
+    bool* ok = new bool(false);
+    QString name = QInputDialog::getText(this, tr("Enter item name"),
+                                         tr("Item name:"),
+                                         QLineEdit::Normal, QString(), ok);
+    if(!ok)
+        return;
+
+    if(((ListManagerView*) activityView)->addItem(name))
+        ((ListManagerView*) activityView)->updateActions();
+
+    delete ok;
+}
+
+/*******************************************************************/
+void FamilyShoppingManagerMainWindow::removeCategoryOrItem()
+{
+     QModelIndex index = ((ListManagerView*) activityView)->
+                         selectionModel()->currentIndex();
+     ShoppingTreeModel *model = (ShoppingTreeModel*)
+                                ((ListManagerView*) activityView)->model();
+     if (model->removeElement(index))
+         ((ListManagerView*) activityView)->updateActions();
+}