示例#1
0
    def cellSelected(self):
        """ When the table widget memo cell is selected display the memo.
        Update memo text, or delete memo by clearing text.
        If a new memo also show in table widget by displaying YES in the memo column"""

        x = self.tableWidget.currentRow()
        y = self.tableWidget.currentColumn()

        if y == self.MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.attributes[x]['memo'])
            ui.setupUi(Dialog_memo, "Attribute memo " + self.attributes[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget.setItem(x, self.MEMO_COLUMN, QtGui.QTableWidgetItem())
            else:
                self.tableWidget.setItem(x, self.MEMO_COLUMN, QtGui.QTableWidgetItem("Yes"))

            # update attributes list and database
            self.attributes[x]['memo'] = str(memo).encode('raw_unicode_escape')
            cur = self.settings['conn'].cursor()
            cur.execute("update attributes set memo=? where name=?", (self.attributes[x]['memo'], self.attributes[x]['name']))
            self.settings['conn'].commit()
示例#2
0
    def codeMemo(self):
        """ Add a memo to the selected code """

        if self.filename == {}:
            QtGui.QMessageBox.warning(None, 'Warning', "No file was selected",
                                      QtGui.QMessageBox.Ok)
            return
        location = self.textEd.textCursor().selectionStart()
        codehere = None
        for item in self.coding:
            if location >= item['selfirst'] and location <= item['selend']:
                codehere = item
        if codehere is None:
            return

        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(codehere['memo'])
        ui.setupUi(
            Dialog_memo, "Memo the code here <" + str(codehere['selfirst']) +
            " - " + str(codehere['selend']) + "> ")
        Dialog_memo.exec_()
        memo = ui.getMemo()
        cur = self.settings['conn'].cursor()
        cur.execute(
            "update " + self.settings['codertable'] +
            " set memo=? where cid=? and selfirst =? and selend =?",
            (memo, codehere['cid'], codehere['selfirst'], codehere['selend']))
        self.settings['conn'].commit()

        # why are these here ?
        self.unlight()
        self.highlight()
示例#3
0
文件: Codes.py 项目: Ronggui/PyQDA
    def codeMemo(self):
        """ Add a memo to the selected code """

        if self.filename == {}:
            QtGui.QMessageBox.warning(None, "Warning", "No file was selected", QtGui.QMessageBox.Ok)
            return
        location = self.textEd.textCursor().selectionStart()
        codehere = None
        for item in self.coding:
            if location >= item["selfirst"] and location <= item["selend"]:
                codehere = item
        if codehere is None:
            return

        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(codehere["memo"])
        ui.setupUi(
            Dialog_memo, "Memo the code here <" + str(codehere["selfirst"]) + " - " + str(codehere["selend"]) + "> "
        )
        Dialog_memo.exec_()
        memo = ui.getMemo()
        cur = self.settings["conn"].cursor()
        cur.execute(
            "update " + self.settings["codertable"] + " set memo=? where cid=? and selfirst =? and selend =?",
            (memo, codehere["cid"], codehere["selfirst"], codehere["selend"]),
        )
        self.settings["conn"].commit()

        # why are these here ?
        self.unlight()
        self.highlight()
示例#4
0
    def catsCellSelected(self):
        """ Open a memo dialog if a category memo cell is selected """

        x = self.tableWidget_cats.currentRow()
        y = self.tableWidget_cats.currentColumn()

        # category memo column
        if y == self.CAT_MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.cats[x]['memo'])
            ui.setupUi(Dialog_memo, "Category memo " + self.cats[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_cats.setItem(x, self.CAT_MEMO_COLUMN, QtGui.QTableWidgetItem())
            else:
                self.tableWidget_cats.setItem(x, self.CAT_MEMO_COLUMN, QtGui.QTableWidgetItem("Yes"))

            #update cats list and database
            self.cats[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update codecat set memo=? where catid=?", (self.cats[x]['memo'], self.cats[x]['catid']))
            self.settings['conn'].commit()

        # view codes for this category
        if y == self.CAT_VIEW_COLUMN:
            # important need to unselect all codes in tableWidget

            if self.selectedCategoryId == -1:  # all categories currently displayed, so change this to selected category
                self.pushButton_link.setEnabled(False)
                self.pushButton_unlink.setEnabled(True)
                self.selectedCategoryId = int(self.tableWidget_cats.item(x, self.CAT_ID_COLUMN).text())
                for (row, item) in enumerate(self.cats):
                    if self.selectedCategoryId != int(self.tableWidget_cats.item(row, self.CAT_ID_COLUMN).text()):
                        self.tableWidget_cats.hideRow(row)  # hide other categories

                # now show codes associated with this category
                for(row, item) in enumerate(self.freecode):
                    hide = True
                    for treeCodeItem in self.treecode:
                        #print(str(treeCodeItem['catid'])+" "+str(self.selectedCategoryId)+" co:"+str(treeCodeItem['cid'])+" "+str(item['id']))
                        if int(treeCodeItem['catid']) == self.selectedCategoryId and treeCodeItem['cid'] == item['id']:
                            hide = False
                    if hide:
                        self.tableWidget_codes.hideRow(row)
            else:
                self.selectedCategoryId = -1
                self.pushButton_link.setEnabled(True)
                self.pushButton_unlink.setEnabled(False)
                for (row, item) in enumerate(self.cats):
                    self.tableWidget_cats.showRow(row)
                for(row, item) in enumerate(self.freecode):
                    self.tableWidget_codes.showRow(row)

                # need to clear selection in category table when showing all rows
                # as there are no selected items but the previous view cell appears selected
                self.tableWidget_cats.clearSelection()
示例#5
0
文件: Cases.py 项目: Ronggui/PyQDA
    def cellSelected(self):
        """ When the table widget memo cell is selected display the memo.
        Update memo text, or delete memo by clearing text.
        If a new memo also show in table widget by displaying YES in the memo column """

        x = self.tableWidget_cases.currentRow()
        y = self.tableWidget_cases.currentColumn()

        if x == -1:
            self.selectedCase = None
            self.textEd.clear()
            self.caseLinks = []
        else:
            self.selectedCase = self.cases[x]
            # clear case text viewed if the caseid has changed
            if self.caseTextViewed != [] and self.caseTextViewed[0]['caseid'] != self.selectedCase['id']:
                self.caseTextViewed = []
                self.caseLinks = []
                self.textEd.clear()

            self.unlight()
            #print("Selected case: " + str(self.selectedCase['id']) +" "+self.selectedCase['name'])

            # get caselinks for this file
            if self.selectedFile is not None:
                #print("File Selected: " + str(self.selectedFile['id'])+"  "+self.selectedFile['file'])
                self.caseLinks = []
                cur = self.settings['conn'].cursor()
                cur.execute("select caseid, fid, selfirst, selend, status, owner, date, memo from caselinkage where fid = ? and caseid = ?",
                            [self.selectedFile['id'], self.selectedCase['id']])
                result = cur.fetchall()
                for row in result:
                    self.caseLinks.append({'caseid':row[0], 'fid':row[1], 'selfirst':row[2], 'selend':row[3], 'status':row[4], 'owner':row[5],
                                        'date':row[6], 'memo':row[7]})
            self.highlight()

        if y == self.MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.cases[x]['memo'])
            ui.setupUi(Dialog_memo, "File memo " + self.cases[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_cases.setItem(x, self.MEMO_COLUMN, QtGui.QTableWidgetItem())
            else:
                self.tableWidget_cases.setItem(x, self.MEMO_COLUMN, QtGui.QTableWidgetItem("Yes"))

            # update cases list and database
            self.cases[x]['memo'] = str(memo).encode('raw_unicode_escape')
            cur = self.settings['conn'].cursor()
            cur.execute("update cases set memo=? where id=?", (self.cases[x]['memo'], self.cases[x]['id']))
            self.settings['conn'].commit()
示例#6
0
文件: PyQDA.py 项目: Ronggui/PyQDA
    def projectMemo(self):
        """ Give the entire project a memo """

        if self.settings["projectName"] == "":
            QtGui.QMessageBox.warning(None, "No Project","You need to load or create a project first.")
            return
        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(self.project['memo'])
        ui.setupUi(Dialog_memo, "Project memo " + self.settings['projectName'])
        Dialog_memo.exec_()
        self.project['memo'] = ui.getMemo()
        cur = self.settings['conn'].cursor()
        cur.execute("update project set memo=?", [str(self.project['memo'])])
        self.settings['conn'].commit()
        self.logWidget.textEdit.append("Project memo entered")
示例#7
0
    def createFile(self):
        """ Create a new text file by entering text into the dialog """

        Dialog_text = QtGui.QDialog()
        ui = Ui_Dialog_memo("")
        ui.setupUi(Dialog_text, "New file")
        Dialog_text.exec_()
        fileText = ui.getMemo()
        fileName = ui.getFilename()
        if fileName == None or fileName == "":
            QtGui.QMessageBox.warning(None, 'Warning',"No filename was selected", QtGui.QMessageBox.Ok)
            return
        #check for non-unique filename
        if any(d['name'] == fileName for d in self.sourcetext):
            QtGui.QMessageBox.warning(None, 'Warning',"Filename in use", QtGui.QMessageBox.Ok)
            return

        # increment fileId until a spare id is available
        fileId = 1
        while any(d['id'] == fileId for d in self.sourcetext):
            fileId = fileId + 1

        # update database
        newFile = {'name':fileName, 'id':fileId, 'file': fileText, 'memo':"", 'owner':self.settings['codername'], 'date':datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"), 'dateM':"", 'status':1}
        cur = self.settings['conn'].cursor()
        cur.execute("insert into source(name,id,file,memo,owner,date,dateM,status) values(?,?,?,?,?,?,?,?)",
                    (newFile['name'],newFile['id'],newFile['file'],newFile['memo'],newFile['owner'],newFile['date'],newFile['dateM'],newFile['status']))
        self.settings['conn'].commit()
        self.log +=newFile['name'] + " added.\n"

        # clear and refill table widget
        for r in self.sourcetext:
            self.tableWidget_files.removeRow(0)

        self.sourcetext.append(newFile)
        for row, itm in enumerate(self.sourcetext):
            self.tableWidget_files.insertRow(row)
            item = QtGui.QTableWidgetItem(itm['name'])
            self.tableWidget_files.setItem(row,self.NAME_COLUMN, item)
            item = QtGui.QTableWidgetItem(itm['date'])
            self.tableWidget_files.setItem(row,self.DATE_COLUMN, item)
            if itm['memo'] != None and itm['memo'] != "":
                self.tableWidget_files.setItem(row, self.MEMO_COLUMN, QtGui.QTableWidgetItem("Yes"))
            item = QtGui.QTableWidgetItem(str(itm['id']))
            self.tableWidget_files.setItem(row, self.ID_COLUMN, item)
        self.tableWidget_files.resizeColumnsToContents()
        self.tableWidget_files.resizeRowsToContents()
示例#8
0
文件: PyQDA.py 项目: Ronggui/PyQDA
    def projectMemo(self):
        """ Give the entire project a memo """

        if self.settings["projectName"] == "":
            QtGui.QMessageBox.warning(
                None, "No Project",
                "You need to load or create a project first.")
            return
        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(self.project['memo'])
        ui.setupUi(Dialog_memo, "Project memo " + self.settings['projectName'])
        Dialog_memo.exec_()
        self.project['memo'] = ui.getMemo()
        cur = self.settings['conn'].cursor()
        cur.execute("update project set memo=?", [str(self.project['memo'])])
        self.settings['conn'].commit()
        self.logWidget.textEdit.append("Project memo entered")
示例#9
0
    def viewFile(self):
        """ View and edit the file contents """

        x = self.tableWidget_files.currentRow()
        Dialog_memo = QtGui.QDialog()
        text = self.sourcetext[x]['file']
        ui = Ui_Dialog_memo(text)
        ui.setupUi(Dialog_memo, "View file: " + self.sourcetext[x]['name'] +" (ID:"+ str(self.sourcetext[x]['id'])+") "
                   +self.sourcetext[x]['owner'] + ", " + self.sourcetext[x]['date'])
        Dialog_memo.exec_()
        # update model and database
        fileText = ui.getMemo() ## unicode
        if fileText != self.sourcetext[x]['file']:
            # NEED TO CHECK THAT THERE ARE NO CODES OR ANNOATIONS OR CASES LINKED TO THIS FILE BEFORE COMMITING CHANGE
            # CHECK NOT YET IMPLEMENTED
            self.sourcetext[x]['file'] = fileText
            cur = self.settings['conn'].cursor()
            cur.execute("update source set file=? where id=?", (fileText, self.sourcetext[x]['id']))
            self.settings['conn'].commit()
示例#10
0
    def __init__(self, settings):
        self.settings = settings
        text = ""

        cur = self.settings['conn'].cursor()
        sql = "select freecode.id, freecode.name, count (freecode.name) from freecode left join coding"\
        " on  coding.cid = freecode.id left join  coding2 on  coding2.cid =  freecode.id group by freecode.name"
        cur.execute(sql)
        result1 = cur.fetchall()
        text = "CODING SUMMARY\n"
        textrows = []

        # for each code get the average characters and average words
        for row in result1:
            tmp = str(row[1]) + ", id:" + str(row[0]) + ", Count: " + str(row[2])
            sql = "select cid, seltext, length(seltext) from (select cid, seltext from coding union"\
            " select cid, seltext from coding2) where cid =" + str(row[0])
            cur.execute(sql)
            result2 = cur.fetchall()
            charSum = 0
            wordSum = 0
            for row2 in result2:
                charSum += row2[2]
                wordSum += len(re.findall(r'\w+', row2[1])) # approximates word length; doesn't = 2 words

            if len(result2) > 0:
                avgChar = int(charSum / len(result2))
                avgWords = int(wordSum / len(result2))
            else:
                avgChar = 0
                avgWords = 0
            tmp += ", Avg chars: " + str(avgChar) + ", Avg words: " + str(avgWords)
            textrows.append(tmp)

        for row in textrows:
            text += row + "\n"

        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(text)
        ui.setupUi(Dialog_memo, "Coding  summary")
        Dialog_memo.exec_()
示例#11
0
    def cellSelected(self):
        """ When cell selected in table widget, do something: change a code
        colour, change a code memo """

        x = self.tableWidget_codes.currentRow()
        y = self.tableWidget_codes.currentColumn()

        if y == self.COLOR_COLUMN:
            #print(self.freecode[x]['color'])
            Dialog_colorselect = QtGui.QDialog()
            ui = Ui_Dialog_colorselect(self.freecode[x]['color'])
            ui.setupUi(Dialog_colorselect)
            ok = Dialog_colorselect.exec_()
            if ok:
                selectedColor = ui.getColor()
                if selectedColor is not None:
                    item = QtGui.QTableWidgetItem(
                    )  # an empty item, used to have color name
                    item.setBackground(
                        QtGui.QBrush(QtGui.QColor(selectedColor['hex'])))
                    self.tableWidget_codes.setItem(x, self.COLOR_COLUMN, item)
                    self.tableWidget_codes.clearSelection()

                    #update freecode list, database and currently viewed file
                    self.freecode[x]['color'] = selectedColor['colname']
                    cur = self.settings['conn'].cursor()
                    cur.execute(
                        "update freecode set color=? where id=?",
                        (self.freecode[x]['color'], self.freecode[x]['id']))
                    self.settings['conn'].commit()
                    self.unlight()
                    self.highlight()

        if y == self.MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.freecode[x]['memo'])
            ui.setupUi(Dialog_memo, "Code memo " + self.freecode[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_codes.setItem(x, self.MEMO_COLUMN,
                                               QtGui.QTableWidgetItem())
            else:
                self.tableWidget_codes.setItem(x, self.MEMO_COLUMN,
                                               QtGui.QTableWidgetItem("Yes"))

            #update freecode list and database
            self.freecode[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update freecode set memo=? where id=?",
                        (self.freecode[x]['memo'], self.freecode[x]['id']))
            self.settings['conn'].commit()
示例#12
0
    def viewJournal(self):
        """ View and edit journal contents """

        x = self.tableWidget_journals.currentRow()
        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(self.journals[x]['journal'])
        ui.setupUi(Dialog_memo, self.journals[x]['name'] +" "+ self.journals[x]['owner'] +", "+self.journals[x]['date'])
        Dialog_memo.exec_()
        # update model and database
        newText = ui.getMemo()
        newText = newText.decode('unicode-escape')
        try:
            pass
            newText = newText.decode("utf-8", "replace")
        except UnicodeDecodeError:
            print("unicode error")
        if newText != self.journals[x]['journal']:
            self.journals[x]['journal'] = newText
            cur = self.settings['conn'].cursor()
            cur.execute("update journal set journal=? where name=?", (newText, self.journals[x]['name']))
            self.settings['conn'].commit()
示例#13
0
    def viewFile(self):
        """ View and edit the file contents """

        x = self.tableWidget_files.currentRow()
        Dialog_memo = QtGui.QDialog()
        text = self.sourcetext[x]['file']
        ui = Ui_Dialog_memo(text)
        ui.setupUi(
            Dialog_memo, "View file: " + self.sourcetext[x]['name'] + " (ID:" +
            str(self.sourcetext[x]['id']) + ") " +
            self.sourcetext[x]['owner'] + ", " + self.sourcetext[x]['date'])
        Dialog_memo.exec_()
        # update model and database
        fileText = ui.getMemo()  ## unicode
        if fileText != self.sourcetext[x]['file']:
            # NEED TO CHECK THAT THERE ARE NO CODES OR ANNOATIONS OR CASES LINKED TO THIS FILE BEFORE COMMITING CHANGE
            # CHECK NOT YET IMPLEMENTED
            self.sourcetext[x]['file'] = fileText
            cur = self.settings['conn'].cursor()
            cur.execute("update source set file=? where id=?",
                        (fileText, self.sourcetext[x]['id']))
            self.settings['conn'].commit()
示例#14
0
    def fileCellSelected(self):
        """ When memo cells are selected in the table widget, open a memo dialog """
        x = self.tableWidget_files.currentRow()
        y = self.tableWidget_files.currentColumn()

        if y == self.FILE_MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.source[x]['memo'])
            ui.setupUi(Dialog_memo, "File memo "+ self.source[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_files.setItem(x, 1, QtGui.QTableWidgetItem())
            else:
                self.tableWidget_files.setItem(x, 1, QtGui.QTableWidgetItem("Yes"))

            #update source list and database
            self.source[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update source set memo=? where id=?", (self.source[x]['memo'], self.source[x]['id']))
            self.settings['conn'].commit()
示例#15
0
    def codesCellSelected(self):
        """ When colour or memo cells are selected in the table widget,
        open a memo dialog or colour selector dialog """

        x = self.tableWidget_codes.currentRow()
        y = self.tableWidget_codes.currentColumn()

        if y == self.CODE_COLOR_COLUMN:
            Dialog_colorselect = QtGui.QDialog()
            ui = Ui_Dialog_colorselect(self.freecode[x]['color'])
            ui.setupUi(Dialog_colorselect)
            ok = Dialog_colorselect.exec_()
            if ok:
                selectedColor = ui.getColor()
                if selectedColor != None:
                    item = QtGui.QTableWidgetItem(
                    )  # an empty item, used to have color name
                    item.setBackground(
                        QtGui.QBrush(QtGui.QColor(selectedColor['hex'])))
                    self.tableWidget_codes.setItem(x, self.CODE_COLOR_COLUMN,
                                                   item)
                    self.tableWidget_codes.clearSelection()

                    #update freecode list and database
                    self.freecode[x]['color'] = selectedColor['colname']
                    cur = self.settings['conn'].cursor()
                    cur.execute(
                        "update freecode set color=? where id=?",
                        (self.freecode[x]['color'], self.freecode[x]['id']))
                    self.settings['conn'].commit()

        if y == self.CODE_MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.freecode[x]['memo'])
            ui.setupUi(Dialog_memo, "Code memo " + self.freecode[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_codes.setItem(x, self.CODE_MEMO_COLUMN,
                                               QtGui.QTableWidgetItem())
            else:
                self.tableWidget_codes.setItem(x, self.CODE_MEMO_COLUMN,
                                               QtGui.QTableWidgetItem("Yes"))

            #update freecode list and database
            self.freecode[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update freecode set memo=? where id=?",
                        (self.freecode[x]['memo'], self.freecode[x]['id']))
            self.settings['conn'].commit()
示例#16
0
    def createJournal(self):
        """ Create a new journal by entering text into the dialog """

        Dialog_text = QtGui.QDialog()
        ui = Ui_Dialog_memo("")
        ui.setupUi(Dialog_text, "New journal")
        Dialog_text.exec_()
        newText = ui.getMemo()
        journalName = ui.getFilename()

        if journalName is None or journalName == "":
            QtGui.QMessageBox.warning(None, "Warning", "No journal name selected")
            return
        #check for non-unique filename
        if any(d['name'] == journalName for d in self.journals):
            QtGui.QMessageBox.warning(None, "Warning", str(journalName) + " is already in use")
            return

        # update database
        newJrnl = {'name':journalName, 'journal': newText, 'owner':self.settings['codername'], 'date':datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"), 'dateM':"", 'status':1}
        cur = self.settings['conn'].cursor()
        cur.execute("insert into journal(name,journal,owner,date,dateM,status) values(?,?,?,?,?,?)",
                    (newJrnl['name'],newJrnl['journal'],newJrnl['owner'],newJrnl['date'],newJrnl['dateM'],newJrnl['status']))
        self.settings['conn'].commit()
        self.log += "Journal " + newJrnl['name'] + " created\n"

        # clear and refill table widget
        for r in self.journals:
            self.tableWidget_journals.removeRow(0)
        self.journals.append(newJrnl)
        for row, itm in enumerate(self.journals):
            self.tableWidget_journals.insertRow(row)
            item = QtGui.QTableWidgetItem(itm['name'])
            self.tableWidget_journals.setItem(row, self.NAME_COLUMN, item)
            item = QtGui.QTableWidgetItem(itm['date'])
            self.tableWidget_journals.setItem(row, self.DATE_COLUMN, item)
        self.tableWidget_journals.resizeColumnsToContents()
        self.tableWidget_journals.resizeRowsToContents()
示例#17
0
    def viewJournal(self):
        """ View and edit journal contents """

        x = self.tableWidget_journals.currentRow()
        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(self.journals[x]['journal'])
        ui.setupUi(
            Dialog_memo, self.journals[x]['name'] + " " +
            self.journals[x]['owner'] + ", " + self.journals[x]['date'])
        Dialog_memo.exec_()
        # update model and database
        newText = ui.getMemo()
        newText = newText.decode('unicode-escape')
        try:
            pass
            newText = newText.decode("utf-8", "replace")
        except UnicodeDecodeError:
            print("unicode error")
        if newText != self.journals[x]['journal']:
            self.journals[x]['journal'] = newText
            cur = self.settings['conn'].cursor()
            cur.execute("update journal set journal=? where name=?",
                        (newText, self.journals[x]['name']))
            self.settings['conn'].commit()
示例#18
0
    def fileCellSelected(self):
        """ When memo cells are selected in the table widget, open a memo dialog """
        x = self.tableWidget_files.currentRow()
        y = self.tableWidget_files.currentColumn()

        if y == self.FILE_MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.source[x]['memo'])
            ui.setupUi(Dialog_memo, "File memo " + self.source[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_files.setItem(x, 1, QtGui.QTableWidgetItem())
            else:
                self.tableWidget_files.setItem(x, 1,
                                               QtGui.QTableWidgetItem("Yes"))

            #update source list and database
            self.source[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update source set memo=? where id=?",
                        (self.source[x]['memo'], self.source[x]['id']))
            self.settings['conn'].commit()
示例#19
0
    def createJournal(self):
        """ Create a new journal by entering text into the dialog """

        Dialog_text = QtGui.QDialog()
        ui = Ui_Dialog_memo("")
        ui.setupUi(Dialog_text, "New journal")
        Dialog_text.exec_()
        newText = ui.getMemo()
        journalName = ui.getFilename()

        if journalName is None or journalName == "":
            QtGui.QMessageBox.warning(None, "Warning",
                                      "No journal name selected")
            return
        #check for non-unique filename
        if any(d['name'] == journalName for d in self.journals):
            QtGui.QMessageBox.warning(None, "Warning",
                                      str(journalName) + " is already in use")
            return

        # update database
        newJrnl = {
            'name': journalName,
            'journal': newText,
            'owner': self.settings['codername'],
            'date': datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"),
            'dateM': "",
            'status': 1
        }
        cur = self.settings['conn'].cursor()
        cur.execute(
            "insert into journal(name,journal,owner,date,dateM,status) values(?,?,?,?,?,?)",
            (newJrnl['name'], newJrnl['journal'], newJrnl['owner'],
             newJrnl['date'], newJrnl['dateM'], newJrnl['status']))
        self.settings['conn'].commit()
        self.log += "Journal " + newJrnl['name'] + " created\n"

        # clear and refill table widget
        for r in self.journals:
            self.tableWidget_journals.removeRow(0)
        self.journals.append(newJrnl)
        for row, itm in enumerate(self.journals):
            self.tableWidget_journals.insertRow(row)
            item = QtGui.QTableWidgetItem(itm['name'])
            self.tableWidget_journals.setItem(row, self.NAME_COLUMN, item)
            item = QtGui.QTableWidgetItem(itm['date'])
            self.tableWidget_journals.setItem(row, self.DATE_COLUMN, item)
        self.tableWidget_journals.resizeColumnsToContents()
        self.tableWidget_journals.resizeRowsToContents()
示例#20
0
    def annotate(self):
        """ Add an annotation: or memo text to the current cursor position.
        The position is at a point infornt of the cursor.
        Annotations are displayed as a bolded character when text is highlighted """

        annotation = ""
        details = ""
        item = None
        if self.filename == {}:
            QtGui.QMessageBox.warning(None, 'Warning', "No file was selected",
                                      QtGui.QMessageBox.Ok)
            return
        selstart = self.textEd.textCursor().selectionStart()
        textLength = len(self.textEd.toPlainText())
        if selstart >= textLength:
            return

        for note in self.annotations:
            if note['position'] == selstart and note['fid'] == self.filename[
                    'id']:
                item = note  # use existing annotation
                details = item['owner'] + " " + item['date']

        # add new item to annotations, add to database and update GUI
        if item is None:
            #item = {'fid': int(self.filename['id']), 'position': selstart, 'annotation': str(annotation), 'owner':self.settings['codername'], 'date':datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"), 'dateM':None, 'status':1}
            item = {
                'fid': int(self.filename['id']),
                'position': selstart,
                'annotation': annotation,
                'owner': self.settings['codername'],
                'date':
                datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"),
                'dateM': None,
                'status': 1
            }

        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(item['annotation'])
        ui.setupUi(Dialog_memo, "Annotation: " + details)
        Dialog_memo.exec_()
        item['annotation'] = ui.getMemo()

        # if blank then delete the annotation
        if item['annotation'] == "":
            cur = self.settings['conn'].cursor()
            cur.execute("delete from annotation where position = ?",
                        (item['position'], ))  # note comma, this is a tuple
            self.settings['conn'].commit()
            for note in self.annotations:
                if note['position'] == item['position'] and note[
                        'fid'] == item['fid']:
                    self.annotations.remove(note)
            self.unlight()
            self.highlight()

        if item['annotation'] != "":
            self.annotations.append(item)
            self.highlight()
            cur = self.settings['conn'].cursor()
            ##cur.execute("insert into annotation"+" (fid,position,annotation,owner,date,dateM,status) values(?,?,?,?,?,?,?)"
            ##            ,(item['fid'],item['position'],item['annotation'].encode('raw_unicode_escape'),item['owner'],item['date'],item['dateM'],item['status']))
            cur.execute(
                "insert into annotation" +
                " (fid,position,annotation,owner,date,dateM,status) values(?,?,?,?,?,?,?)",
                (item['fid'], item['position'], item['annotation'],
                 item['owner'], item['date'], item['dateM'], item['status']))
            self.settings['conn'].commit()
示例#21
0
文件: Codes.py 项目: Ronggui/PyQDA
    def annotate(self):
        """ Add an annotation: or memo text to the current cursor position.
        The position is at a point infornt of the cursor.
        Annotations are displayed as a bolded character when text is highlighted """

        annotation = ""
        details = ""
        item = None
        if self.filename == {}:
            QtGui.QMessageBox.warning(None, "Warning", "No file was selected", QtGui.QMessageBox.Ok)
            return
        selstart = self.textEd.textCursor().selectionStart()
        textLength = len(self.textEd.toPlainText())
        if selstart >= textLength:
            return

        for note in self.annotations:
            if note["position"] == selstart and note["fid"] == self.filename["id"]:
                item = note  # use existing annotation
                details = item["owner"] + " " + item["date"]

        # add new item to annotations, add to database and update GUI
        if item is None:
            # item = {'fid': int(self.filename['id']), 'position': selstart, 'annotation': str(annotation), 'owner':self.settings['codername'], 'date':datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"), 'dateM':None, 'status':1}
            item = {
                "fid": int(self.filename["id"]),
                "position": selstart,
                "annotation": annotation,
                "owner": self.settings["codername"],
                "date": datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"),
                "dateM": None,
                "status": 1,
            }

        Dialog_memo = QtGui.QDialog()
        ui = Ui_Dialog_memo(item["annotation"])
        ui.setupUi(Dialog_memo, "Annotation: " + details)
        Dialog_memo.exec_()
        item["annotation"] = ui.getMemo()

        # if blank then delete the annotation
        if item["annotation"] == "":
            cur = self.settings["conn"].cursor()
            cur.execute("delete from annotation where position = ?", (item["position"],))  # note comma, this is a tuple
            self.settings["conn"].commit()
            for note in self.annotations:
                if note["position"] == item["position"] and note["fid"] == item["fid"]:
                    self.annotations.remove(note)
            self.unlight()
            self.highlight()

        if item["annotation"] != "":
            self.annotations.append(item)
            self.highlight()
            cur = self.settings["conn"].cursor()
            ##cur.execute("insert into annotation"+" (fid,position,annotation,owner,date,dateM,status) values(?,?,?,?,?,?,?)"
            ##            ,(item['fid'],item['position'],item['annotation'].encode('raw_unicode_escape'),item['owner'],item['date'],item['dateM'],item['status']))
            cur.execute(
                "insert into annotation" + " (fid,position,annotation,owner,date,dateM,status) values(?,?,?,?,?,?,?)",
                (
                    item["fid"],
                    item["position"],
                    item["annotation"],
                    item["owner"],
                    item["date"],
                    item["dateM"],
                    item["status"],
                ),
            )
            self.settings["conn"].commit()
示例#22
0
    def createFile(self):
        """ Create a new text file by entering text into the dialog """

        Dialog_text = QtGui.QDialog()
        ui = Ui_Dialog_memo("")
        ui.setupUi(Dialog_text, "New file")
        Dialog_text.exec_()
        fileText = ui.getMemo()
        fileName = ui.getFilename()
        if fileName == None or fileName == "":
            QtGui.QMessageBox.warning(None, 'Warning',
                                      "No filename was selected",
                                      QtGui.QMessageBox.Ok)
            return
        #check for non-unique filename
        if any(d['name'] == fileName for d in self.sourcetext):
            QtGui.QMessageBox.warning(None, 'Warning', "Filename in use",
                                      QtGui.QMessageBox.Ok)
            return

        # increment fileId until a spare id is available
        fileId = 1
        while any(d['id'] == fileId for d in self.sourcetext):
            fileId = fileId + 1

        # update database
        newFile = {
            'name': fileName,
            'id': fileId,
            'file': fileText,
            'memo': "",
            'owner': self.settings['codername'],
            'date': datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y"),
            'dateM': "",
            'status': 1
        }
        cur = self.settings['conn'].cursor()
        cur.execute(
            "insert into source(name,id,file,memo,owner,date,dateM,status) values(?,?,?,?,?,?,?,?)",
            (newFile['name'], newFile['id'], newFile['file'], newFile['memo'],
             newFile['owner'], newFile['date'], newFile['dateM'],
             newFile['status']))
        self.settings['conn'].commit()
        self.log += newFile['name'] + " added.\n"

        # clear and refill table widget
        for r in self.sourcetext:
            self.tableWidget_files.removeRow(0)

        self.sourcetext.append(newFile)
        for row, itm in enumerate(self.sourcetext):
            self.tableWidget_files.insertRow(row)
            item = QtGui.QTableWidgetItem(itm['name'])
            self.tableWidget_files.setItem(row, self.NAME_COLUMN, item)
            item = QtGui.QTableWidgetItem(itm['date'])
            self.tableWidget_files.setItem(row, self.DATE_COLUMN, item)
            if itm['memo'] != None and itm['memo'] != "":
                self.tableWidget_files.setItem(row, self.MEMO_COLUMN,
                                               QtGui.QTableWidgetItem("Yes"))
            item = QtGui.QTableWidgetItem(str(itm['id']))
            self.tableWidget_files.setItem(row, self.ID_COLUMN, item)
        self.tableWidget_files.resizeColumnsToContents()
        self.tableWidget_files.resizeRowsToContents()
示例#23
0
    def catsCellSelected(self):
        """ Open a memo dialog if a category memo cell is selected """

        x = self.tableWidget_cats.currentRow()
        y = self.tableWidget_cats.currentColumn()

        # category memo column
        if y == self.CAT_MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.cats[x]['memo'])
            ui.setupUi(Dialog_memo, "Category memo " + self.cats[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_cats.setItem(x, self.CAT_MEMO_COLUMN,
                                              QtGui.QTableWidgetItem())
            else:
                self.tableWidget_cats.setItem(x, self.CAT_MEMO_COLUMN,
                                              QtGui.QTableWidgetItem("Yes"))

            #update cats list and database
            self.cats[x]['memo'] = str(memo)
            cur = self.settings['conn'].cursor()
            cur.execute("update codecat set memo=? where catid=?",
                        (self.cats[x]['memo'], self.cats[x]['catid']))
            self.settings['conn'].commit()

        # view codes for this category
        if y == self.CAT_VIEW_COLUMN:
            # important need to unselect all codes in tableWidget

            if self.selectedCategoryId == -1:  # all categories currently displayed, so change this to selected category
                self.pushButton_link.setEnabled(False)
                self.pushButton_unlink.setEnabled(True)
                self.selectedCategoryId = int(
                    self.tableWidget_cats.item(x, self.CAT_ID_COLUMN).text())
                for (row, item) in enumerate(self.cats):
                    if self.selectedCategoryId != int(
                            self.tableWidget_cats.item(
                                row, self.CAT_ID_COLUMN).text()):
                        self.tableWidget_cats.hideRow(
                            row)  # hide other categories

                # now show codes associated with this category
                for (row, item) in enumerate(self.freecode):
                    hide = True
                    for treeCodeItem in self.treecode:
                        #print(str(treeCodeItem['catid'])+" "+str(self.selectedCategoryId)+" co:"+str(treeCodeItem['cid'])+" "+str(item['id']))
                        if int(treeCodeItem['catid']
                               ) == self.selectedCategoryId and treeCodeItem[
                                   'cid'] == item['id']:
                            hide = False
                    if hide:
                        self.tableWidget_codes.hideRow(row)
            else:
                self.selectedCategoryId = -1
                self.pushButton_link.setEnabled(True)
                self.pushButton_unlink.setEnabled(False)
                for (row, item) in enumerate(self.cats):
                    self.tableWidget_cats.showRow(row)
                for (row, item) in enumerate(self.freecode):
                    self.tableWidget_codes.showRow(row)

                # need to clear selection in category table when showing all rows
                # as there are no selected items but the previous view cell appears selected
                self.tableWidget_cats.clearSelection()
示例#24
0
文件: Cases.py 项目: Ronggui/PyQDA
    def cellSelected(self):
        """ When the table widget memo cell is selected display the memo.
        Update memo text, or delete memo by clearing text.
        If a new memo also show in table widget by displaying YES in the memo column """

        x = self.tableWidget_cases.currentRow()
        y = self.tableWidget_cases.currentColumn()

        if x == -1:
            self.selectedCase = None
            self.textEd.clear()
            self.caseLinks = []
        else:
            self.selectedCase = self.cases[x]
            # clear case text viewed if the caseid has changed
            if self.caseTextViewed != [] and self.caseTextViewed[0][
                    'caseid'] != self.selectedCase['id']:
                self.caseTextViewed = []
                self.caseLinks = []
                self.textEd.clear()

            self.unlight()
            #print("Selected case: " + str(self.selectedCase['id']) +" "+self.selectedCase['name'])

            # get caselinks for this file
            if self.selectedFile is not None:
                #print("File Selected: " + str(self.selectedFile['id'])+"  "+self.selectedFile['file'])
                self.caseLinks = []
                cur = self.settings['conn'].cursor()
                cur.execute(
                    "select caseid, fid, selfirst, selend, status, owner, date, memo from caselinkage where fid = ? and caseid = ?",
                    [self.selectedFile['id'], self.selectedCase['id']])
                result = cur.fetchall()
                for row in result:
                    self.caseLinks.append({
                        'caseid': row[0],
                        'fid': row[1],
                        'selfirst': row[2],
                        'selend': row[3],
                        'status': row[4],
                        'owner': row[5],
                        'date': row[6],
                        'memo': row[7]
                    })
            self.highlight()

        if y == self.MEMO_COLUMN:
            Dialog_memo = QtGui.QDialog()
            ui = Ui_Dialog_memo(self.cases[x]['memo'])
            ui.setupUi(Dialog_memo, "File memo " + self.cases[x]['name'])
            Dialog_memo.exec_()
            memo = ui.getMemo()

            if memo == "":
                self.tableWidget_cases.setItem(x, self.MEMO_COLUMN,
                                               QtGui.QTableWidgetItem())
            else:
                self.tableWidget_cases.setItem(x, self.MEMO_COLUMN,
                                               QtGui.QTableWidgetItem("Yes"))

            # update cases list and database
            self.cases[x]['memo'] = str(memo).encode('raw_unicode_escape')
            cur = self.settings['conn'].cursor()
            cur.execute("update cases set memo=? where id=?",
                        (self.cases[x]['memo'], self.cases[x]['id']))
            self.settings['conn'].commit()