Exemplo n.º 1
0
def qmy_button(parent, todo, display_text, the_row=None, the_col=None):
    new_but = QPushButton(display_text)
    new_but.setContentsMargins(1, 1, 1, 1)
    new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    new_but.setFont(QFont('SansSerif', 12))
    new_but.setAutoDefault(False)
    new_but.setDefault(False)
    if the_row is not None:
        parent.addWidget(new_but, the_row, the_col)
    else:
        parent.addWidget(new_but)
    new_but.clicked.connect(todo)
    return new_but
Exemplo n.º 2
0
class ToolBar(QWidget):
    def __init__(self, parent=None):
        super(ToolBar, self).__init__(parent)

        self.setContentsMargins(0, 0, 0, 0)
        self.setLayout(QHBoxLayout())
        
        iconButtonPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        iconButtonPolicy.setHorizontalStretch(0)
        iconButtonPolicy.setVerticalStretch(0)
        
        # -- przycisk wysłania --        
        self.sendButton = QPushButton(u"&Send", self)
        self.sendButton.setObjectName("sendButton")
        self.sendButton.setIcon(pea_app().send_icon)
        sendSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        self.sendButton.setSizePolicy(sendSizePolicy)
        self.layout().addWidget(self.sendButton)
        
        self.layout().addStretch()
        
        # -- przycisk dodawania
        self.addButton = QtGui.QPushButton(self)
        self.addButton.setObjectName("addButton")
        self.addButton.setSizePolicy(iconButtonPolicy)
        self.addButton.setIcon(pea_app().add_icon)
        self.layout().addWidget(self.addButton)
        
        # -- przycisk do dat
        self.datesButton = QtGui.QPushButton(self)
        self.datesButton.setCheckable(True)
        self.datesButton.setObjectName("datesButton")
        self.datesButton.setSizePolicy(iconButtonPolicy)
        self.datesButton.setIcon(pea_app().calendar_icon)
        self.layout().addWidget(self.datesButton)
        
        # -- przycisk zamykania
        self.closeButton = QtGui.QPushButton(self)
        self.closeButton.setObjectName("closeButton")
        self.closeButton.setSizePolicy(iconButtonPolicy)
        self.closeButton.setIcon(pea_app().close_icon)
        self.layout().addWidget(self.closeButton)
Exemplo n.º 3
0
 def __init__(self, display_text, todo, arg_dict, help_instance = None, max_field_size = None):
     super(qButtonWithArgumentsClass, self).__init__()
     self.todo = todo
     self.setContentsMargins(1, 1, 1, 1)
     newframe = QHBoxLayout()
     self.setLayout(newframe)
     newframe.setSpacing(1)
     newframe.setContentsMargins(1, 1, 1, 1)
     
     new_but = QPushButton(display_text)
     new_but.setContentsMargins(1, 1, 1, 1)
     new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
     new_but.setFont(regular_font)
     new_but.setAutoDefault(False)
     new_but.setDefault(False)
     newframe.addWidget(new_but)
     new_but.clicked.connect(self.doit)
     self.arg_hotfields = []
     for k in sorted(arg_dict.keys()):
         if isinstance(arg_dict[k], list):
             the_list = arg_dict[k]
             if len(the_list) == 0:
                 qe = qHotField(k, str, "", the_list, pos = "top", max_size = max_field_size)
             else:
                 qe = qHotField(k, type(arg_dict[k][0]), arg_dict[k][0], the_list, pos = "top", max_size = max_field_size)
         else:
             qe = qHotField(k, type(arg_dict[k]), arg_dict[k], pos = "top", max_size = max_field_size)
         newframe.addWidget(qe)
         newframe.setAlignment(qe, QtCore.Qt.AlignLeft)
         self.arg_hotfields.append(qe)
     newframe.addStretch()
     if hasattr(todo, "help_text"):
         if (help_instance == None):
             print "No help instance specified."
         else:
             help_button_widget = help_instance.create_button(display_text, todo.help_text)
             newframe.addWidget(help_button_widget)
             QtGui.QToolTip.setFont(regular_font)
             self.setToolTip(todo.help_text)
class MovementFilterWidget(QtGui.QWidget):
    def __init__(self):
        super(MovementFilterWidget, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        #lblFromDate
        self.lblFromDate = QLabel("From Date")
        self.lblFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblFromDate, 1, 0)
        #dateFromDate
        self.dateFromDate = QDateEdit(self)
        self.dateFromDate.setDisplayFormat("dd-MM-yyyy")
        self.dateFromDate.setDate(date(2001, 7, 14))
        self.dateFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateFromDate, 1, 1)
        #lblToDate
        self.lblToDate = QLabel("To Date")
        self.lblToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblToDate, 2, 0)
        #dateToDate
        self.dateToDate = QDateEdit(self)
        self.dateToDate.setDisplayFormat("dd-MM-yyyy")
        self.dateToDate.setDate(datetime.now())
        self.dateToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateToDate, 2, 1)
        #btnSubmit
        self.btnSubmit = QPushButton("Submit", self)
        self.btnSubmit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnSubmit)
        self.setFixedSize(190, 100)
        self.initListener()

    def initListener(self):
        self.btnSubmit.clicked.connect(self.doSubmit)

    def doSubmit(self):
        from core.mainEngine import MainEngine
        mainEngine = Singleton(MainEngine)
        mainEngine.refreshAll((self.dateFromDate.date()).toPython(),
                              (self.dateToDate.date()).toPython())
Exemplo n.º 5
0
class ImportMovementFilter(QtGui.QWidget):
    def __init__(self, parent):
        super(self.__class__, self).__init__()
        self.parent = parent
        self.layout = QtGui.QGridLayout(self)
        #btnfileFinder
        self.btnfileFinder = QtGui.QPushButton("File")
        self.layout.addWidget(self.btnfileFinder, 1, 0)
        #txtFile
        self.txtFile = QLineEdit(self)
        self.layout.addWidget(self.txtFile, 1, 1)
        #lblAssetName
        self.lblAssetName = QLabel("Asset Name")
        self.layout.addWidget(self.lblAssetName, 2, 0)
        #cmdAssetName
        self.cmdAssetName = QComboBox(self)
        self.cmdAssetName.addItems(DaoReportMovement.getAssetNames())
        self.cmdAssetName.setCurrentIndex(self.cmdAssetName.findText("ALL"))
        self.layout.addWidget(self.cmdAssetName, 2, 1)
        #btnSubmit
        self.btnSubmit = QPushButton("Submit", self)
        self.btnSubmit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnSubmit)
        self.setFixedSize(190, 150)
        self.initListener()

    def initListener(self):
        self.btnSubmit.clicked.connect(self.doSubmit)
        self.btnfileFinder.clicked.connect(self.doFile)
        self.btnfileFinder.show()

    def doSubmit(self):
        assetName = self.cmdAssetName.currentText()
        self.parent.doSubmit(self.txtFile.text(), assetName)

    def doFile(self):
        filePath = QtGui.QFileDialog.getOpenFileName()
        self.txtFile.setText(filePath[0])
Exemplo n.º 6
0
class PnLFilter(QtGui.QWidget):
    def __init__(self, parent):
        super(PnLFilter, self).__init__()
        self.parent = parent
        self.layout = QtGui.QGridLayout(self)
        #lblFromDate
        self.lblFromDate = QLabel("From Date")
        self.lblFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblFromDate, 1, 0)
        #dateFromDate
        self.dateFromDate = QDateEdit(self)
        self.dateFromDate.setDisplayFormat("dd-MM-yyyy")
        self.dateFromDate.setDate(date(2018, 1, 1))
        self.dateFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateFromDate, 1, 1)
        #lblToDate
        self.lblToDate = QLabel("To Date")
        self.lblToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblToDate, 2, 0)
        #dateToDate
        self.dateToDate = QDateEdit(self)
        self.dateToDate.setDisplayFormat("dd-MM-yyyy")
        self.dateToDate.setDate(QDate.currentDate())
        self.dateToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateToDate, 2, 1)
        #btnSubmit
        self.btnSubmit = QPushButton("Submit", self)
        self.btnSubmit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnSubmit)
        self.setFixedSize(190, 100)
        self.initListener()

    def initListener(self):
        self.btnSubmit.clicked.connect(self.doSubmit)

    def doSubmit(self):
        self.parent.doSubmit((self.dateFromDate.date()).toPython(),
                             (self.dateToDate.date()).toPython())
Exemplo n.º 7
0
 def __init__(self, display_text, todo, arg_dict, help_instance = None):
     super(qOldButtonWithArgumentsClass, self).__init__()
     self.todo = todo
     self.arg_dict = arg_dict
     # self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
     self.setContentsMargins(1, 1, 1, 1)
     newframe = QHBoxLayout()
     self.setLayout(newframe)
     newframe.setSpacing(1)
     newframe.setContentsMargins(1, 1, 1, 1)
     
     new_but = QPushButton(display_text)
     new_but.setContentsMargins(1, 1, 1, 1)
     new_but.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
     new_but.setFont(QFont('SansSerif', 12))
     new_but.setAutoDefault(False)
     new_but.setDefault(False)
     newframe.addWidget(new_but)
     new_but.clicked.connect(self.doit)
     for k in sorted(arg_dict.keys()):
         if isinstance(self.arg_dict[k], list):
             the_list = self.arg_dict[k]
             self.arg_dict[k] = ""
             qe = qLabeledPopup(k, self.arg_dict, the_list, "top")
         elif isinstance(self.arg_dict[k], bool):
             qe = qLabeledCheck(k, self.arg_dict, "top")
         else:
             qe = qLabeledEntry(k, self.arg_dict,  "top")
         newframe.addWidget(qe)
     newframe.addStretch()
     if hasattr(todo, "help_text"):
         if (help_instance == None):
             print "No help instance specified."
         else:
             help_button_widget = help_instance.create_button(display_text, todo.help_text)
             newframe.addWidget(help_button_widget)
class ImportMovementPanel(PanelWithTable):

    columnList = ReportMovementPanel.columnList

    def __init__(self):
        super(self.__class__, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        self.importMovementFilter = ImportMovementFilter(self)
        self.layout.addWidget(self.importMovementFilter, 1, 0,
                              QtCore.Qt.AlignTop)
        self.layout.addWidget(self.createTable(), 1, 1, QtCore.Qt.AlignTop)
        self.btnImport = QPushButton("Import", self)
        self.btnImport.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnImport)
        self.btnDelete = QPushButton("Delete", self)
        self.btnDelete.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnDelete)
        self.initListener()

    def initListener(self):
        self.btnImport.clicked.connect(self.doImport)
        self.btnDelete.clicked.connect(self.doDelete)

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(1000)
        self.table.setColumnCount(len(self.columnList) + 1)
        self.table.setColumnHidden(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID, True)
        self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.table.setHorizontalHeaderLabels(self.columnList)
        #self.pnLTableWidget.resizeColumnsToContents()
        self.table.sortItems(Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE)
        self.table.doubleClicked.connect(self.doImportOrDelete)
        self.table.resizeRowsToContents()
        self.table.setFixedSize(1100, 900)
        return self.table

    def doSubmit(self, filePath, assetName):
        self.imLO = MovementImporter().getMovementList(filePath, assetName)
        self.table.setSortingEnabled(False)
        self.table.clearContents()
        if (self.imLO.movementList is not None):
            countRowTable = len(self.imLO.movementList)
            self.table.setRowCount(countRowTable)
            self.renderTableForObject(self.imLO.movementList)
            imLO2 = Engine.getReportMovementList(self.imLO.fromDate,
                                                 self.imLO.toDate, 'ALL',
                                                 assetName,
                                                 self.imLO.custodyName)
            countRowTable += len(imLO2.movementList)
            self.table.setRowCount(countRowTable)
            self.renderTableForRS(imLO2.movementList)
            self.table.setSortingEnabled(True)
            self.table.resizeRowsToContents()

    def renderTableForObject(self, tableList):
        self.row = 0
        isBold = False
        color = QtGui.QColor(204, 255, 153)
        for movement in tableList:
            self.addItemtoTable2(
                self.table, movement.OID, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID, isBold, color)
            self.addItemtoTable2(
                self.table, movement.externalID, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EXTERNAL_ID, isBold,
                color)
            self.addItemtoTable2(self.table, movement.comment, self.row,
                                 Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMENT,
                                 isBold, color)
            self.addItemtoTable2(
                self.table, movement.custody.name, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_CUSTODY_NAME, isBold,
                color)
            self.addItemtoTable2(
                self.table, movement.getMovementType(), self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE, isBold,
                color)
            self.addItemtoTable2(
                self.table, movement.getMovementSubType(), self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE, isBold,
                color)
            if (movement.asset is not None):
                self.addItemtoTable2(
                    self.table, movement.asset.name, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_ASSET_NAME, isBold,
                    color)
            if (movement.tax is not None):
                self.addItemtoTable2(
                    self.table, "NEW", self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.tax.taxAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_AMOUNT, isBold,
                    color)
            if (isinstance(movement, Movement)):
                self.addItemtoTable2(
                    self.table, movement.buySell, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.acquisitionDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.quantity, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_QUANTITY, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.price, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_PRICE, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.rate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_RATE, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.grossAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.netAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.commissionPercentage, self.row,
                    Constant.
                    CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_PERCENTAGE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.commissionAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_AMOUNT,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.commissionVATAmount, self.row,
                    Constant.
                    CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_IVA_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.tenor, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TENOR, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.maturityDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_MATURITY_DATE,
                    isBold, color)
            elif (isinstance(movement, CorporateEvent)):
                self.addItemtoTable2(
                    self.table, movement.paymentDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.grossAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.netAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
            elif (isinstance(movement, CashMovement)):
                self.addItemtoTable2(
                    self.table, movement.inOut, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.movementDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.amount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.amount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
            #HiddenID
            self.addItemtoTable2(
                self.table, self.row, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID, isBold)
            self.row += 1

    def renderTableForRS(self, tableList):
        isBold = False
        for listItem in tableList:
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_ASSET_NAME, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_QUANTITY,
                                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_PRICE,
                                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_RATE,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_PERCENTAGE,
                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_AMOUNT,
                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_IVA_AMOUNT,
                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TENOR,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_MATURITY_DATE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_CUSTODY_NAME, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_AMOUNT, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMENT,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EXTERNAL_ID, isBold)
            self.row += 1

    def doImportOrDelete(self):
        index = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID)
        if (index is not None):
            self.doImport()
        else:
            self.doDelete()

    def doImport(self):
        index = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID)
        if (index is not None):
            operation = self.imLO.movementList[int(index)]
            print(operation.externalID)
            newID = None
            taxNewID = None
            if (isinstance(operation, Movement)):
                rs = DaoMovement.getMovementsByExternalID(operation.externalID)
                if len(rs) == 0:
                    if (operation.OID == "NEW"):
                        newID = DaoMovement.insertMovement(operation)
                if (operation.tax is not None and operation.tax.OID == "NEW"):
                    rs = DaoTax.getTaxByExternalID(operation.tax.externalID)
                    if len(rs) == 0:
                        taxNewID = DaoTax.insert(operation.tax)
            elif (isinstance(operation, CorporateEvent)):
                rs = DaoCorporateEvent.getCorporateEventByExternalID(
                    operation.externalID)
                if len(rs) == 0:
                    newID = DaoCorporateEvent.insert(operation)
                    print(newID)
                    if (operation.tax is not None):
                        rs = DaoTax.getTaxByExternalID(
                            operation.tax.externalID)
                        if len(rs) == 0:
                            operation.tax.originOID = newID
                            taxNewID = DaoTax.insert(operation.tax)
            elif (isinstance(operation, CashMovement)):
                rs = DaoCashMovement.getCashMovementsByExternalID(
                    operation.externalID)
                if len(rs) == 0:
                    newID = DaoCashMovement.insert(operation)
            box = QMessageBox()
            box.setWindowTitle('ADD')
            if (newID is None and taxNewID is None):
                box.setText("CANNOT ADD externalID " + operation.externalID)
            else:
                if (newID is not None and taxNewID is not None):
                    box.setText("INSERTED MOVEMENT " + operation.externalID +
                                " NEWID: " + str(newID) + " NEWTAXID: " +
                                str(taxNewID))
                elif (newID is not None and taxNewID is None):
                    box.setText("INSERTED MOVEMENT " + operation.externalID +
                                " NEWID: " + str(newID))
                else:
                    box.setText("INSERTED TAX " + operation.tax.externalID +
                                " NEWTAXID: " + str(taxNewID))
            box.exec_()

    def doDelete(self):
        movementOID = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID)
        movementType = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE)
        movementSubType = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE)
        taxOID = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID)
        result = 0
        if (movementType == Constant.CONST_MOVEMENT_TYPE
                and movementSubType == Constant.CONST_MOVEMENT_SUB_TYPE):
            result = DaoMovement.deleteMovement(movementOID)
            print(result)
        elif (movementType == Constant.CONST_MOVEMENT_TYPE
              and movementSubType == Constant.CONST_CASH_MOVEMENT_SUB_TYPE):
            result = DaoCashMovement.deleteCashMovement(movementOID)
            print(result)
        elif (movementType == Constant.CONST_CORP_EVENT_TYPE
              and movementSubType == Constant.CONST_CORP_EVENT_SUB_TYPE):
            if (taxOID):
                taxResult = DaoTax.deleteTax(taxOID)
            result = DaoCorporateEvent.deleteCorporateEvent(movementOID)
            print(result)
        box = QMessageBox()
        box.setWindowTitle('DELETED')
        if (result == 0):
            box.setText("CANNOT DELETE " + movementType + "-" +
                        movementSubType + "-" + movementOID)
        else:
            if (taxOID is None or taxOID == ""):
                box.setText(movementType + "-" + movementSubType + "-" +
                            movementOID + ": " + str(result) +
                            " record(s) deleted")
            else:
                box.setText(movementType + "-" + movementSubType + "-" +
                            movementOID + ": " + str(result) +
                            " record(s) deleted and taxID: " + taxOID + " " +
                            str(taxResult) + " record(s) deleted")
        box.exec_()
Exemplo n.º 9
0
class window(QMainWindow):

    """Main window."""

    def __init__(self, parent=None):
        """Initialize the parent class of this instance."""
        super(window, self).__init__(parent)
        app.aboutToQuit.connect(self.myExitHandler)

        self.style_sheet = self.styleSheet('style')
        # app.setStyle(QStyleFactory.create('Macintosh'))
        #app.setStyleSheet(self.style_sheet)
        self.layout().setSpacing(0)
        self.layout().setContentsMargins(0,0,0,0)

        app.setOrganizationName("Eivind Arvesen")
        app.setOrganizationDomain("https://github.com/eivind88/raskolnikov")
        app.setApplicationName("Raskolnikov")
        app.setApplicationVersion("0.0.1")
        settings = QSettings()

        self.data_location = QDesktopServices.DataLocation
        self.temp_location = QDesktopServices.TempLocation
        self.cache_location = QDesktopServices.CacheLocation

        self.startpage = "https://duckduckgo.com/"
        self.new_tab_behavior = "insert"

        global bookmarks

        global saved_tabs
        print "Currently saved_tabs:\n", saved_tabs

        global menubar
        menubar = QMenuBar()

        # Initialize a statusbar for the window
        self.statusbar = self.statusBar()
        self.statusbar.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
        self.statusbar.setStyleSheet(self.style_sheet)
        self.statusbar.setMinimumHeight(15)

        self.pbar = QProgressBar()
        self.pbar.setMaximumWidth(100)
        self.statusbar.addPermanentWidget(self.pbar)

        self.statusbar.hide()

        self.setMinimumSize(504, 235)
        # self.setWindowModified(True)
        # app.alert(self, 0)
        self.setWindowTitle("Raskolnikov")
        # toolbar = self.addToolBar('Toolbar')
        # toolbar.addAction(exitAction)
        # self.setUnifiedTitleAndToolBarOnMac(True)
        self.setWindowIcon(QIcon(""))

        # Create input widgets
        self.bbutton = QPushButton(u"<")
        self.fbutton = QPushButton(u">")
        self.hbutton = QPushButton(u"⌂")
        self.edit = QLineEdit("")
        self.edit.setFont(QFont("Helvetica Neue", 12, QFont.Normal))
        self.edit.setPlaceholderText("Enter URL")
        # self.edit.setMinimumSize(400, 24)
        self.rbutton = QPushButton(u"↻")
        self.dbutton = QPushButton(u"☆")
        self.tbutton = QPushButton(u"⁐")
        # ↆ ⇧ √ ⌘ ⏎ ⏏ ⚠ ✓ ✕ ✖ ✗ ✘ ::: ❤ ☮ ☢ ☠ ✔ ☑ ♥ ✉ ☣ ☤ ✘ ☒ ♡ ツ ☼ ☁ ❅ ✎
        self.nbutton = QPushButton(u"+")
        self.nbutton.setObjectName("NewTab")
        self.nbutton.setMinimumSize(35, 30)
        self.nbutton.setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        self.edit.setTextMargins(2, 1, 2, 0)

        # create a horizontal layout for the input
        input_layout = QHBoxLayout()
        input_layout.setSpacing(4)
        input_layout.setContentsMargins(0, 0, 0, 0)

        # add the input widgets to the input layout
        input_layout.addWidget(self.bbutton)
        input_layout.addWidget(self.fbutton)
        input_layout.addWidget(self.hbutton)
        input_layout.addWidget(self.edit)
        input_layout.addWidget(self.rbutton)
        input_layout.addWidget(self.dbutton)
        input_layout.addWidget(self.tbutton)

        # create a widget to hold the input layout
        self.input_widget = QFrame()
        self.input_widget.setObjectName("InputWidget")
        self.input_widget.setStyleSheet(self.style_sheet)

        # set the layout of the widget
        self.input_widget.setLayout(input_layout)
        self.input_widget.setVisible(True)

        # CREATE BOOKMARK-LINE HERE
        self.bookmarks_layout = QHBoxLayout()
        self.bookmarks_layout.setSpacing(0)
        self.bookmarks_layout.setContentsMargins(0, 0, 0, 0)

        for i in bookmarks:
            link = QToolButton()
            link.setDefaultAction(QAction(unicode(i), link))
            link.setObjectName(unicode(i))
            link.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
            link.clicked.connect(self.handleBookmarks)

            self.bookmarks_layout.addWidget(link)

        self.bookmarks_widget = QFrame()
        self.bookmarks_widget.setObjectName("BookmarkWidget")
        self.bookmarks_widget.setStyleSheet(self.style_sheet)
        self.bookmarks_widget.setLayout(self.bookmarks_layout)

        if not bookmarks:
            self.bookmarks_widget.hide()

        # Task list
        self.tasklist = QStandardItemModel()
        #parentItem = self.tasklist.invisibleRootItem()
        #self.tasklist.header().hide()
        self.tasklist.setHorizontalHeaderItem(0, QStandardItem('Tasks'))
        parentItem = QStandardItem("Parent")
        self.tasklist.appendRow(parentItem)
        for i in range(4):
            item = QStandardItem("Item %d" % i)
            parentItem.appendRow(item)
            #parentItem = item

        #self.list.activated[str].connect(self.handleBookmarks)
        #self.list.view().setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        # create tabs
        self.tabs = QTabWidget()
        self.tabs.setDocumentMode(True)
        self.tabs.setTabsClosable(True)
        self.tabs.setMovable(True)
        self.tabs.tabBar().hide()
        self.tabs.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
        self.tabs.setCornerWidget(self.nbutton)
        self.tabs.cornerWidget().setObjectName("CornerWidget")
        self.tabs.cornerWidget().setMinimumSize(10, 24)
        self.tabs.cornerWidget().setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        if saved_tabs:
            for tab in saved_tabs['tabs']:
                tasklist = QTreeView()
                tasklist.hide()
                tasklist.setObjectName('taskList')
                tasklist.setMinimumWidth(100)
                tasklist.setMaximumWidth(250)

                new_tab = QWebView()
                new_tab.setObjectName('webView')

                inspector = QWebInspector(self)
                inspector.setObjectName('webInspector')
                inspector.hide()

                page_layout = QVBoxLayout()
                page_layout.setSpacing(0)
                page_layout.setContentsMargins(0, 0, 0, 0)
                page_layout.addWidget(new_tab)
                page_layout.addWidget(inspector)
                page_widget = QFrame()
                page_widget.setObjectName('pageWidget')
                page_widget.setLayout(page_layout)

                complete_tab_layout = QHBoxLayout()
                complete_tab_layout.setSpacing(0)
                complete_tab_layout.setContentsMargins(0, 0, 0, 0)
                complete_tab_layout.addWidget(tasklist)
                complete_tab_layout.addWidget(page_widget)
                complete_tab_widget = QFrame()
                complete_tab_widget.setLayout(complete_tab_layout)

                #for page in tab['history']:
                #    new_tab.load(QUrl(page['url']))
                #print tab['current_history']
                #for item in new_tab.history().items():
                #    print item
                #new_tab.history().goToItem(new_tab.history().itemAt(tab['current_history']))
                new_tab.load(QUrl(tab['history'][tab['current_history']]['url']))
                tab['current_history']
                self.tabs.setUpdatesEnabled(False)
                if self.new_tab_behavior == "insert":
                    self.tabs.insertTab(self.tabs.currentIndex()+1, complete_tab_widget,
                                        unicode(new_tab.title()))
                elif self.new_tab_behavior == "append":
                    self.tabs.appendTab(complete_tab_widget, unicode(new_tab.title()))
                self.tabs.setUpdatesEnabled(True)
                new_tab.titleChanged.connect(self.change_tab)
                new_tab.urlChanged.connect(self.change_tab)
                new_tab.loadStarted.connect(self.load_start)
                new_tab.loadFinished.connect(self.load_finish)
                new_tab.loadProgress.connect(self.pbar.setValue)
                new_tab.page().linkHovered.connect(self.linkHover)
                inspector.setPage(new_tab.page())

            for index, tab in enumerate(saved_tabs['tabs']):
                self.tabs.setTabText(index, tab['history'][tab['current_history']]['title'])

            self.tabs.setCurrentIndex(saved_tabs['current_tab'])
        else:
            self.new_tab()

        tabs_layout = QVBoxLayout()
        tabs_layout.setSpacing(0)
        tabs_layout.setContentsMargins(0, 0, 0, 0)
        tabs_layout.addWidget(self.tabs)

        self.tabs_widget = QFrame()
        self.tabs_widget.setObjectName("TabLine")
        self.tabs_widget.setStyleSheet(self.style_sheet)
        self.tabs_widget.setLayout(tabs_layout)
        self.tabs_widget.setVisible(True)

        # Webkit settings
        gsettings = self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).settings().globalSettings()
        # Basic settings
        gsettings.setAttribute(QWebSettings.AutoLoadImages, True)
        gsettings.setAttribute(QWebSettings.JavascriptEnabled, True)
        gsettings.setAttribute(QWebSettings.JavascriptCanOpenWindows, False)
        gsettings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, False)
        gsettings.setAttribute(QWebSettings.PluginsEnabled, False) # Flash isn't stable at present
        gsettings.setAttribute(QWebSettings.JavaEnabled, False) # Java applet's aren't supported by PySide
        gsettings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        gsettings.setAttribute(QWebSettings.AcceleratedCompositingEnabled,
            True)
        # Performace settings
        gsettings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        gsettings.setAttribute(QWebSettings.AcceleratedCompositingEnabled, True)
        gsettings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        # Other settings
        gsettings.setAttribute(QWebSettings.PrivateBrowsingEnabled, False)

        # Create a vertical layout and add widgets
        vlayout = QVBoxLayout()
        vlayout.setSpacing(0)
        vlayout.setContentsMargins(0, 0, 0, 0)
        # toolbar.addWidget(self.input_widget)
        vlayout.addWidget(self.input_widget)
        vlayout.addWidget(self.bookmarks_widget)
        vlayout.addWidget(self.tabs_widget)

        # create a widget to hold the vertical layout
        wrapper_widget = QWidget()
        wrapper_widget.setLayout(vlayout)
        self.setCentralWidget(wrapper_widget)

        self.bbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).back)
        self.fbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).forward)
        self.hbutton.clicked.connect(self.goHome)
        self.edit.returnPressed.connect(self.set_url)
        # Add button signal to "go" slot
        self.rbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).reload)
        self.dbutton.clicked.connect(self.bookmark)
        self.tbutton.clicked.connect(self.toggleTaskBar)
        self.nbutton.clicked.connect(self.new_tab)
        self.tabs.tabCloseRequested.connect(self.tabs.removeTab)
        self.tabs.currentChanged.connect(self.change_tab)

        widgets = (input_layout.itemAt(i).widget() for i in range(
            input_layout.count()))
        for widget in widgets:
            if isinstance(widget, QPushButton):
                widget.setFixedSize(33, 21)
                widget.setFont(QFont("Helvetica Neue", 12, QFont.Normal))
                widget.pressed.connect(self.press_button)
                widget.released.connect(self.release_button)

        # make a ctrl+q quit
        sequence = QKeySequence(Qt.CTRL + Qt.Key_Q)
        QShortcut(sequence, self, SLOT("close()"))

        # make an accelerator to toggle fullscreen
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_F)
        QShortcut(sequence, self, self.toggle_fullscreen)

        # make an accelerator to toggle input visibility
        sequence = QKeySequence(Qt.CTRL + Qt.ALT + Qt.Key_L)
        QShortcut(sequence, self, self.toggle_input)

        # make an accelerator to focus adress-bar
        sequence = QKeySequence(Qt.CTRL + Qt.Key_L)
        QShortcut(sequence, self, self.focus_adress)

        # make an accelerator to reload page
        sequence = QKeySequence(Qt.CTRL + Qt.Key_R)
        QShortcut(sequence, self, self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).reload)

        # make an accelerator to create new tab
        sequence = QKeySequence(Qt.CTRL + Qt.Key_T)
        QShortcut(sequence, self, self.new_tab)

        # make an accelerator to close tab
        sequence = QKeySequence(Qt.CTRL + Qt.Key_W)
        QShortcut(sequence, self, self.close_tab)

        # make an accelerator to navigate tabs
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left)
        QShortcut(sequence, self, self.previous_tab)
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right)
        QShortcut(sequence, self, self.next_tab)

        # make an accelerator to toggle inspector
        sequence = QKeySequence(Qt.CTRL + Qt.ALT + Qt.Key_U)
        QShortcut(sequence, self, self.handleShowInspector)

        # make an accelerator to toggle bookmark
        sequence = QKeySequence(Qt.CTRL + Qt.Key_D)
        QShortcut(sequence, self, self.bookmark)

        # make an accelerator to toggle task/project-list
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_L)
        QShortcut(sequence, self, self.toggleTaskBar)

        # finally set the attribute need to rotate
        # try:
        #     self.setAttribute(Qt.WA_Maemo5AutoOrientation, True)
        # except:
        #     print "not maemo"

        self.statusbar.show()

    def press_button(self):
        """On button press. Connected."""
        self.sender().setStyleSheet('background-color: rgba(228, 228, 228)')

    def release_button(self):
        """On button release. Connected."""
        self.sender().setStyleSheet('background-color: rgba(252, 252, 252)')

    def goHome(self):
        """Go to startpage."""
        self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).setUrl(QUrl(self.startpage))

    def handleShowInspector(self):
        """Toggle web inspector."""
        self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebInspector, unicode('webInspector')).setShown(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebInspector, unicode('webInspector')).isHidden())

    def toggleTaskBar(self):
        """Toggle task bar."""
        if self.tabs.currentWidget().findChild(QTreeView, unicode('taskList')).isHidden():
            self.tabs.currentWidget().findChild(QTreeView, unicode('taskList')).setModel(self.tasklist)
        self.tabs.currentWidget().findChild(QTreeView, unicode('taskList')).setShown(self.tabs.currentWidget().findChild(QTreeView, unicode('taskList')).isHidden())
        #self.tasklist.setShown(self.tasklist.isHidden())

    def focus_adress(self):
        """Focus adress bar."""
        self.edit.selectAll()
        self.edit.setFocus()

    def toggle_input(self):
        """Toggle input visibility."""
        if self.input_widget.isVisible():
            visible = False
        else:
            visible = True
        self.input_widget.setVisible(visible)

    def toggle_fullscreen(self):
        """Toggle fullscreen."""
        if self.isFullScreen():
            self.showNormal()
        else:
            self.showFullScreen()
        self.change_tab()

    def linkHover(self, l):
        """Show link adress in status bar on mouse hover."""
        self.statusbar.showMessage(l)

    def new_tab(self):
        """Open new tab."""
        tasklist = QTreeView()
        tasklist.hide()
        tasklist.setObjectName('taskList')
        tasklist.setMinimumWidth(100)
        tasklist.setMaximumWidth(250)

        new_tab = QWebView()
        new_tab.setObjectName('webView')

        inspector = QWebInspector(self)
        inspector.setObjectName('webInspector')
        inspector.hide()

        page_layout = QVBoxLayout()
        page_layout.setSpacing(0)
        page_layout.setContentsMargins(0, 0, 0, 0)
        page_layout.addWidget(new_tab)
        page_layout.addWidget(inspector)
        page_widget = QFrame()
        page_widget.setObjectName('pageWidget')
        page_widget.setLayout(page_layout)

        complete_tab_layout = QHBoxLayout()
        complete_tab_layout.setSpacing(0)
        complete_tab_layout.setContentsMargins(0, 0, 0, 0)
        complete_tab_layout.addWidget(tasklist)
        complete_tab_layout.addWidget(page_widget)
        complete_tab_widget = QFrame()
        complete_tab_widget.setLayout(complete_tab_layout)

        new_tab.load(QUrl(self.startpage))
        self.tabs.setUpdatesEnabled(False)
        if self.new_tab_behavior == "insert":
            self.tabs.insertTab(self.tabs.currentIndex()+1, complete_tab_widget,
                                    unicode(new_tab.title()))
        elif self.new_tab_behavior == "append":
            self.tabs.appendTab(complete_tab_widget, unicode(new_tab.title()))
        self.tabs.setCurrentWidget(complete_tab_widget)
        self.tabs.setTabText(self.tabs.currentIndex(),
                             unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).title()))
        self.tabs.setUpdatesEnabled(True)
        # tab.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)
        # tab.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        new_tab.titleChanged.connect(self.change_tab)
        new_tab.urlChanged.connect(self.change_tab)
        new_tab.loadStarted.connect(self.load_start)
        new_tab.loadFinished.connect(self.load_finish)
        new_tab.loadProgress.connect(self.pbar.setValue)
        new_tab.page().linkHovered.connect(self.linkHover)
        inspector.setPage(new_tab.page())

    def change_tab(self):
        """Change active tab."""
        if self.tabs.count() <= 1:
            self.tabs.tabBar().hide()
        else:
            self.tabs.tabBar().show()

        try:
            self.edit.setText(str(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()))
            self.tabs.setTabText(self.tabs.currentIndex(),
                                 unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).title()))
            self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).setFocus()
        except Exception:
            self.tabs.tabBar().hide()
            self.new_tab()

        #print (self.tabs.widget(self.tabs.currentIndex()).size().width()-10), self.tabs.count()
        self.tabs_widget.setStyleSheet(self.style_sheet +
                                       "QTabBar::tab { width:" + str(
                                        (self.tabs.widget(
                                            self.tabs.currentIndex()
                                            ).size().width()-26-self.tabs.count()*2)/self.tabs.count()
                                        ) + "px; }")

    def previous_tab(self):
        """Previous tab."""
        try:
            if self.tabs.currentIndex() > 0:
                self.tabs.setCurrentIndex(self.tabs.currentIndex()-1)
            else:
                self.tabs.setCurrentIndex(self.tabs.count()-1)

            self.change_tab()
        except Exception:
            pass

    def next_tab(self):
        """Next tab."""
        try:
            if self.tabs.currentIndex() < self.tabs.count()-1:
                self.tabs.setCurrentIndex(self.tabs.currentIndex()+1)
            else:
                self.tabs.setCurrentIndex(0)

            self.change_tab()
        except Exception: #, e
            pass

    def close_tab(self):
        """Close tab."""
        self.tabs.removeTab(self.tabs.currentIndex())

    def close(self):
        """Close app."""
        Qapplication.quit()

    def set_url(self):
        """Set url."""
        url = self.edit.text()
        # does the url start with http://?
        if "." not in url:
            url = "http://www.google.com/search?q="+url
        elif not url.startswith("http://"):
            url = "http://" + url
        qurl = QUrl(url)
        self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).load(qurl)
        self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).setFocus()

    def load_start(self):
        """Update view values, called upon started page load."""
        self.rbutton.setText(u"╳")
        self.rbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).stop)
        self.pbar.show()

    def load_finish(self):
        """Update view values, called upon finished page load."""
        if (self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).history().canGoBack()):
            self.bbutton.setEnabled(True)
        else:
            self.bbutton.setEnabled(False)
        if (self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).history().canGoForward()):
            self.fbutton.setEnabled(True)
        else:
            self.fbutton.setEnabled(False)

        self.rbutton.setText(u"↻")
        self.rbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).reload)
        self.pbar.hide()

        global bookmarks
        if unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()) in bookmarks:
            self.dbutton.setText(u"★")
        else:
            self.dbutton.setText(u"☆")

        if not self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebInspector, unicode('webInspector')).isHidden():
            self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebInspector, unicode('webInspector')).hide()
            self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebInspector, unicode('webInspector')).show()

    def bookmark(self):
        """Toggle bookmark."""
        global bookmarks
        if not self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded() in bookmarks:
            bookmarks.append(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())
            pickle.dump(bookmarks, open(bookFile, "wb"))
            link = QToolButton()
            link.setDefaultAction(QAction(unicode(unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())), link))
            link.setObjectName(unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()))
            link.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
            link.clicked.connect(self.handleBookmarks)
            self.bookmarks_layout.addWidget(link)

            if self.bookmarks_widget.isHidden():
                self.bookmarks_widget.show()

            self.dbutton.setText(u"★")

        else:
            bookmarks.remove(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())
            pickle.dump(bookmarks, open(bookFile, "wb"))
            link = self.bookmarks_widget.findChild(QToolButton, unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()))
            self.bookmarks_layout.removeWidget(link)
            link.deleteLater()
            link = None

            if not bookmarks:
                self.bookmarks_widget.hide()

            self.dbutton.setText(u"☆")

    def handleBookmarks(self):

        self.gotoLink(self.sender().objectName())
        #self.gotoLink(unicode())

    def gotoLink(self, url):

        self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).load(QUrl(url))

    def styleSheet(self, style_sheet):
        """Load stylesheet."""
        try:
            with open(os.path.join
                      (basedir, 'assets', 'style.qss'), 'r') as file:
                return file.read()
        except Exception:
            # print e
            return ''

    def resizeEvent(self, evt=None):
        """Called on window resize."""
        self.change_tab()

    def myExitHandler(self):
        """Exiting."""
        pass
        global tabFile

    # {current_tab: 1, tabs:[0: {current_history:3, history:[{title, url}]]}
        pb = {'current_tab': self.tabs.currentIndex()}
        pb['tabs'] = list()
        for tab in range(self.tabs.count()):
            pb['tabs'].append(dict(current_history=self.tabs.widget(
                tab).findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).history().currentItemIndex(), history=list(dict(
                    title=item.title(), url=item.url()
                    ) for item in self.tabs.widget(tab).findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).history().items())))

        # print pb
        pickle.dump(pb, open(tabFile, "wb"))
Exemplo n.º 10
0
    def __init__(self, store):
        super(ItemSelector, self).__init__()

        self.setWindowTitle('Select Item Checkpoint')

        self.store = store

        items = self.store.get('/item')

        layout = QGridLayout()
        self.setLayout(layout)

        self.item_buttons = {}

        width = 5

        label = QLabel('Selected Item')
        label.setAlignment(Qt.AlignHCenter)
        label.setStyleSheet('font-weight: bold;')
        layout.addWidget(label, 0, 0, 1, width)

        for (i, item) in enumerate(sorted(items)):
            parts = items[item]['name'].split(' ') + ['({})'.format(items[item]['location'])]
            lines = ['']
            for part in parts:
                if len(lines[-1]) > 10:
                    lines.append('')

                lines[-1] += ' ' + part

            button = QPushButton('\n'.join([line.strip() for line in lines]))
            icon = QIcon(items[item].get('thumbnail', ''))
            if not icon.isNull():
                button.setIcon(icon)
                button.setIconSize(QSize(64, 64))
            button.setCheckable(True)

            button.clicked.connect(_call(self.select_item, item))

            self.item_buttons[item] = button
            layout.addWidget(button, i // width + 1, i % width)

        self.select_item(self.store.get('/robot/selected_item'))

        self.box_buttons = {}

        label = QLabel('Selected Box')
        label.setAlignment(Qt.AlignHCenter)
        label.setStyleSheet('font-weight: bold;')
        layout.addWidget(label, 0, width + 1)

        for (i, box) in enumerate(sorted(self.store.get('/order'))):
            button = QPushButton(box)
            button.setCheckable(True)
            button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
            button.clicked.connect(_call(self.select_box, box))

            self.box_buttons[box] = button
            layout.addWidget(button, i + 1, width + 1)

        self.select_box(self.store.get('/robot/selected_box'))

        self.bin_buttons = {}

        label = QLabel('Selected Bin')
        label.setAlignment(Qt.AlignHCenter)
        label.setStyleSheet('font-weight: bold;')
        layout.addWidget(label, 0, width + 2)

        for (i, bin) in enumerate(sorted(self.store.get('/shelf/bin'))):
            button = QPushButton(bin)
            button.setCheckable(True)
            button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
            button.clicked.connect(_call(self.select_bin, bin))

            self.bin_buttons[bin] = button
            layout.addWidget(button, i + 1, width + 2)

        self.select_bin(self.store.get('/robot/selected_bin'))
Exemplo n.º 11
0
class ReportMovementFilter(QtGui.QWidget):
    def __init__(self, parent):
        super(ReportMovementFilter, self).__init__()
        self.parent = parent
        self.layout = QtGui.QGridLayout(self)
        #lblFromDate
        self.lblFromDate = QLabel("From Date")
        self.lblFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblFromDate, 1, 0)
        #dateFromDate
        self.dateFromDate = QDateEdit(self)
        self.dateFromDate.setDisplayFormat("dd-MM-yyyy")
        self.dateFromDate.setDate(date(2018, 1, 1))
        self.dateFromDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateFromDate, 1, 1)
        #lblToDate
        self.lblToDate = QLabel("To Date")
        self.lblToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.lblToDate, 2, 0)
        #dateToDate
        self.dateToDate = QDateEdit(self)
        self.dateToDate.setDisplayFormat("dd-MM-yyyy")
        self.dateToDate.setDate(QDate.currentDate())
        self.dateToDate.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.dateToDate, 2, 1)
        #lblMovementType
        self.lblMovementType = QLabel("Movement Type")
        self.layout.addWidget(self.lblMovementType, 3, 0)
        #cmdMovementType
        self.cmdMovementType = QComboBox(self)
        self.cmdMovementType.addItems(DaoReportMovement.getMovementType())
        self.cmdMovementType.setCurrentIndex(
            self.cmdMovementType.findText("ALL"))
        self.layout.addWidget(self.cmdMovementType, 3, 1)
        #lblAssetName
        self.lblAssetName = QLabel("Asset Name")
        self.layout.addWidget(self.lblAssetName, 4, 0)
        #cmdAssetName
        self.cmdAssetName = QComboBox(self)
        self.cmdAssetName.addItems(DaoReportMovement.getAssetNames())
        self.cmdAssetName.setCurrentIndex(self.cmdAssetName.findText("ALL"))
        self.layout.addWidget(self.cmdAssetName, 4, 1)
        #lblCustodyName
        self.lblCustodyName = QLabel("Custody Name")
        self.layout.addWidget(self.lblCustodyName, 5, 0)
        #cmdCustodyName
        self.cmdCustodyName = QComboBox(self)
        self.cmdCustodyName.addItems(DaoCustody().getCustodyNameList())
        self.cmdCustodyName.setCurrentIndex(
            self.cmdCustodyName.findText("ALL"))
        self.layout.addWidget(self.cmdCustodyName, 5, 1)
        #btnSubmit
        self.btnSubmit = QPushButton("Submit", self)
        self.btnSubmit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnSubmit)
        self.setFixedSize(190, 150)
        self.initListener()

    def initListener(self):
        self.btnSubmit.clicked.connect(self.doSubmit)

    def doSubmit(self):
        fromDate = (self.dateFromDate.date()).toPython()
        toDate = (self.dateToDate.date()).toPython()
        movementType = self.cmdMovementType.currentText()
        assetName = self.cmdAssetName.currentText()
        custodyName = self.cmdCustodyName.currentText()
        self.parent.doSubmit(fromDate, toDate, movementType, assetName,
                             custodyName)
Exemplo n.º 12
0
class Note(QtGui.QWidget):
    
    def __init__(self, message, mainGui, parent=None):
        super(Note, self).__init__(parent)
        
        self.mainGui = mainGui
        
        self.NOTE_WIDTH = 240
        self.NOTE_HEIGHT = 240
        
        self.setFixedSize(self.NOTE_WIDTH, self.NOTE_HEIGHT)
        
        self.setObjectName("note")
        
        self.drag = False # czy karteczka jest w trakcie przenoszenia?
        self.dragPos = QPoint() # pozycja rozpoczecia przenoszenia
        
        assert message
         
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setWindowTitle("Note") # FIXME
        
        
        # -- główne layouty --
                
        self.globalVLayout = QtGui.QVBoxLayout(self)
        self.globalVLayout.setObjectName("globalVLayout")
                
        self.upperHLayout = QtGui.QHBoxLayout()
        self.upperHLayout.setObjectName("upperHLayout")
        self.globalVLayout.addLayout(self.upperHLayout)
        
        self.fromToForm = QtGui.QFormLayout()
        self.upperHLayout.addLayout(self.fromToForm)
        
        # -- layout z nadawcą i adresatami --
        self.fromToForm.setSizeConstraint(QtGui.QLayout.SetFixedSize)
        self.fromToForm.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
        self.fromToForm.setObjectName("fromToForm")
        
        self.fromLabel = QtGui.QLabel("From:", self)
        self.fromLabel.setObjectName("fromLabel")
        self.fromToForm.setWidget(0, QtGui.QFormLayout.LabelRole, self.fromLabel)
        
        self.fromToFormUpRight = QtGui.QHBoxLayout()
        self.fromToForm.setLayout(0, QtGui.QFormLayout.FieldRole, self.fromToFormUpRight)
        
        self.toLabel = QtGui.QLabel("To:", self)
        self.toLabel.setObjectName("toLabel")
        self.fromToForm.setWidget(1, QtGui.QFormLayout.LabelRole, self.toLabel)
        
        self.fromToFormDownRight = QtGui.QHBoxLayout()
        self.fromToForm.setLayout(1, QtGui.QFormLayout.FieldRole, self.fromToFormDownRight)
        
        
        # -- przyciski funkcyjne --        
        iconButtonPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        iconButtonPolicy.setHorizontalStretch(0)
        iconButtonPolicy.setVerticalStretch(0)
                
        # -- przycisk wysłania --        
        self.sendButton = QPushButton(u"&Send")
        self.sendButton.setObjectName("sendButton")
        self.sendButton.setIcon(pea_app().send_icon)
        sendSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        self.sendButton.setSizePolicy(sendSizePolicy)
        
        # -- przycisk dodawania
        self.addButton = QtGui.QPushButton(self)
        self.addButton.setObjectName("addButton")
        self.addButton.setSizePolicy(iconButtonPolicy)
        self.addButton.setIcon(pea_app().add_icon)
        
        self.sendButton.clicked.connect(self.sendMessage)
        
        # -- przycisk do dat
        self.datesButton = QtGui.QPushButton(self)
        self.datesButton.setCheckable(True)
        self.datesButton.setObjectName("datesButton")
        self.datesButton.setSizePolicy(iconButtonPolicy)
        self.datesButton.setIcon(pea_app().calendar_icon)
        
        # -- przycisk zamykania
        self.closeButton = QtGui.QPushButton(self)
        self.closeButton.setObjectName("closeButton")
        self.closeButton.setSizePolicy(iconButtonPolicy)
        self.closeButton.setIcon(pea_app().close_icon)
        
        
        
        # --- górny prawy ---
        self.senderUserEntry = QtGui.QLabel('')
        self.senderUserEntry.setObjectName("senderUserEntry")
        self.fromToFormUpRight.addWidget(self.senderUserEntry)
        self.fromToFormUpRight.addStretch()
        self.fromToFormUpRight.addWidget(self.sendButton)
        self.fromToFormUpRight.addWidget(self.datesButton)
        self.fromToFormUpRight.addWidget(self.closeButton)
        # ---

        # --- dolny prawy ---
        self.recipientsBox = QtGui.QLabel()
        self.fromToFormDownRight.addWidget(self.recipientsBox)
        self.fromToFormDownRight.addStretch()
        self.fromToFormDownRight.addWidget(self.addButton)
        # ---
        

        # -- linia oddzielająca nagłówek od treści
        self.line = QtGui.QFrame(self)
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName("line")
        self.globalVLayout.addWidget(self.line)

        # -- DATES --

        # TODO: zmniejszyć czcionkę?
        self.datesForm = QtGui.QFormLayout()
        self.datesForm.setObjectName("datesForm")
        self.dateLabel = QtGui.QLabel("Date:", self)
        self.dateLabel.setObjectName("dateLabel")
        self.datesForm.setWidget(0, QtGui.QFormLayout.LabelRole, self.dateLabel)
        self.validLabel = QtGui.QLabel("Valid till:", self)
        self.validLabel.setObjectName("validLabel")
        self.datesForm.setWidget(1, QtGui.QFormLayout.LabelRole, self.validLabel)
        self.dateData = QtGui.QLabel(self)
        self.dateData.setObjectName("dateData")
        self.datesForm.setWidget(0, QtGui.QFormLayout.FieldRole, self.dateData)
        self.validData = QtGui.QLabel(self)
        self.validData.setObjectName("validData")
        self.datesForm.setWidget(1, QtGui.QFormLayout.FieldRole, self.validData)

        self.datesWidget = QtGui.QWidget()
        self.datesWidget.setLayout(self.datesForm)
        self.globalVLayout.addWidget(self.datesWidget)
        
        # -- obsługa chowania dat
        self.datesWidget.hide()
        self.datesButton.toggled.connect(self.toggleDatesWidget)
        
        # TODO:
        # -- obsługa dodawania adresata
        self.addButton.clicked.connect(self.selectRecipients)

        
        # -- pole treści
        self.noteContent = QtGui.QTextBrowser(self)
        self.noteContent.setEnabled(True)
        
        self.noteContent.setFrameShape(QtGui.QFrame.NoFrame)
        self.noteContent.setFrameShadow(QtGui.QFrame.Plain)
        self.noteContent.setReadOnly(True)
        self.noteContent.setObjectName("noteContent")
        self.globalVLayout.addWidget(self.noteContent)
        
        
        # -- obsługa zamykania        
        self.closeButton.setShortcut(QtGui.QApplication.translate("note", "Ctrl+Q", None, QtGui.QApplication.UnicodeUTF8))
        self.closeButton.clicked.connect(self.closeNote)

        # -- przyszłe okno wyboru adresatów 
        self.selectRecipentsWindow = None

        # -- ustawienie treści
        self.setMessage(message)
    
    
    def setRecipients(self, recipients):
        '''Ustawia listę nadawców
        Argument recipients: lista str [odbiorca1, odbiorca2, ...]'''
        self.recipients_ = recipients
                
        rec_join = ', '.join(recipients)
        self.recipientsBox.setText(trunc_str(rec_join, 21))
        self.recipientsBox.setToolTip(rec_join)
    
    def setSender(self, sender):
        '''Ustawia wysyłającego
        Argument sender: str nadawca'''
        self.sender_ = sender
    
    def mousePressEvent(self, event):
        self.raise_()
        if event.button() == Qt.LeftButton:
            self.drag = True
            self.dragPos = event.globalPos() - self.pos()
    
    def mouseReleaseEvent(self, event):
        self.drag = False
    
    def mouseMoveEvent(self, event):
        if self.drag:
            self.move(event.globalPos() - self.dragPos)
    
    def updateMessageState(self):
        s = self.__message__.state
        send_button = False
        if s == MsgState.GUI:
            self.noteContent.setReadOnly(False)
            send_button = True
            self.addButton.show()
        elif s == MsgState.TO_SEND:
            send_button = True
            self.addButton.setDisabled(True)
            self.sendButton.setDisabled(True)
            self.noteContent.setReadOnly(True)
        elif s == MsgState.DELETED:
            self.close()
        else:
            self.sendButton.hide()
            self.addButton.hide()
            self.noteContent.setReadOnly(True)
            
        if send_button:
            self.sendButton.show()
            self.senderUserEntry.setText(trunc_str(self.sender(), 6))
        else:
            self.senderUserEntry.setText(trunc_str(self.sender(), 16))
            
        self.senderUserEntry.setToolTip(self.sender())
    
    def setMessageState(self, state):
        self.__message__.state = state
        self.updateMessageState()
    
    def setMessage(self, message):
        assert message
        self.__message__ = message
        
        self.setSender(message.sender)
        self.setRecipients(message.recipients)
        self.dateData.setText(message.create_date.strftime(DATETIME_FORMAT))
        self.validData.setText(message.expire_date.strftime(DATETIME_FORMAT))
        self.noteContent.setHtml(message.content)
        
        self.updateMessageState()
    
    def sendMessage(self):
        # tylko dla całkiem nowych wiadomości (w sumie tylko powinny być)
        if self.__message__.state == MsgState.GUI:
            self.__message__.content = self.noteContent.toPlainText()
            self.__message__.sender = self.sender()
            self.__message__.recipients = self.recipients()
            self.setMessageState(MsgState.TO_SEND)
        self.mainGui.client.addMsg(self.__message__)
        self.mainGui.updateNotes()
    
    def getMessage(self):
        return self.__message__
    
    def sender(self):
        return self.sender_
    
    def recipients(self):
        '''Zwraca listę str adresatów'''
        return self.recipients_
    
    def knownUsers(self):
        '''Zwraca listę znanych użytkowników'''
        return self.mainGui.knownUsers()
    
    def addKnownUser(self, username):
        self.mainGui.addKnownUser(username)
    
    @Slot()
    def closeNote(self):
        '''Dla przycisku zamykania - tylko ustawia stan DELETED.
        Reszta działań jest obsługiwana przez zmianę stanu'''
        self.setMessageState(MsgState.DELETED)
        # TODO: do tego można zrobić inną metodę przesyłającą tylko nowy stan...
        self.mainGui.client.modMsg(self.__message__)
    
    @Slot()
    def toggleDatesWidget(self, visibility):
        '''Dla widgetu z datami - przełączanie widoczności'''
        if visibility:
            self.datesWidget.show()
        else:
            self.datesWidget.hide()
            
    @Slot()
    def selectRecipients(self):
        if not self.selectRecipentsWindow:
            self.selectRecipentsWindow = SelectRecipientsWindow(self)
        self.selectRecipentsWindow.show()