Article dialog implementation under progress
[biaweb_qt.git] / main_window.py
index f917e76..b2547b6 100644 (file)
@@ -5,6 +5,7 @@ import PyQt4
 import ui_main_window
 import site_configuration_dialog as scd
 import category_dialog as catd
+import article_dialog as artd
 import biaweb_db
 import sys
 
@@ -38,7 +39,42 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow):
                        qrow = PyQt4.QtGui.QTreeWidgetItem ([str(item[0]), str(item[1])])
                        self.articles.addTopLevelItem (qrow)
 
-       # configuration dialog
+       # when the view is refreshed
+       def onViewRefresh (self):
+               if self.current_db is not None:
+                       self.repopulate_categories ()
+                       self.repopulate_articles ()
+
+       # when add article is triggered
+       def onArticleAdd (self):
+               if self.current_db == None:
+                       PyQt4.QtGui.QMessageBox.critical (self, "Error",
+                                                       "Cannot create article. You need to create or open a website first")
+               else:
+                       catid = self.get_selected_item_id (self.categories)
+                       # if no category is selected
+                       if catid is None:
+                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "No category selected for article")
+                               return
+                       artdlg = artd.ArticleDialog (self)
+                       artdlg.exec_ ()
+
+
+       # when edit article is triggered
+       def onArticleEdit (self):
+               pass
+
+       # when delete article is triggered
+       def onArticleDelete (self):
+               pass
+
+       # when item selection is changed in categories tree widget
+       def onCategorySelectionChanged (self):
+               if self.current_db is not None:
+                       catid = self.get_selected_item_id (self.categories)
+                       self.repopulate_articles (catid)
+
+       # when configuration menu is activated
        def onConfiguration (self):
                if self.current_db == None:
                        PyQt4.QtGui.QMessageBox.critical (self, "Error",
@@ -47,6 +83,11 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow):
                        dlg = scd.SiteConfigDialog (self)
                        configs = biaweb_db.get_configuration (self.current_db)
 
+                       if configs == False:
+                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in reading configuration")
+                               return
+
+                       # set the data
                        dlg.site_url.setText (configs[0])
                        dlg.site_title.setText (configs[1])
                        dlg.keywords.setText (configs[2])
@@ -56,6 +97,7 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow):
                        dlg.copyright.setText (configs[6])
 
                        if (dlg.exec_ () == PyQt4.QtGui.QDialog.Accepted):
+                               # if accepted, get the data and store in database
                                site_title = str (dlg.site_title.text ()).strip ()
                                site_url = str (dlg.site_url.text ()).strip ()
                                keywords = str (dlg.keywords.text ()).strip ()
@@ -63,12 +105,88 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow):
                                description = str (dlg.description.toPlainText ()).strip ()
                                num_rss = dlg.num_rss_items.value ()
                                copyright = str (dlg.copyright.text ()).strip ()
+                               # database update
                                flag = biaweb_db.set_configuration (self.current_db, site_title, site_url, keywords, description,
                                                                                        copyright, num_rss, destination)
                                if flag == False:
                                        PyQt4.QtGui.QMessageBox.critical (self, "Error",
                                                                                        "SQLite 3 error in updating configuration")
 
+       # function to get the category or article ID from current selected item in a tree widget
+       def get_selected_item_id (self, twidget):
+               selitems = twidget.selectedItems ()
+               if selitems:
+                       # get the first column data as integer
+                       selindex = selitems[0].data(0, 0).toInt ()[0]
+                       return selindex
+               else:
+                       return None
+
+       # category edit action
+       def onCategoryEdit (self):
+               # if no database is open
+               if self.current_db == None:
+                       PyQt4.QtGui.QMessageBox.critical (self, "Error",
+                                                       "Cannot edit category. You need to create or open a website first")
+               # database is open
+               else:
+                       catid = self.get_selected_item_id (self.categories)
+                       # if no category is selected, display an error
+                       if catid is None:
+                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "No category selected")
+                       # category is selected
+                       else:
+                               cat = biaweb_db.get_category (self.current_db, catid)
+                               # if the category cannot be retrieved from database
+                               if cat == False:
+                                       PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error reading category")
+                                       return
+
+                               # set the data in the dialog
+                               dlg = catd.CategoryDialog (self)
+                               dlg.category_name.setText (cat[1])
+                               dlg.category_desc.setText (cat[2])
+                               dlg.category_stub.setText (cat[3])
+
+                               # if accepted
+                               if dlg.exec_ () == PyQt4.QtGui.QDialog.Accepted:
+                                       category_name = str (dlg.category_name.text ()).strip ()
+                                       category_desc = str (dlg.category_desc.text ()).strip ()
+                                       category_stub = str (dlg.category_stub.text ()).strip ()
+
+                                       ret = biaweb_db.update_category (self.current_db,
+                                                                                               catid, category_name, category_desc, category_stub)
+                                       if ret == True:
+                                               PyQt4.QtGui.QMessageBox.information (self, "Success", "Category successfully updated")
+                                       else:
+                                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in updating category")
+
+
+       # category delete action
+       def onCategoryDelete (self):
+               # if there is no database
+               if self.current_db == None:
+                       PyQt4.QtGui.QMessageBox.critical (self, "Error",
+                                                               "Cannot edit category. You need to create or open a website first")
+               else:
+                       # get the selected category
+                       catid = self.get_selected_item_id (self.categories)
+                       if catid is None:
+                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "No category selected")
+                       # category is selected
+                       else:
+                               # get confirmation first
+                               flag = PyQt4.QtGui.QMessageBox.question (self, "Confirm",
+                       "This will delete the category and all associated articles. Are you sure you wish to continue?",
+                       PyQt4.QtGui.QMessageBox.Yes, PyQt4.QtGui.QMessageBox.No)
+                               # if confirmed
+                               if flag == PyQt4.QtGui.QMessageBox.Yes:
+                                       ret = biaweb_db.remove_category (self.current_db, catid)
+                                       if ret == False:
+                                               PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in deleting category")
+                                       else:
+                                               self.repopulate_categories ()
+                                               self.repopulate_articles ()
 
        # category add action
        def onCategoryAdd (self):