示例#1
0
    def __init__(self, cat_id):
        super().__init__()
        title = "Add Document"
        self.cat_id = cat_id
        self.result = "try"
        self.inner_width = SessionWrapper.get_dimension('main_inner_w')
        self.pc_height = SessionWrapper.get_dimension('main_window_height')
        self.setWindowIcon(QIcon('resources/assets/images/icon.ico'))
        self.setObjectName("full_text")
        self.docs_layout = QHBoxLayout()
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, main, bottom)
        self.docs_layout.setSpacing(0)
        main_column = QVBoxLayout()
        main_widget = QWidget()
        main_widget.setObjectName("category_main")
        main_widget.setFixedWidth(self.inner_width)
        main_content = QVBoxLayout()
        cat_options = SessionWrapper.documents_types
        self.doc_type_select = RegularCompoBox(cat_options)

        self.document_name = LabeledTextBox("Name:       ", width=400)
        self.document_desc = LabeledTextArea("Details: ",
                                             height=400,
                                             space=25,
                                             width=700)
        self.document_tags = LabeledTextArea("Tags:    ",
                                             height=100,
                                             space=25,
                                             width=700)

        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        20)  # (left, top, main, bottom)
        save_btn = ClickableIcon(
            50, 50, "./resources/assets/images/Categories/save-button.png",
            "Update")
        save_btn.clicked.connect(self.do_save)

        buttons_line.addWidget(save_btn)

        main_content.addWidget(self.doc_type_select)
        main_content.addWidget(self.document_name)
        main_content.addWidget(self.document_desc)
        main_content.addWidget(self.document_tags)
        main_content.addLayout(buttons_line)
        main_widget.setLayout(main_content)
        main_column.addWidget(main_widget)
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, main, bottom)
        main_content.setContentsMargins(50, 20, 0,
                                        0)  # (left, top, main, bottom)
        self.docs_layout.addLayout(main_column)
        self.setLayout(self.docs_layout)
        self.setWindowTitle(title)
示例#2
0
    def initUI(self):
        self.setWindowTitle("QR Code Generator")
        self.show_file_browser = True
        self.img_url = ""
        layout = QVBoxLayout(self)
        # label0 = QLabel("Simple QR Code generator: ")
        self.qr_text = LabeledTextBox(
            "Text to be converted to QR Code:       ",
            width=self.width() + 400)
        self.qr_text.setText("")
        layout.addWidget(self.qr_text)

        self.figure = plt.figure(figsize=(5, 5))
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        btn2 = QPushButton('Generate Code')
        btn2.clicked.connect(lambda me: self.generate_qr())
        layout.addWidget(btn2)

        self.resize(500, 500)
        self.show_image()
示例#3
0
class QrCodeGenerator(QWidget):
    def __init__(self, parent, **kwargs):
        super().__init__()
        self.setObjectName("my_calendar_page")
        self.parent = parent
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QR Code Generator")
        self.show_file_browser = True
        self.img_url = ""
        layout = QVBoxLayout(self)
        # label0 = QLabel("Simple QR Code generator: ")
        self.qr_text = LabeledTextBox(
            "Text to be converted to QR Code:       ",
            width=self.width() + 400)
        self.qr_text.setText("")
        layout.addWidget(self.qr_text)

        self.figure = plt.figure(figsize=(5, 5))
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        btn2 = QPushButton('Generate Code')
        btn2.clicked.connect(lambda me: self.generate_qr())
        layout.addWidget(btn2)

        self.resize(500, 500)
        self.show_image()

    def generate_qr(self):
        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )
        txt = self.qr_text.text()
        if len(txt):
            if len(txt.strip()):
                qr.add_data(txt)
                qr.make(fit=True)
                img = qr.make_image()
                qr_directory = './resources/data/qrCodes'
                qr_file = qr_directory + "/qr_code.jpg"
                if not os.path.exists(qr_directory):
                    os.makedirs(qr_directory)
                img.save(qr_file)
                self.show_image(img_path=qr_file)
                return
        self.show_image()

    def show_image(self, img_path="resources/assets/images/no_image.png"):
        plt.close('all')
        plt.gca().axes.get_yaxis().set_visible(False)
        self.figure.clear()
        # create an axis
        ax = self.figure.add_subplot(111)
        ax.set_axis_off()
        ax.set_title('Empty Image')
        # discards the old graph
        ax.clear()
        ax.grid(False)
        ax.tick_params(axis='both',
                       which='both',
                       bottom=False,
                       top=False,
                       right=False,
                       left=False,
                       labelbottom=False,
                       labelleft=False)

        dd = plt.imread(img_path)
        # plot data
        ax.imshow(dd)
        # refresh canvas
        self.canvas.draw()
    def initUI(self):
        left_widget = QWidget()
        left_widget.setFixedWidth(300)
        lef_column = QVBoxLayout()
        left_widget.setLayout(lef_column)
        lef_column.setContentsMargins(20, 20, 20,
                                      20)  # (left, top, right, bottom)
        self.search_input = FilterTextBox(
            260, False, "resources/assets/images/search.png", "Search")
        self.search_input.textChanged.connect(self.do_search)
        self.search_input.iconClicked.connect(self.do_search)

        import_label = IconedClickableLabel("Import Data", 260)
        import_label.clicked.connect(self.start_import)

        lef_column.addWidget(import_label)
        lef_column.addWidget(self.search_input)

        left_inner_widget = QWidget()
        left_inner_widget.setFixedWidth(260)
        left_inner_column = QVBoxLayout()
        left_inner_column.setContentsMargins(0, 10, 0,
                                             0)  # (left, top, right, bottom)
        left_inner_column.setSpacing(0)

        left_inner_widget.setLayout(left_inner_column)
        tabs_line = QHBoxLayout()

        categories_tab = ActiveLabel("Categories")
        categories_tab.clicked.connect(lambda: self.go_to_page('categories'))

        documents_tab = ClickableLabel("Documents")
        documents_tab.clicked.connect(
            lambda: self.go_to_page('documents',
                                    selected_cat_id=self.selected_cat_id,
                                    selected_cat_name=self.selected_cat_name))

        tabs_line.addWidget(categories_tab)
        tabs_line.addWidget(documents_tab)
        left_inner_column.addLayout(tabs_line)
        categories_options = []
        for opt in self.categories_by_name:
            categories_options.append(opt)
        self.categories_list = MyListWidget(400,
                                            260,
                                            options=categories_options)
        self.categories_list.listRightClicked.connect(self.delete_cat)
        self.categories_list.clicked[str].connect(self.category_selected)
        self.categories_list.double_clicked[str].connect(
            self.cat_double_clicked)
        left_inner_column.addWidget(self.categories_list)
        lef_column.addWidget(left_inner_widget)

        left_widget.setObjectName("categories_left")
        right_column = QVBoxLayout()
        right_widget = QWidget()
        right_widget.setObjectName("category_right")
        right_widget.setFixedWidth(1000)
        right_content = QVBoxLayout()

        add_line = QHBoxLayout()

        add_line.setContentsMargins(0, 20, 50, 0)
        add_line.setSpacing(40)
        self.buttonAddCat = ClickableLabel("Add category", bg_color="#445566")
        self.buttonAddCat.clicked.connect(self.reset_inputs)
        self.buttonAddCat.setObjectName("buttonAddCat")
        self.buttonAddCat.setFixedWidth(125)
        self.buttonAddCat.setAlignment(Qt.AlignCenter)
        add_line.addWidget(self.buttonAddCat)

        right_content.addLayout(add_line)

        self.category_name = LabeledTextBox("Category Name: ", width=500)
        self.category_desc = LabeledTextArea("Description: ",
                                             height=150,
                                             space=25,
                                             width=500)
        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        280)  # (left, top, right, bottom)
        update_btn = ClickableIcon(
            50, 40, "./resources/assets/images/Categories/save-button.png",
            "Update")
        update_btn.clicked.connect(self.update_or_add_cat)
        buttons_line.addWidget(update_btn)
        right_content.addWidget(self.category_name)
        right_content.addWidget(self.category_desc)
        right_content.addLayout(buttons_line)
        right_widget.setLayout(right_content)
        right_column.addWidget(right_widget)
        self.landing_layout.setContentsMargins(0, 0, 0,
                                               0)  # (left, top, right, bottom)
        right_content.setContentsMargins(150, 100, 0,
                                         0)  # (left, top, right, bottom)
        self.landing_layout.addWidget(left_widget)
        self.landing_layout.addLayout(right_column)
        self.setLayout(self.landing_layout)
        self.category_name.setText("")
class CategoryForm(QWidget):
    def __init__(self, parent, **kwargs):
        super().__init__()
        self.setObjectName("category_page")
        self.parent = parent
        user_id = SessionWrapper.user_id
        categories = Database().get_all_categories(user_id)
        self.categories_by_id, self.categories_by_name = SharedFunctions(
        ).format_categories(categories)
        self.selected_cat_id = 0
        self.selected_cat_name = ""
        self.landing_layout = QHBoxLayout()
        self.landing_layout.setContentsMargins(0, 0, 0,
                                               0)  #(left, top, right, bottom)
        self.landing_layout.setSpacing(0)
        self.pc_width = SessionWrapper.get_dimension('main_window_width')
        self.pc_height = SessionWrapper.get_dimension('main_window_height')
        self.initUI()

    def initUI(self):
        left_widget = QWidget()
        left_widget.setFixedWidth(300)
        lef_column = QVBoxLayout()
        left_widget.setLayout(lef_column)
        lef_column.setContentsMargins(20, 20, 20,
                                      20)  # (left, top, right, bottom)
        self.search_input = FilterTextBox(
            260, False, "resources/assets/images/search.png", "Search")
        self.search_input.textChanged.connect(self.do_search)
        self.search_input.iconClicked.connect(self.do_search)

        import_label = IconedClickableLabel("Import Data", 260)
        import_label.clicked.connect(self.start_import)

        lef_column.addWidget(import_label)
        lef_column.addWidget(self.search_input)

        left_inner_widget = QWidget()
        left_inner_widget.setFixedWidth(260)
        left_inner_column = QVBoxLayout()
        left_inner_column.setContentsMargins(0, 10, 0,
                                             0)  # (left, top, right, bottom)
        left_inner_column.setSpacing(0)

        left_inner_widget.setLayout(left_inner_column)
        tabs_line = QHBoxLayout()

        categories_tab = ActiveLabel("Categories")
        categories_tab.clicked.connect(lambda: self.go_to_page('categories'))

        documents_tab = ClickableLabel("Documents")
        documents_tab.clicked.connect(
            lambda: self.go_to_page('documents',
                                    selected_cat_id=self.selected_cat_id,
                                    selected_cat_name=self.selected_cat_name))

        tabs_line.addWidget(categories_tab)
        tabs_line.addWidget(documents_tab)
        left_inner_column.addLayout(tabs_line)
        categories_options = []
        for opt in self.categories_by_name:
            categories_options.append(opt)
        self.categories_list = MyListWidget(400,
                                            260,
                                            options=categories_options)
        self.categories_list.listRightClicked.connect(self.delete_cat)
        self.categories_list.clicked[str].connect(self.category_selected)
        self.categories_list.double_clicked[str].connect(
            self.cat_double_clicked)
        left_inner_column.addWidget(self.categories_list)
        lef_column.addWidget(left_inner_widget)

        left_widget.setObjectName("categories_left")
        right_column = QVBoxLayout()
        right_widget = QWidget()
        right_widget.setObjectName("category_right")
        right_widget.setFixedWidth(1000)
        right_content = QVBoxLayout()

        add_line = QHBoxLayout()

        add_line.setContentsMargins(0, 20, 50, 0)
        add_line.setSpacing(40)
        self.buttonAddCat = ClickableLabel("Add category", bg_color="#445566")
        self.buttonAddCat.clicked.connect(self.reset_inputs)
        self.buttonAddCat.setObjectName("buttonAddCat")
        self.buttonAddCat.setFixedWidth(125)
        self.buttonAddCat.setAlignment(Qt.AlignCenter)
        add_line.addWidget(self.buttonAddCat)

        right_content.addLayout(add_line)

        self.category_name = LabeledTextBox("Category Name: ", width=500)
        self.category_desc = LabeledTextArea("Description: ",
                                             height=150,
                                             space=25,
                                             width=500)
        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        280)  # (left, top, right, bottom)
        update_btn = ClickableIcon(
            50, 40, "./resources/assets/images/Categories/save-button.png",
            "Update")
        update_btn.clicked.connect(self.update_or_add_cat)
        buttons_line.addWidget(update_btn)
        right_content.addWidget(self.category_name)
        right_content.addWidget(self.category_desc)
        right_content.addLayout(buttons_line)
        right_widget.setLayout(right_content)
        right_column.addWidget(right_widget)
        self.landing_layout.setContentsMargins(0, 0, 0,
                                               0)  # (left, top, right, bottom)
        right_content.setContentsMargins(150, 100, 0,
                                         0)  # (left, top, right, bottom)
        self.landing_layout.addWidget(left_widget)
        self.landing_layout.addLayout(right_column)
        self.setLayout(self.landing_layout)
        self.category_name.setText("")
        # self.setS

    def go_to_page(self, which, **kwargs):
        from src.models.PlayMouth import PlayMouth
        PlayMouth(self.parent).go_to(which, **kwargs)

    def category_selected(self, which):
        self.selected_cat_id = self.categories_by_name[which]['id']
        self.selected_cat_name = which
        desc = self.categories_by_name[which]['desc']
        self.category_name.setText(which)
        self.category_desc.setText(desc)

    def cat_double_clicked(self, which):
        self.selected_cat_id = self.categories_by_name[which]['id']
        self.go_to_page('documents',
                        selected_cat_id=self.selected_cat_id,
                        selected_cat_name=which)

    def start_import(self):
        imp = DataImportModal()
        imp_ex = imp.exec_()
        if imp_ex == QDialog.Accepted and imp.result == "Done":
            self.refresh_data()

    def do_search(self):
        user_id = SessionWrapper.user_id
        search = self.search_input.text()
        cats = Database().get_categories_where(user_id, search)
        self.refresh_data(cats)

    def update_or_add_cat(self):
        cat_id = self.selected_cat_id
        cat_name = self.category_name.text()
        cat_desc = self.category_desc.text()
        user_id = SessionWrapper.user_id
        current_dat = SharedFunctions.get_current_date_str()
        if cat_id:
            Database().update_cat(cat_id, cat_name, cat_desc, current_dat)
            MessageBoxes.success_message("Done", "Category Updated")
            self.refresh_data()
        else:
            if len(cat_name) >= 2:
                cat_id = Database().insert_cat(cat_name, cat_desc, user_id,
                                               current_dat)
                MessageBoxes.success_message("Done", "Category saved")
                self.selected_cat_id = cat_id
                self.selected_cat_name = cat_name
                self.refresh_data()
            else:
                MessageBoxes.warning_message(
                    "invalid",
                    "Category name can not be less than two characters")

    def delete_cat(self, cat_name):
        ask = MessageBoxes.confirm_message(
            "Are you sure to delete this category and all the documents under it ?"
        )
        if ask:
            cat_id = self.categories_by_name[cat_name]['id']
            SharedFunctions.delete_cat(cat_id)
            self.refresh_data()

    def reset_inputs(self):
        self.selected_cat_id = 0
        self.selected_cat_name = ""
        self.category_name.setText("")
        self.category_desc.setText("")

    def refresh_data(self, data=None):
        if data is None:
            user_id = SessionWrapper.user_id
            data = Database().get_all_categories(user_id)
        self.categories_by_id, self.categories_by_name = SharedFunctions(
        ).format_categories(data)
        categories_options = []
        for opt in self.categories_by_name:
            categories_options.append(opt)
        self.categories_list.only_update_options(categories_options)
        self.reset_inputs()
示例#6
0
class AddDocumentModal(QDialog):
    def __init__(self, cat_id):
        super().__init__()
        title = "Add Document"
        self.cat_id = cat_id
        self.result = "try"
        self.inner_width = SessionWrapper.get_dimension('main_inner_w')
        self.pc_height = SessionWrapper.get_dimension('main_window_height')
        self.setWindowIcon(QIcon('resources/assets/images/icon.ico'))
        self.setObjectName("full_text")
        self.docs_layout = QHBoxLayout()
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, main, bottom)
        self.docs_layout.setSpacing(0)
        main_column = QVBoxLayout()
        main_widget = QWidget()
        main_widget.setObjectName("category_main")
        main_widget.setFixedWidth(self.inner_width)
        main_content = QVBoxLayout()
        cat_options = SessionWrapper.documents_types
        self.doc_type_select = RegularCompoBox(cat_options)

        self.document_name = LabeledTextBox("Name:       ", width=400)
        self.document_desc = LabeledTextArea("Details: ",
                                             height=400,
                                             space=25,
                                             width=700)
        self.document_tags = LabeledTextArea("Tags:    ",
                                             height=100,
                                             space=25,
                                             width=700)

        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        20)  # (left, top, main, bottom)
        save_btn = ClickableIcon(
            50, 50, "./resources/assets/images/Categories/save-button.png",
            "Update")
        save_btn.clicked.connect(self.do_save)

        buttons_line.addWidget(save_btn)

        main_content.addWidget(self.doc_type_select)
        main_content.addWidget(self.document_name)
        main_content.addWidget(self.document_desc)
        main_content.addWidget(self.document_tags)
        main_content.addLayout(buttons_line)
        main_widget.setLayout(main_content)
        main_column.addWidget(main_widget)
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, main, bottom)
        main_content.setContentsMargins(50, 20, 0,
                                        0)  # (left, top, main, bottom)
        self.docs_layout.addLayout(main_column)
        self.setLayout(self.docs_layout)
        self.setWindowTitle(title)

    def do_save(self):
        doc_type = self.doc_type_select.currentText()
        doc_name = self.document_name.text()
        doc_details = self.document_desc.text()
        doc_tags = self.document_tags.text()
        if doc_type != "Normal":
            msg = "adding %s documents is not available yet" % doc_type
            MessageBoxes.warning_message("Not Available", msg)
        else:
            doc_id = Database().insert_doc(self.cat_id, doc_name, doc_details,
                                           doc_type)
            Database().insert_tags(doc_tags, doc_id)
            MessageBoxes.success_message("Done", "Document Saved")
            self.result = "Done"
            self.accept()
class QrCodeGenerator(QWidget):
    def __init__(self, parent, **kwargs):
        super().__init__()
        self.setObjectName("my_calendar_page")
        self.parent = parent
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QR Code Generator")
        self.show_file_browser = True
        self.img_url = ""
        layout = QVBoxLayout(self)
        # label0 = QLabel("Simple QR Code generator: ")
        self.qr_text = LabeledTextBox(
            "Text to be converted to QR Code:       ",
            width=self.width() + 400)
        self.qr_text.setText("")
        layout.addWidget(self.qr_text)

        self.figure = plt.figure(figsize=(5, 5))
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        btn2 = QPushButton('Generate Code')
        btn2.clicked.connect(lambda me: self.generate_qr())
        layout.addWidget(btn2)

        self.resize(500, 500)
        self.show_image()

    def generate_qr(self):
        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )
        txt = self.qr_text.text()
        if len(txt):
            if len(txt.strip()):
                qr.add_data(txt)
                qr.make(fit=True)
                img = qr.make_image(fill_color="black", back_color="white")
                self.show_qr(img)
                return
        self.show_image()

    def show_qr(self, img):
        plt.close('all')
        plt.gca().axes.get_yaxis().set_visible(False)
        # plt.xticks([])
        # plt.yticks([])
        self.figure.clear()
        ax = self.figure.add_subplot(111)
        ax.set_title('Original Image')
        ax.clear()
        ax.grid(False)
        ax.set_xticklabels([])
        ax.set_yticklabels([])
        ax.imshow(img)
        self.canvas.draw()

    def show_image(self, img_path="resources/assets/images/no_image.png"):
        plt.close('all')
        plt.gca().axes.get_yaxis().set_visible(False)
        self.figure.clear()
        # create an axis
        ax = self.figure.add_subplot(111)
        ax.set_title('Original Image')
        # discards the old graph
        ax.clear()
        ax.grid(False)
        ax.set_xticklabels([])
        ax.set_yticklabels([])
        dd = plt.imread(img_path)
        # plot data
        ax.imshow(dd)
        # refresh canvas
        self.canvas.draw()
示例#8
0
    def initUI(self):
        left_widget = QWidget()
        left_widget.setFixedWidth(300)
        lef_column = QVBoxLayout()
        left_widget.setLayout(lef_column)
        lef_column.setContentsMargins(20, 20, 20,
                                      50)  # (left, top, right, bottom)
        cat_options = []
        for cat in self.categories_by_name:
            cat_options.append(cat)
        category_select = FilteredComboBox(cat_options)
        category_select.activated[str].connect(self.category_changed)
        if self.selected_cat_id:
            category_select.setCurrentText(self.selected_cat_name)
        self.search_input = FilterTextBox(
            260, False, "resources/assets/images/search.png", "Search")
        self.search_input.textChanged.connect(self.do_search)
        self.search_input.iconClicked.connect(self.do_search)
        lef_column.addWidget(category_select)
        lef_column.addWidget(self.search_input)

        left_inner_widget = QWidget()
        left_inner_widget.setFixedWidth(260)
        left_inner_column = QVBoxLayout()
        left_inner_column.setContentsMargins(0, 20, 0,
                                             0)  # (left, top, right, bottom)
        left_inner_column.setSpacing(0)

        left_inner_widget.setLayout(left_inner_column)
        tabs_line = QHBoxLayout()

        categories_tab = ClickableLabel("Categories")
        categories_tab.clicked.connect(lambda: self.go_to_page('categories'))

        documents_tab = ActiveLabel("Documents +",
                                    bg_color="#ffffff",
                                    front_color="#445566")
        documents_tab.clicked.connect(self.add_doc)

        tabs_line.addWidget(categories_tab)
        tabs_line.addWidget(documents_tab)
        left_inner_column.addLayout(tabs_line)

        docs = Database().get_docs_for_category(self.selected_cat_id)
        docs_options = []
        for opt in docs:
            docs_options.append(opt['doc_name'])
        self.documents_list = MyListWidget(450,
                                           260,
                                           options=docs_options,
                                           bg_color="#ffffff",
                                           front_color="#445566")
        self.documents_list.listRightClicked.connect(self.delete_doc)
        self.documents_list.clicked[str].connect(self.document_selected)
        left_inner_column.addWidget(self.documents_list)
        lef_column.addWidget(left_inner_widget)

        left_widget.setObjectName("categories_left")

        right_column = QVBoxLayout()
        right_widget = QWidget()
        right_widget.setObjectName("category_right")
        right_widget.setFixedWidth(int(self.pc_width * 0.8))
        right_content = QVBoxLayout()
        self.document_name = LabeledTextBox("Name:       ", width=400)

        self.document_desc = LabeledTextArea("Details: ",
                                             height=400,
                                             space=25,
                                             width=self.width() + 250)

        self.document_tags = LabeledTextArea("Tags:    ",
                                             height=100,
                                             space=25,
                                             width=self.width() + 250)

        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        20)  # (left, top, right, bottom)
        update_btn = ClickableIcon(
            50, 50, "./resources/assets/images/Categories/save-button.png",
            "Update")
        update_btn.clicked.connect(self.update_doc)

        buttons_line.addWidget(update_btn)
        right_content.addWidget(self.document_name)
        right_content.addWidget(self.document_desc)
        right_content.addWidget(self.document_tags)
        right_content.addLayout(buttons_line)
        right_widget.setLayout(right_content)
        right_column.addWidget(right_widget)
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, right, bottom)
        right_content.setContentsMargins(10, 20, 0,
                                         0)  # (left, top, right, bottom)
        self.docs_layout.addWidget(left_widget)
        self.docs_layout.addLayout(right_column)
        self.setLayout(self.docs_layout)
示例#9
0
class DocumentsForm(QWidget):
    def __init__(self, parent, **kwargs):
        super().__init__()
        self.setObjectName("documents_page")
        self.parent = parent
        self.pc_width = SessionWrapper.get_dimension('main_window_width')
        self.pc_height = SessionWrapper.get_dimension('main_window_height')
        user_id = SessionWrapper.user_id
        categories = Database().get_all_categories(user_id)
        self.selected_doc_id = 0
        self.selected_doc_name = ""
        self.categories_by_id, self.categories_by_name = SharedFunctions(
        ).format_categories(categories)
        self.selected_cat_id = kwargs['selected_cat_id']
        self.selected_cat_name = kwargs['selected_cat_name']
        if not self.selected_cat_id:
            default_cat = Database().get_default_cat(user_id)
            if default_cat is not None:
                self.selected_cat_id = default_cat['id']
                self.selected_cat_name = default_cat['cat_name']
        self.docs_layout = QHBoxLayout()
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  #(left, top, right, bottom)
        self.docs_layout.setSpacing(0)
        self.pc_width = SessionWrapper.get_dimension('main_window_width')
        self.pc_height = SessionWrapper.get_dimension('main_window_height')
        self.initUI()

    def initUI(self):
        left_widget = QWidget()
        left_widget.setFixedWidth(300)
        lef_column = QVBoxLayout()
        left_widget.setLayout(lef_column)
        lef_column.setContentsMargins(20, 20, 20,
                                      50)  # (left, top, right, bottom)
        cat_options = []
        for cat in self.categories_by_name:
            cat_options.append(cat)
        category_select = FilteredComboBox(cat_options)
        category_select.activated[str].connect(self.category_changed)
        if self.selected_cat_id:
            category_select.setCurrentText(self.selected_cat_name)
        self.search_input = FilterTextBox(
            260, False, "resources/assets/images/search.png", "Search")
        self.search_input.textChanged.connect(self.do_search)
        self.search_input.iconClicked.connect(self.do_search)
        lef_column.addWidget(category_select)
        lef_column.addWidget(self.search_input)

        left_inner_widget = QWidget()
        left_inner_widget.setFixedWidth(260)
        left_inner_column = QVBoxLayout()
        left_inner_column.setContentsMargins(0, 20, 0,
                                             0)  # (left, top, right, bottom)
        left_inner_column.setSpacing(0)

        left_inner_widget.setLayout(left_inner_column)
        tabs_line = QHBoxLayout()

        categories_tab = ClickableLabel("Categories")
        categories_tab.clicked.connect(lambda: self.go_to_page('categories'))

        documents_tab = ActiveLabel("Documents +",
                                    bg_color="#ffffff",
                                    front_color="#445566")
        documents_tab.clicked.connect(self.add_doc)

        tabs_line.addWidget(categories_tab)
        tabs_line.addWidget(documents_tab)
        left_inner_column.addLayout(tabs_line)

        docs = Database().get_docs_for_category(self.selected_cat_id)
        docs_options = []
        for opt in docs:
            docs_options.append(opt['doc_name'])
        self.documents_list = MyListWidget(450,
                                           260,
                                           options=docs_options,
                                           bg_color="#ffffff",
                                           front_color="#445566")
        self.documents_list.listRightClicked.connect(self.delete_doc)
        self.documents_list.clicked[str].connect(self.document_selected)
        left_inner_column.addWidget(self.documents_list)
        lef_column.addWidget(left_inner_widget)

        left_widget.setObjectName("categories_left")

        right_column = QVBoxLayout()
        right_widget = QWidget()
        right_widget.setObjectName("category_right")
        right_widget.setFixedWidth(int(self.pc_width * 0.8))
        right_content = QVBoxLayout()
        self.document_name = LabeledTextBox("Name:       ", width=400)

        self.document_desc = LabeledTextArea("Details: ",
                                             height=400,
                                             space=25,
                                             width=self.width() + 250)

        self.document_tags = LabeledTextArea("Tags:    ",
                                             height=100,
                                             space=25,
                                             width=self.width() + 250)

        buttons_line = QHBoxLayout()
        buttons_line.setSpacing(10)
        buttons_line.setContentsMargins(400, 20, 330,
                                        20)  # (left, top, right, bottom)
        update_btn = ClickableIcon(
            50, 50, "./resources/assets/images/Categories/save-button.png",
            "Update")
        update_btn.clicked.connect(self.update_doc)

        buttons_line.addWidget(update_btn)
        right_content.addWidget(self.document_name)
        right_content.addWidget(self.document_desc)
        right_content.addWidget(self.document_tags)
        right_content.addLayout(buttons_line)
        right_widget.setLayout(right_content)
        right_column.addWidget(right_widget)
        self.docs_layout.setContentsMargins(0, 0, 0,
                                            0)  # (left, top, right, bottom)
        right_content.setContentsMargins(10, 20, 0,
                                         0)  # (left, top, right, bottom)
        self.docs_layout.addWidget(left_widget)
        self.docs_layout.addLayout(right_column)
        self.setLayout(self.docs_layout)
        # self.setS

    def go_to_page(self, which):
        from src.models.PlayMouth import PlayMouth
        PlayMouth(self.parent).go_to(which)

    def document_selected(self, which):
        doc_details = Database().get_doc_details(self.selected_cat_id, which)
        doc_id = doc_details['id']
        doc_tags = Database().get_tags_by_doc(doc_id)
        tags = SharedFunctions.make_tags_text(doc_tags)
        self.document_name.setText(doc_details['doc_name'])
        self.document_desc.setText(doc_details['details'])
        self.document_tags.setText(tags)
        self.selected_doc_id = doc_id
        self.selected_doc_name = doc_details['doc_name']

    def category_changed(self, cat):
        cat_id = self.categories_by_name[cat]['id']
        docs = Database().get_docs_for_category(cat_id)
        docs_options = []
        for opt in docs:
            docs_options.append(opt['doc_name'])
        self.documents_list.only_update_options(docs_options)
        self.selected_cat_id = cat_id
        self.selected_cat_name = cat
        self.reset_inputs()

    def start_import(self):
        imp = DocumentImportModal(self.selected_cat_name, self.selected_cat_id)
        imp_ex = imp.exec_()
        if imp_ex == QDialog.Accepted and imp.result == "Done":
            self.refresh_data()

    def do_search(self):
        search = self.search_input.text()
        docs = Database().get_doc_for_category_where(self.selected_cat_id,
                                                     search)
        self.refresh_data(docs)

    def reset_inputs(self):
        self.selected_doc_id = 0
        self.selected_doc_name = ""
        self.document_name.setText("")
        self.document_desc.setText("")
        self.document_tags.setText("")

    def refresh_data(self, docs=None):
        if docs is None:
            docs = Database().get_docs_for_category(self.selected_cat_id)
        docs_options = []
        for opt in docs:
            docs_options.append(opt['doc_name'])
        self.documents_list.only_update_options(docs_options)
        self.reset_inputs()

    def update_doc(self):
        doc_id = self.selected_doc_id
        if doc_id:
            doc_name = self.document_name.text()
            doc_desc = self.document_desc.text()
            doc_tags = self.document_tags.text()
            Database().update_doc(doc_id, doc_name, doc_desc, doc_tags)
            self.refresh_data()
            self.document_name.setText(doc_name)
            self.document_desc.setText(doc_desc)
            self.document_tags.setText(doc_tags)
            self.selected_doc_id = doc_id
            self.selected_doc_name = doc_name

    def delete_doc(self, doc_name):
        ask = MessageBoxes.confirm_message(
            "Are you sure to delete this Document?")
        if ask:
            doc_details = Database().get_doc_details(self.selected_cat_id,
                                                     doc_name)
            Database().delete_doc(doc_details['id'])
            self.refresh_data()

    def add_doc(self):
        if not self.selected_cat_id:
            msg = "No category selected"
            MessageBoxes.warning_message("Not Available", msg)
        else:
            imp = AddDocumentModal(self.selected_cat_id)
            imp_ex = imp.exec_()
            if imp_ex == QDialog.Accepted and imp.result == "Done":
                self.refresh_data()