def init(self):
        self.pic = Picture(self)
        self.setCentralWidget(self.pic)

        self.panel = Panel(self.pic)
        self.dock = QDockWidget('info panel')
        self.dock.setWidget(self.panel)
        self.dock.setAllowedAreas(Qt.RightDockWidgetArea)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
        self.dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        self.dock.setFixedWidth(300)

        self.setWindowTitle('Untitled')

        dock = QDockWidget('command line', self)
        dock.setWidget(TwoLines())
        dock.setAllowedAreas(Qt.BottomDockWidgetArea)
        self.addDockWidget(Qt.BottomDockWidgetArea, dock)
        dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        dock.setFixedHeight(60)
        dock.setFixedWidth(800)

        desktop = QApplication.desktop()
        self.setGeometry(300, 100, desktop.width(), desktop.height())
        self.setFixedSize(1100, 705)
Exemplo n.º 2
0
    def history_subwindow(self):
        """
        Summary of the function:
        ------------------------
        (a) Defining the sub-window for showing executed docker containers history

        Parameters:
        -----------
        :arg: None
        :return: A dock-widget object (sub-window)
        """
        dock_widget = QDockWidget(self)
        # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("history"))
        dock_widget.setTitleBarWidget(QWidget(None))
        dock_widget.setFloating(False)
        dock_widget.setFont(self.subdoc_font_customization())
        dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures)
        dock_widget.setFixedHeight((int(self.screen_height * 3.9) // 10))
        dock_widget.setFixedWidth(self.screen_width // 2)
        dock_widget.setStyleSheet(css_layout.dockwidget_layout)
        dock_widget.setAllowedAreas(Qt.RightDockWidgetArea)
        return dock_widget
Exemplo n.º 3
0
    def userstats_subwindow(self):
        """
        Summary of the function:
        ------------------------
        (a) Defining the sub-window for the User Statistics

        Parameters:
        -----------
        :arg: None
        :return: A dock-widget object (sub-window)
        """
        dock_widget = QDockWidget(self)
        # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("userstats"))
        dock_widget.setTitleBarWidget(QWidget(None))
        dock_widget.setFloating(False)
        dock_widget.setFont(self.subdoc_font_customization())
        dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures)
        dock_widget.setFixedHeight((int(self.screen_height * 3.4) // 10))
        dock_widget.setFixedWidth(self.screen_width // 2)
        dock_widget.setStyleSheet(css_layout.dockwidget_layout)
        dock_widget.setAllowedAreas(Qt.TopDockWidgetArea)
        return dock_widget
Exemplo n.º 4
0
    def enqueued_containers_subwindow(self):
        """
        Summary of the function:
        ------------------------
        (a) Defining the sub-window for showing the enqueued containers information

        Parameters:
        -----------
        :arg: None
        :return: A dock-widget object (sub-window)
        """
        dock_widget = QDockWidget(self)
        # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("enqueued"))
        dock_widget.setTitleBarWidget(QWidget(None))
        dock_widget.setFloating(False)
        dock_widget.setFont(self.subdoc_font_customization())
        dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures)
        dock_widget.setFixedHeight(
            (int(self.screen_height * 4.6) // 10))  # 48%
        dock_widget.setFixedWidth(int(self.screen_width * 4.97) // 10)
        dock_widget.setStyleSheet(css_layout.dockwidget_layout)
        dock_widget.setAllowedAreas(Qt.RightDockWidgetArea)
        return dock_widget
Exemplo n.º 5
0
 def status_subwindow(self):
     """
     Summary of the function:
     ------------------------
     (a) Defining the sub-window for the priority queue status
     (b) Info would be blank for initial loading
     
     Parameters:
     -----------
     :arg: None
     :return: A dock-widget object
     """
     dock_widget = QDockWidget(self)
     # dock_widget.setTitleBarWidget(self.subdoc_custom_title_bar("status"))
     dock_widget.setTitleBarWidget(QWidget(None))
     dock_widget.setFont(self.subdoc_font_customization())
     dock_widget.setFloating(False)
     dock_widget.setFeatures(dock_widget.NoDockWidgetFeatures)
     dock_widget.setFixedWidth(self.screen_width // 2)
     dock_widget.setFixedHeight(int(self.screen_height * 2.1) //
                                10)  # 25% of total height
     dock_widget.setStyleSheet(css_layout.dockwidget_layout)
     dock_widget.setAllowedAreas(Qt.LeftDockWidgetArea)
     return dock_widget
Exemplo n.º 6
0
class CatalogMainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)

        # Структура главного окна
        # Создаем меню
        self.menu_bar = self.menuBar()

        # Создаем блоки меню
        # Блок меню 'Учет движения товаров'

        self.gma_menu = self.menu_bar.addMenu('Учет движения товаров')
        self.gma_menu.setEnabled(False)
        self.ro_open_btn = QAction(self)
        self.ro_open_btn.setText('Приходный ордер')
        self.wo_open_btn = QAction(self)
        self.wo_open_btn.setText('Расходный ордер')
        self.gma_menu.addAction(self.ro_open_btn)
        self.gma_menu.addAction(self.wo_open_btn)

        # Блок меню 'Отчеты'

        self.r_menu = self.menu_bar.addMenu('Отчеты')
        self.r_menu.setEnabled(False)
        self.tws_report_btn = QAction(self)
        self.tws_report_btn.setText('Операции с поставщиками')
        self.gis_report_btn = QAction(self)
        self.gis_report_btn.setText('Товары в наличии')
        self.r_menu.addAction(self.tws_report_btn)
        self.r_menu.addAction(self.gis_report_btn)

        # Блок меню 'Справочники'
        self.d_menu = self.menu_bar.addMenu('Справочники')
        self.d_menu.setEnabled(False)

        self.u_catalog_btn = QAction(self)
        self.u_catalog_btn.setText('Пользователи')

        self.r_catalog_btn = QAction(self)
        self.r_catalog_btn.setText('Права пользователей')

        self.c_catalog_btn = QAction(self)
        self.c_catalog_btn.setText('Категории')

        self.n_catalog_btn = QAction(self)
        self.n_catalog_btn.setText('Номенклатура товаров')

        self.un_catalog_btn = QAction(self)
        self.un_catalog_btn.setText('Единицы измерения')

        self.s_catalog_btn = QAction(self)
        self.s_catalog_btn.setText('Поставщики')

        self.p_catalog_btn = QAction(self)
        self.p_catalog_btn.setText('Должности')

        self.e_catalog_btn = QAction(self)
        self.e_catalog_btn.setText('Сотрудники')

        self.d_menu.addAction(self.u_catalog_btn)
        self.d_menu.addAction(self.r_catalog_btn)
        self.d_menu.addAction(self.c_catalog_btn)
        self.d_menu.addAction(self.n_catalog_btn)
        self.d_menu.addAction(self.un_catalog_btn)
        self.d_menu.addAction(self.s_catalog_btn)
        self.d_menu.addAction(self.p_catalog_btn)
        self.d_menu.addAction(self.e_catalog_btn)

        # Верхний виджет с полным путем до файла БД

        self.db_lbl = QLabel()
        self.db_lbl.setText('Путь до БД:')
        self.db_lbl.setStyleSheet("border-style: none;" "font-size: 10pt;")
        self.db_path_lbl = QLineEdit()
        self.db_path_lbl.setStyleSheet(
            "background-color: white;"
            "font-size: 10pt;"
            "color: green;")
        self.db_path_lbl.setFixedSize(700, 25)
        self.db_path_lbl.setEnabled(False)
        self.db_path_btn = QPushButton('...')
        self.db_path_btn.setFixedSize(25, 25)
        self.db_path_btn.setStyleSheet(
            "border-width: 1px;"
            "border-style: solid;"
            "border-color: dimgray;"
            "border-radius: 5px;"
            "background-color: gainsboro;")
        self.db_path_btn.clicked.connect(self.on_db_path_btn_clicked)

        self.tdw = QDockWidget()
        self.tdw.setFixedHeight(65)
        self.tdw.setFeatures(self.tdw.NoDockWidgetFeatures)
        self.tdw_grid = QGridLayout()
        self.tdw_grid.setColumnStretch(3, 1)
        self.tdw_grid.addWidget(self.db_lbl)
        self.tdw_grid.addWidget(self.db_path_lbl)
        self.tdw_grid.addWidget(self.db_path_btn)
        self.tdw_frame = QFrame()
        self.tdw_frame.setStyleSheet(
            "background-color: ghostwhite;"
            "border-width: 0.5px;"
            "border-style: solid;"
            "border-color: silver;")
        self.tdw_frame.setLayout(self.tdw_grid)
        self.tdw.setWidget(self.tdw_frame)
        self.addDockWidget(QtCore.Qt.TopDockWidgetArea, self.tdw)

        # Левый виджет с окном каталога продукции

        self.ldw = QDockWidget()
        self.ldw.setFixedSize(500, 570)
        self.ldw.setFeatures(self.ldw.NoDockWidgetFeatures)
        self.ldw_tree = QTreeView()
        self.ldw_tree.setFixedSize(500, 530)
        self.ldw_tree.setHeaderHidden(True)
        self.ldw_tree_model = QStandardItemModel()
        self.ldw_tree.setModel(self.ldw_tree_model)
        self.ldw_tree.clicked.connect(self.on_ldw_tree_clicked)
        self.outf_scroll = QScrollArea()
        self.outf_scroll.setWidget(self.ldw_tree)
        self.ldw.setWidget(self.outf_scroll)
        self.ldw.setWindowTitle("Каталог продукции")

        # Центральный виджет с карточкой товара

        self.cdw = QDockWidget()
        self.cdw.setFeatures(self.cdw.NoDockWidgetFeatures)
        #self.setCentralWidget(self.cdw)

        # Нижний виджет со служебными сообщениями

        self.smdw = QDockWidget()
        self.smdw.setFixedHeight(140)
        self.smdw.setFeatures(self.smdw.NoDockWidgetFeatures)
        self.sm_list_widget = QListWidget()
        self.smdw.setWidget(self.sm_list_widget)
        self.smdw.setWindowTitle("Служебные сообщения")

    # Функции главного окна
    # Функция выбора файла базы данных
    def on_db_path_btn_clicked(self):
        global db_path
        db_path, _filter = QFileDialog.getOpenFileName(
            None, "Open Data File", '.', "(*.sqlite)")
        self.db_path_lbl.setText(db_path)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.ldw)
        self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, self.smdw)

        # Создаем все таблицы, которые нужны
        con = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        con.setDatabaseName(db_path)
        con.open()

        if 'rules' not in con.tables():

            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE rules(rule STRING UNIQUE, description STRING)")

            r1 = "admin"
            d1 = "Доступны все опции"
            query.exec(
                "INSERT INTO rules(rule, description) VALUES ('%s','%s')" %
                (r1, d1))

            r2 = "Кладовщик"
            d2 = "Доступны опции кладовщика"
            query.exec(
                "INSERT INTO rules(rule, description) VALUES ('%s','%s')" %
                (r2, d2))

        if 'nomenclature' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE nomenclature(item_numb INTEGER UNIQUE PRIMARY KEY NOT NULL, \
                item_name STRING NOT NULL, item_unit STRING REFERENCES units (unit) NOT NULL, \
                item_cat STRING REFERENCES categories (category) NOT NULL, item_img BLOB)")

        if 'units' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec("CREATE TABLE units(unit STRING PRIMARY KEY \
            UNIQUE NOT NULL)")

        if 'categories' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE categories(category STRING PRIMARY KEY UNIQUE \
                NOT NULL, description STRING NOT NULL)")

        # Создаем таблицу 'users', если не существует
        if 'users' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE users(id_user INTEGER PRIMARY KEY AUTOINCREMENT \
                unique NOT NULL, \
                login STRING UNIQUE NOT NULL, password STRING NOT NULL, \
                name TEXT NOT NULL, \
                rules STRING REFERENCES rules (rule) NOT NULL)")

        if 'suppliers' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec("CREATE TABLE suppliers( \
                id_supplier INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL, \
                supplier STRING UNIQUE NOT NULL, \
                ownerchipform STRING NOT NULL, \
                address STRING NOT NULL, \
                phone STRING NOT NULL, \
                email STRING NOT NULL \
            )")

        if 'positions' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE positions(position STRING PRIMARY KEY UNIQUE \
                NOT NULL)")

        if 'employee' not in con.tables():
            query = QtSql.QSqlQuery()
            query.exec(
                "CREATE TABLE employee(employee_id INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, \
                fio STRING NOT NULL, \
                position STRING REFERENCES positions (position) NOT NULL)")

        con.close()



        con = sqlite3.connect(db_path)
        cur = con.cursor()
        sql_cats_select = """\
        SELECT DISTINCT item_cat FROM nomenclature
        """
        cur.execute(sql_cats_select)
        arr = cur.fetchall()
        #print(arr)

        for cat in arr:
            sql_items_select = "SELECT item_name FROM nomenclature \
            WHERE item_cat = ?"
            cur.execute(sql_items_select, [cat[0]])
            items = cur.fetchall()
            #print(items)
            parent_item = QStandardItem(cat[0])
            self.ldw_tree_model.appendRow(parent_item)

            j = 0

            for item in items:
                child_item = QStandardItem(item[0])
                parent_item.setChild(j, 0, child_item)
                j = j + 1


        cur.close()
        con.close()

        self.gma_menu.setEnabled(True)
        self.r_menu.setEnabled(True)
        self.d_menu.setEnabled(True)

        self.ro_open_btn.triggered.connect(
            lambda: documents_class.on_ro_doc_btn(
                self, db_path))
        self.wo_open_btn.triggered.connect(
            lambda: documents_class.on_wo_doc_btn(
                self, db_path))

        self.gis_report_btn.triggered.connect(
            lambda: gis_report_class.on_gis_report_btn(
                self, db_path))

        self.tws_report_btn.triggered.connect(
            lambda: tws_report_class.on_tws_report_btn(
                self, db_path))

        self.u_catalog_btn.triggered.connect(
            lambda: directories_class.on_u_catalog_btn(
                self, db_path))
        self.r_catalog_btn.triggered.connect(
            lambda: directories_class.on_r_catalog_btn(
                self, db_path))
        self.c_catalog_btn.triggered.connect(
            lambda: directories_class.on_c_catalog_btn(
                self, db_path))
        self.n_catalog_btn.triggered.connect(
            lambda: directories_class.on_n_catalog_btn(
                self, db_path))
        self.un_catalog_btn.triggered.connect(
            lambda: directories_class.on_un_catalog_btn(
                self, db_path))
        self.s_catalog_btn.triggered.connect(
            lambda: directories_class.on_s_catalog_btn(
                self, db_path))
        self.p_catalog_btn.triggered.connect(
            lambda: directories_class.on_p_catalog_btn(
                self, db_path))
        self.e_catalog_btn.triggered.connect(
            lambda: directories_class.on_e_catalog_btn(
                self, db_path))

    # Функция выбора товара из каталога-дерева
    def on_ldw_tree_clicked(self):
        #print('вах')


        try:
            current_index = self.ldw_tree.currentIndex()
            file_name = self.ldw_tree.model().data(current_index)
            con = sqlite3.connect(db_path)
            cur = con.cursor()
            sql_item_select = "SELECT item_name FROM nomenclature \
            WHERE item_name = ?"
            cur.execute(sql_item_select, [file_name])
            item = cur.fetchone()
            if item:
                self.setCentralWidget(self.cdw)
                self.cdw.setWindowTitle("Карточка товара")
                item_card = item_card_class(self, db_path, file_name)
                self.cdw.setWidget(item_card)
            cur.close()
            con.close()
        except Exception as e:
            print('Ошибка:\n', traceback.format_exc())
class PlayerMainWindow(QMainWindow):
    def __init__(self, docid, parent=None):
        QMainWindow.__init__(self, parent=parent)
        self.docid = docid
        self._set_design(docid)
        QMetaObject.connectSlotsByName(self)

        # signals
        self.feature_tree.item_checked.connect(self.evaluate_checked_signal)

        # signals
        self.playback_frame.button_play.clicked.connect(
            self.player_frame.playback_play)
        self.playback_frame.button_pause.clicked.connect(
            self.player_frame.playback_pause)

    def _set_design(self, docid):
        self.resize(710, 550)
        self.central_widget = QWidget()

        layout = QVBoxLayout(self.central_widget)
        layout.setContentsMargins(2, 2, 2, 2)

        self.player_frame = PlayerFrame(recid=docid, parent=self)
        layout.addWidget(self.player_frame)

        self.setCentralWidget(self.central_widget)

        # dock widget for features
        self.dw_features = QDockWidget(self)
        self.dw_features.setTitleBarWidget(QWidget())
        self.dw_features.setMinimumSize(QtCore.QSize(100, 130))
        self.dw_features.setMaximumSize(QtCore.QSize(400, 524287))
        self.dw_features.setFloating(False)
        self.dw_features.setFeatures(
            QtWidgets.QDockWidget.NoDockWidgetFeatures)
        self.dw_features.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea)

        self.dw_contents_features = QWidget()
        layout3 = QVBoxLayout(self.dw_contents_features)
        layout3.setContentsMargins(3, 3, 3, 3)
        layout2 = QVBoxLayout()

        self.feature_tree = FeatureTreeWidget(self.dw_contents_features)
        self.feature_tree.get_feature_list(docid=str(docid))

        layout2.addWidget(self.feature_tree)
        layout3.addLayout(layout2)
        self.dw_features.setWidget(self.dw_contents_features)

        # dock widget for playlist
        self.dw_playlist = QDockWidget(self)
        self.dw_playlist.setTitleBarWidget(QWidget())
        self.dw_playlist.setMinimumSize(QtCore.QSize(100, 130))
        self.dw_playlist.setMaximumSize(QtCore.QSize(400, 524287))
        self.dw_playlist.setFloating(False)
        self.dw_playlist.setFeatures(
            QtWidgets.QDockWidget.NoDockWidgetFeatures)
        self.dw_playlist.setAllowedAreas(QtCore.Qt.RightDockWidgetArea)

        self.dw_playlist_widgets = QWidget(self)
        layout5 = QVBoxLayout()
        self.playlist_table = TablePlaylist(self)
        collection = self.parent().dwc_left.listView_collections.currentItem()
        if collection:
            coll_name = collection.text()
        else:
            coll_name = 'MainCollection'
        self.coll_label = QLabel(coll_name, parent=self.dw_playlist_widgets)
        self._set_playlist_table(coll_name)
        layout5.addWidget(self.coll_label)
        layout5.addWidget(self.playlist_table)
        self.dw_playlist_widgets.setLayout(layout5)
        self.dw_playlist.setWidget(self.dw_playlist_widgets)

        # dock widget for playback
        self.dw_playback = QDockWidget(self.central_widget)
        self.dw_playback.setTitleBarWidget(QWidget())
        self.dw_playback.setFixedHeight(90)
        self.dw_playback.setFloating(False)
        self.dw_playback.setAllowedAreas(QtCore.Qt.BottomDockWidgetArea)
        self.dw_playback.setFeatures(
            QtWidgets.QDockWidget.NoDockWidgetFeatures)

        dw_contents = QWidget()
        layout4 = QHBoxLayout(dw_contents)
        layout4.setContentsMargins(3, 3, 3, 3)
        self.playback_frame = PlaybackFrame(dw_contents)
        layout4.addWidget(self.playback_frame)
        self.dw_playback.setWidget(dw_contents)

        # add dock widgets to main window
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dw_features)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dw_playlist)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.dw_playback)

        # signals
        self.playlist_table.item_changed.connect(self._item_changed)

    def _item_changed(self, mbid):
        print(mbid)

    def _set_playlist_table(self, coll_name):
        conn, c = database.connect()
        collection = database.fetch_collection(c, coll_name)
        self.playlist_table.add_recordings(collection)

    def __set_slider(self, len_audio):
        """
        Sets the slider according to the given audio recording.
        :param len_audio:
        """
        self.playback_frame.slider.setMinimum(0)
        self.playback_frame.slider.setMaximum(len_audio)
        self.playback_frame.slider.setTickInterval(10)
        self.playback_frame.slider.setSingleStep(1)

    def closeEvent(self, close_event):
        self.player_frame.closeEvent(close_event)

    def evaluate_checked_signal(self, type, item, is_checked):
        if item == 'pitch' or item == 'pitch_filtered':
            if is_checked:
                self.player_frame.plot_1d_data(type, item)
            else:
                self.player_frame.ts_widget.zoom_selection.clearPlots()
                self.player_frame.is_pitch_plotted = False
                self.player_frame.ts_widget.pitch_plot = None

                if hasattr(self.player_frame.ts_widget, 'hline_histogram'):
                    self.player_frame.ts_widget.right_axis.removeItem(
                        self.player_frame.ts_widget.hline_histogram)

        if item == 'tonic':
            if is_checked:
                self.player_frame.plot_1d_data(type, item)
            else:
                self.player_frame.ts_widget.remove_given_items(
                    self.player_frame.ts_widget.zoom_selection,
                    self.player_frame.ts_widget.tonic_lines)

        if item == 'notes':
            if is_checked:
                self.player_frame.add_1d_roi_items(type, item)
                self.player_frame.open_score_dialog(self.docid)
            else:
                self.player_frame.ts_widget.remove_given_items(
                    self.player_frame.ts_widget.zoom_selection,
                    self.player_frame.ts_widget.rois)
                self.player_frame.ts_widget.is_notes_added = False

        if item == 'metadata':
            if is_checked:
                m_path = self.get_feature_path(self.docid,
                                               type=type,
                                               item=item)
                metadata = json.load(open(m_path))

                self.metadata_dialog = QDialog(self)
                layout = QVBoxLayout(self.metadata_dialog)
                mt = MetadataTreeMakam(metadata)
                layout.addWidget(mt)
                self.metadata_dialog.setLayout(layout)
                self.metadata_dialog.resize(500, 500)
                self.metadata_dialog.show()
            else:
                self.metadata_dialog.close()

        if item == 'sections':
            if is_checked:
                s_path = self.get_feature_path(self.docid,
                                               type=type,
                                               item=item)
                self.player_frame.add_sections_to_waveform(s_path)
            else:
                self.player_frame.waveform_widget.remove_sections()

        if item == 'pitch_distribution':
            if is_checked:
                s_path = self.get_feature_path(self.docid,
                                               type=type,
                                               item=item)
                vals, bins = load_pd(s_path)
                self.hist_dialog = HistogramDialog()
                self.hist_dialog.plot_histogram(bins, vals)
                self.hist_dialog.show()
                self.player_frame.hist_visible = True

                self.player_frame.update_histogram.connect(
                    self.hist_dialog.update_histogram)

            else:
                self.hist_dialog.close()
                self.player_frame.hist_visible = False

    @staticmethod
    def get_feature_path(mbid, type, item):
        feature = type + '--' + item + '.json'
        path = os.path.join(DOCS_PATH, mbid, feature)
        return path