X-Git-Url: https://harishankar.org/repos/?a=blobdiff_plain;f=main_window.py;h=4d4afa35dd6e95cb04832aeb7e00212fce277856;hb=8c9cfa39545fd48c66d4e795a6d2d7faa396c6c9;hp=5902fbccbc3a362a29036331131c68ca4c4ecb72;hpb=35c21d64e5d7554d2c610599a87c7f236b83d992;p=biaweb_qt.git diff --git a/main_window.py b/main_window.py index 5902fbc..4d4afa3 100644 --- a/main_window.py +++ b/main_window.py @@ -14,12 +14,124 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow): self.setupUi (self) self.current_db = None + # refresh the category list + def repopulate_categories (self): + recs = biaweb_db.get_categories (self.current_db) + if recs == False: + PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in getting the categories") + return + + self.categories.clear () + for (id, name, desc, stub) in recs: + qrow = PyQt4.QtGui.QTreeWidgetItem ([str(id), str(name)]) + self.categories.addTopLevelItem (qrow) + + # refresh the articles list + def repopulate_articles (self, catid=None): + recs = biaweb_db.get_articles (self.current_db, catid) + if recs == False: + PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in getting the articles") + return + + self.articles.clear () + for item in recs: + qrow = PyQt4.QtGui.QTreeWidgetItem ([str(item[0]), str(item[1])]) + self.articles.addTopLevelItem (qrow) + + # configuration dialog + def onConfiguration (self): + if self.current_db == None: + PyQt4.QtGui.QMessageBox.critical (self, "Error", + "Cannot edit configuration. You need to create or open a website first") + else: + 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]) + dlg.description.setPlainText (configs[3]) + dlg.num_rss_items.setValue (configs[4]) + dlg.destination.setText (configs[5]) + 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 () + destination = str (dlg.destination.text ()).strip () + 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 add action def onCategoryAdd (self): # if there is no database if self.current_db == None: PyQt4.QtGui.QMessageBox.critical (self, "Error", - "Cannot add category. You need to create or open a website first.") + "Cannot add category. You need to create or open a website first") else: # show the category add dialog dlg = catd.CategoryDialog (self) @@ -31,9 +143,20 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow): ret = biaweb_db.create_category (self.current_db, cat_name, cat_desc, cat_stub) if ret == True: PyQt4.QtGui.QMessageBox.information (self, "Success", "Category successfully created") + self.repopulate_categories () + self.repopulate_articles () else: PyQt4.QtGui.QMessageBox.critical (self, "Error", "SQLite 3 error in creating category") + # file open menu is clicked + def onFileOpen (self): + filename = PyQt4.QtGui.QFileDialog.getOpenFileName (self, "Open Site Database") + if filename: + self.current_db = str (filename) + self.setWindowTitle ("BiaWeb - " + self.current_db) + self.repopulate_categories () + self.repopulate_articles () + # file new menu is clicked def onFileNew (self): # show the site configuration dialog to get the new site details @@ -58,6 +181,8 @@ class MainWindow (PyQt4.QtGui.QMainWindow, ui_main_window.Ui_MainWindow): if flag == True: PyQt4.QtGui.QMessageBox.information (self, "Success", "New site db successfully created") + self.articles.clear () + self.categories.clear () else: PyQt4.QtGui.QMessageBox.critical (self, "Error", "System or SQLite 3 error in creating database")