예제 #1
0
파일: list.py 프로젝트: guofengstc/everpad
    def __init__(self, app, *args, **kwargs):
        QDialog.__init__(self, *args, **kwargs)
        self.app = app
        self.closed = False
        self.sort_order = None
        self.ui = Ui_List()
        self.ui.setupUi(self)
        self.setWindowIcon(get_icon())

        self.notebooksModel = QStandardItemModel()
        self.ui.notebooksList.setModel(self.notebooksModel)
        self.ui.notebooksList.selection.connect(self.selection_changed)
        self.ui.notebooksList.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.notebooksList.customContextMenuRequested.connect(
            self.notebook_context_menu)

        self.notesModel = QStandardItemModel()
        self.notesModel.setHorizontalHeaderLabels(
            [self.tr('Title'), self.tr('Last Updated')])

        self.ui.notesList.setModel(self.notesModel)
        self.ui.notesList.doubleClicked.connect(self.note_dblclicked)
        self.ui.notesList.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.notesList.customContextMenuRequested.connect(
            self.note_context_menu)
        self.ui.notesList.header().sortIndicatorChanged.connect(
            self.sort_order_updated)

        self.ui.newNotebookBtn.setIcon(QIcon.fromTheme('folder-new'))
        self.ui.newNotebookBtn.clicked.connect(self.new_notebook)

        self.ui.newNoteBtn.setIcon(QIcon.fromTheme('document-new'))
        self.ui.newNoteBtn.clicked.connect(self.new_note)
예제 #2
0
    def __init__(self, parent):
        super(FilteredTable, self).__init__(parent)

        self.model = QStandardItemModel(600, 600)
        for i in range(self.model.rowCount()):
            for j in range(self.model.columnCount()):
                self.model.setData(self.model.index(i, j), str(i * j),
                                   Qt.DisplayRole)

        self.m = FilteringModel(self)
        self.m.setSourceModel(self.model)

        d = ['a'] * 300 + ['b'] * 200 + ['c'] * 99 + ['d']
        self.m.setIndexData(d)

        t = QTableView(self)
        t.setModel(self.m)

        self.line_in = QLineEdit(self)
        self.line_in.textChanged.connect(self.m.setFilterFixedString)

        l = QVBoxLayout()
        l.addWidget(self.line_in)
        l.addWidget(t)
        self.setLayout(l)
예제 #3
0
    def __init__(self, parent=None):
        super(TemplateSelectDialog, self).__init__(parent)

        self.setWindowTitle(_("Select a template"))

        self.template_id = []

        self.model = QStandardItemModel()
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.verticalHeader().setVisible(False)
        self.view.horizontalHeader().setVisible(False)
        self.view.setMinimumSize(500, 200)
        self.view.setShowGrid(True)
        self.view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.view.setSelectionBehavior(QAbstractItemView.SelectRows)

        l = QVBoxLayout()

        l.addWidget(QLabel(_("Please select one or more template.")))
        self.view.doubleClicked.connect(self._doubleClicked)

        l.addWidget(QLabel(u"<h3>{}</h3>".format(_("Documents Templates"))))
        l.addWidget(self.view)

        self.buttons = QDialogButtonBox()
        self.buttons.addButton(QDialogButtonBox.StandardButton.Cancel)
        self.buttons.addButton(QDialogButtonBox.Ok)
        self.buttons.accepted.connect(self.accept)
        self.buttons.rejected.connect(self.reject)

        l.addWidget(self.buttons)

        self.setLayout(l)
예제 #4
0
    def testRefCount(self):
        model = QStandardItemModel(5, 5)
        items = []
        for r in range(5):
            row = []
            for c in range(5):
                row.append(QStandardItem("%d,%d" % (r,c)) )
                self.assertEqual(sys.getrefcount(row[c]), 2)

            model.insertRow(r, row)

            for c in range(5):
                ref_after = sys.getrefcount(row[c])
                # check if the ref count was incremented after insertRow
                self.assertEqual(ref_after, 3)

            items.append(row)
            row = None

        for r in range(3):
            my_row = model.takeRow(0)
            my_row = None
            for c in range(5):
                # only rest 1 reference
                self.assertEqual(sys.getrefcount(items[r][c]), 2)

        my_i = model.item(0,0)
        # ref(my_i) + parent_ref + items list ref
        self.assertEqual(sys.getrefcount(my_i), 4)

        model.clear()
        # ref(my_i)
        self.assertEqual(sys.getrefcount(my_i), 3)
예제 #5
0
 def testLen(self):
     model = QStandardItemModel(2, 2)
     model.insertRow(0)
     model.insertRow(1)
     model.insertColumn(0)
     model.insertColumn(1)
     selection = QItemSelection(model.index(0, 0), model.index(1, 1))
     self.assertEqual(len(selection), 1)
예제 #6
0
    def __init__(self, lookup):
        super().__init__()

        self._lookup = lookup
        self._model = QStandardItemModel()  # (4, 4)

        self.initUI()
        self.initDB()
예제 #7
0
 def _init_tags(self):
     self._current_tag = None
     self.tagsModel = QStandardItemModel()
     self.ui.tagsList.setModel(self.tagsModel)
     self.ui.tagsList.selection.connect(self.tag_selection_changed)
     self.ui.tagsList.setContextMenuPolicy(Qt.CustomContextMenu)
     self.ui.tagsList.customContextMenuRequested.connect(
         self.tag_context_menu)
예제 #8
0
def make_header_model(titles,headers=None):
    if headers is None:
        headers = QStandardItemModel(1, len(titles))

    i = 0
    for p in titles:
        headers.setHeaderData(i, Qt.Orientation.Horizontal, p)
        i = i + 1
    return headers
예제 #9
0
    def __init__(self,enumeration,parent=None):
        StandardTableDelegate.__init__(self,parent)

        items = enumeration.symbols()

        self.model = QStandardItemModel(len(items), 1)
        for i in range(len(items)):
            self.model.setData( self.model.index(i,0), items[i].description, Qt.DisplayRole)
            self.model.setData( self.model.index(i,0), items[i], Qt.UserRole)
예제 #10
0
    def __init__(self,parent=None):
        super(PriorityCombo, self).__init__(parent)

        self.model = QStandardItemModel(len(priority_stars()), 1)
        for i,stars in priority_stars():
            ndx = self.model.index( i-1, 0)
            self.model.setData( ndx, stars, Qt.DisplayRole)
            self.model.setData( ndx, i, Qt.UserRole)

        self.setModel( self.model)
예제 #11
0
    def __init__(self,parent):
        global dao
        super(FindOrderDialog,self).__init__(parent)

        title = _("Find order")
        self.setWindowTitle(title)
        top_layout = QVBoxLayout()
        self.title_widget = TitleWidget(title,self)
        top_layout.addWidget(self.title_widget)

        hlayout = QHBoxLayout()
        hlayout.addWidget(QLabel(_("Search")))
        self.search_criteria = QLineEdit()
        self.search_criteria.setObjectName("search_criteria")
        hlayout.addWidget(self.search_criteria)
        top_layout.addLayout(hlayout)



        self.search_results_view = QTableView()

        self.headers_view = QHeaderView(Qt.Orientation.Horizontal)
        self.header_model = make_header_model([_("Preorder Nr"),_("Order Nr"),_("Customer Nr"),_("Customer"),_("Order Part")])
        self.headers_view.setModel(self.header_model) # qt's doc : The view does *not* take ownership (bt there's something with the selecion mode

        self.search_results_model = QStandardItemModel()
        self.search_results_view.setModel(self.search_results_model)

        self.search_results_view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.search_results_view.setHorizontalHeader(self.headers_view)
        self.search_results_view.verticalHeader().hide()
        # self.search_results_view.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
        self.search_results_view.horizontalHeader().setResizeMode(3, QHeaderView.Stretch)
        self.search_results_view.horizontalHeader().setResizeMode(4, QHeaderView.Stretch)

        self.search_results_view.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.buttons = QDialogButtonBox()
        self.buttons.addButton( QDialogButtonBox.StandardButton.Cancel)
        self.buttons.addButton( QDialogButtonBox.Ok)
        self.buttons.button(QDialogButtonBox.Ok).setObjectName("go_search")

        top_layout.addWidget(self.search_results_view)
        top_layout.setStretch(2,1000)
        top_layout.addWidget(self.buttons)
        self.setLayout(top_layout)

        self.buttons.accepted.connect(self.accept)
        self.buttons.rejected.connect(self.reject)
        self.search_results_view.activated.connect(self.row_activated)
        self.search_criteria.returnPressed.connect(self.search_criteria_submitted)

        self.setMinimumSize(800,640)
예제 #12
0
파일: ComboDelegate.py 프로젝트: wiz21b/koi
    def __init__(self, enumeration, parent=None):
        StandardTableDelegate.__init__(self, parent)

        assert issubclass(enumeration, enum.Enum)

        # We expect : symbol = description (short), description (long)
        self.model = QStandardItemModel(len(enumeration), 1)
        i = 0
        for item in enumeration:
            self.model.setData(self.model.index(i, 0), item.value,
                               Qt.DisplayRole)
            self.model.setData(self.model.index(i, 0), item, Qt.UserRole)
            i += 1
예제 #13
0
    def _init_notes(self):
        self._current_note = None
        self.notesModel = QStandardItemModel()
        self.notesModel.setHorizontalHeaderLabels(
            [self.tr('Title'), self.tr('Last Updated')])

        self.ui.notesList.setModel(self.notesModel)
        self.ui.notesList.selection.connect(self.note_selection_changed)
        self.ui.notesList.doubleClicked.connect(self.note_dblclicked)
        self.ui.notesList.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.notesList.customContextMenuRequested.connect(
            self.note_context_menu)
        self.ui.notesList.header().sortIndicatorChanged.connect(
            self.sort_order_updated)
예제 #14
0
    def __init__(self, parent):
        super(QuickOrderViewWidget, self).__init__("Quick view", None, parent)

        self._table_model = QStandardItemModel(1, 2, None)
        self.table_view = QTableView(self)
        self.table_view.setModel(self._table_model)
        self.layout().addWidget(self.table_view)

        self._table_model.setHorizontalHeaderLabels(
            ['Part Nr.', 'Description'])

        self.table_view.verticalHeader().hide()
        headers_view = self.table_view.horizontalHeader()
        headers_view.setResizeMode(0, QHeaderView.ResizeToContents)
        headers_view.setResizeMode(1, QHeaderView.Stretch)
예제 #15
0
 def __init__(self):
     self.tree = QtGui.QTreeView()
     self.keys = {}
     self.data = None
     self.model = QStandardItemModel()
     self.tree.setHeaderHidden(True)
     self.brushConflictInChild = QtGui.QBrush(QtGui.QColor(255, 136, 139))
     self.brushConflictInChild.setStyle(QtCore.Qt.SolidPattern)
     self.brushConflictInItem = QtGui.QBrush(QtGui.QColor(255, 0, 0))
     self.brushConflictInItem.setStyle(Qt.SolidPattern)
     self.brushChangedItem = QtGui.QBrush(QtGui.QColor(249, 233, 170))
     self.brushChangedItem.setStyle(Qt.SolidPattern)
     self.brushAddedItem = QtGui.QBrush(QtGui.QColor(221, 252, 199))
     self.brushAddedItem.setStyle(Qt.SolidPattern)
     self.whiteBrush = QtGui.QBrush(QtGui.QColor(177, 177, 177))
     self.whiteBrush.setStyle(Qt.SolidPattern)
예제 #16
0
 def __init__(self, parent=None):
     QMainWindow.__init__(self, parent)
     self.setupUi()
     # setup a sample model
     self.model = QStandardItemModel(self)
     self.model.setHorizontalHeaderLabels(self.COLUMNS)
     for row, item in enumerate(self.ITEMS):
         for column, cell in enumerate(item):
             self.model.setItem(row, column, QStandardItem(cell))
     self.proxy = QSortFilterProxyModel(self)
     self.proxy.setSourceModel(self.model)
     # filter all columns (use 0, 1, etc. to only filter by a specific column)
     self.proxy.setFilterKeyColumn(-1)
     # filter text case insensitively
     self.proxy.setFilterCaseSensitivity(Qt.CaseInsensitive)
     self.view.setModel(self.proxy)
     for column, _ in enumerate(self.COLUMNS):
         self.view.resizeColumnToContents(column)
     self.searchBox.textChanged.connect(self.updateFilter)
예제 #17
0
    def setData(self,data):
        """ data = [ (role, role.description, role active or not (True or False, not None)) ]
        """
        m = QStandardItemModel(len(data),2)

        row = 0
        for d in data:
            item = QStandardItem()
            item.setData(d[2],Qt.EditRole)
            m.setItem(row,0,item)

            item = QStandardItem()
            item.setData(d[0],Qt.UserRole)
            item.setData(d[1],Qt.DisplayRole)
            m.setItem(row,1,item)

            row += 1

        self.setModel(m)
        self.resizeColumnsToContents()
예제 #18
0
	def doLayout(self):
		central_window = QWidget(self)
		vlayout = QVBoxLayout(central_window)

		self.FileListView = QListView(self)
		self.SafeModeCheckbox = QCheckBox(self.tr('Safeモードで読み込み(エラーが出る場合に使用ください。改行やページ番号等崩れる場合があります。)'), self)
		convert_button = QPushButton(self.tr('変換'), central_window)

		vlayout.addWidget(QLabel(self.tr('ドラッグ&ドロップでファイルを読み込みます'), self))
		vlayout.addWidget(self.FileListView)
		vlayout.addWidget(self.SafeModeCheckbox)
		vlayout.addWidget(convert_button)
		convert_button.clicked.connect(self.onConvert)

		self.FileListModel = QStandardItemModel(self)
		self.FileListModel.setHorizontalHeaderLabels([self.tr('ファイル名')])
		self.FileListView.setModel(self.FileListModel)
		self.FileListView.setAcceptDrops(True)

		self.setCentralWidget(central_window)
예제 #19
0
    def testOperators(self):
        model = QStandardItemModel()
        for i in range(100):
            model.appendRow(QStandardItem("Item: %d"%i))

        first = model.index(0, 0)
        second = model.index(10, 0)
        third = model.index(20, 0)
        fourth = model.index(30, 0)

        sel = QItemSelection(first, second)
        sel2 = QItemSelection()
        sel2.select(third, fourth)

        sel3 = sel + sel2 #check operator +
        self.assertEqual(len(sel3), 2)
        sel4 = sel
        sel4 += sel2 #check operator +=
        self.assertEqual(len(sel4), 2)
        self.assertEqual(sel4, sel3)
예제 #20
0
    def __init__(self, parent):
        super(WeekViewWidget, self).__init__("Week", None, parent)

        self._table_model = QStandardItemModel(1, 2, None)
        self._table_model.setHorizontalHeaderLabels(
            [_("# Ord."), _("Customer")])

        self.table_view = LeftRightTableView(self)
        self.table_view.setModel(self._table_model)
        self.table_view.verticalHeader().hide()
        self.table_view.setAlternatingRowColors(True)
        self.table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table_view.setSelectionMode(QAbstractItemView.SingleSelection)
        self.table_view.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.table_view.horizontalHeader().setResizeMode(
            0, QHeaderView.ResizeToContents)
        self.table_view.horizontalHeader().setStretchLastSection(True)

        self.preorder_brush = QBrush(QColor(255, 255, 128))
        self.completed_order_brush = QBrush(QColor(128, 255, 128))

        self.layout().addWidget(self.table_view)
예제 #21
0
    def __init__(self, mw, parent=None):
        """
        Default class constructor.

        :param `mw`: The application's MainWindow instance.
        :type `mw`: `QMainWindow`_
        :param `parent`: Pointer to a parent widget instance.
        :type `parent`: `QWidget`_
        """
        super(LayerManager, self).__init__(parent)

        tr = self.tr

        self.layerModel = layerModel = QStandardItemModel(0, 8, self)

        self.layerModelSorted = layerModelSorted = QSortFilterProxyModel()
        layerModelSorted.setDynamicSortFilter(True)
        layerModelSorted.setSourceModel(layerModel)

        self.treeView = treeView = QTreeView()
        treeView.setRootIsDecorated(False)
        treeView.setAlternatingRowColors(True)
        treeView.setModel(layerModelSorted)
        treeView.setSortingEnabled(True)
        treeView.sortByColumn(0, Qt.AscendingOrder)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(treeView)
        self.setLayout(mainLayout)

        self.setWindowTitle(tr("Layer Manager"))
        self.setMinimumSize(750, 550)

        ## layerModel.setHeaderData(0, Qt.Horizontal, self.tr("Name"))
        ## layerModel.setHeaderData(1, Qt.Horizontal, self.tr("Visible"))
        ## layerModel.setHeaderData(2, Qt.Horizontal, self.tr("Frozen"))
        ## layerModel.setHeaderData(3, Qt.Horizontal, self.tr("Z Value"))
        ## layerModel.setHeaderData(4, Qt.Horizontal, self.tr("Color"))
        ## layerModel.setHeaderData(5, Qt.Horizontal, self.tr("Linetype"))
        ## layerModel.setHeaderData(6, Qt.Horizontal, self.tr("Lineweight"))
        ## layerModel.setHeaderData(7, Qt.Horizontal, self.tr("Print"))
        localMeth = layerModel.setHeaderData
        localQtHorizontal = Qt.Horizontal
        [
            localMeth(i, localQtHorizontal, tr(strng))
            for i, strng in ((0, "Name"), (1, "Visible"), (2, "Frozen"),
                             (3, "Z Value"), (4, "Color"), (5, "Linetype"),
                             (6, "Lineweight"), (7, "Print"))
        ]

        ## addLayer = self.addLayer  # local optimization
        ## addLayer("0", True, False, 0.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("1", True, False, 1.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("2", True, False, 2.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("3", True, False, 3.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("4", True, False, 4.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("5", True, False, 5.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("6", True, False, 6.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("7", True, False, 7.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("8", True, False, 8.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        ## addLayer("9", True, False, 9.0, qRgb(0, 0, 0), "Continuous", "Default", True)
        addLayer = self.addLayer
        [
            addLayer("%s" % i, True, False, float(i), qRgb(0, 0, 0),
                     "Continuous", "Default", True) for i in range(0, 10)
        ]

        ## for i in range(0, layerModel.columnCount()):
        ##     treeView.resizeColumnToContents(i)
        localtreeViewMeth = treeView.resizeColumnToContents
        [localtreeViewMeth(i) for i in range(0, layerModel.columnCount())]

        QApplication.setOverrideCursor(Qt.ArrowCursor)
예제 #22
0
    def testClear(self):

        model = QStandardItemModel()
        root = model.invisibleRootItem()
        model.clear()
        self.assertFalse(shiboken.isValid(root))
예제 #23
0
 def setUp(self):
    super(QStandardItemModelTest, self).setUp()
    self.window = QWidget()
    self.model = QStandardItemModel(0, 3, self.window)
예제 #24
0
    def __init__(self, parent=None):

        super(MainWindow, self).__init__(parent)
        self.main_frame = Ui_MainWindow()
        self.main_frame.setupUi(self)
        self.MONGODB_URI = 'mongodb://*****:*****@ds047040.mongolab.com:47040/magresdata' 
        self.dataDict = {}

        # define the dictionary search terms
        self.setTypeValue = False
        self.macroMoleculeValue = False
        self.operatorValue = False
        self.osmolyteValue = False

        # make connection to database instance
        #self.conn = pymongo.MongoClient(self.MONGODB_URI) # Connect to the database that I purchased
        #db = self.conn.magresdata # 'dynamicalTransition' is the name of my test database
        #self.collection = db.hanLabODNPTest # This is my test collection
        self.conn = pymongo.MongoClient('localhost',27017) # Connect to the database that I purchased
        db = self.conn.homeDB # 'dynamicalTransition' is the name of my test database
        self.collection = db.localData # This is my test collection
        # populate the comboBoxes
        keyVals = [str(k) for k in self.collection.distinct('setType')]
        keyVals.insert(0,'Select')
        self.main_frame.setTypeComboBox.addItems(keyVals)
        self.main_frame.setTypeComboBox.setEditable(True)
        keyVals = [str(k) for k in self.collection.distinct('macroMolecule')]
        keyVals.insert(0,'Select')
        self.main_frame.macroMoleculeComboBox.addItems(keyVals)
        self.main_frame.macroMoleculeComboBox.setEditable(True)
        keyVals = [str(k) for k in self.collection.distinct('osmolyte')]
        keyVals.insert(0,'Select')
        self.main_frame.osmolyteComboBox.addItems(keyVals)
        self.main_frame.osmolyteComboBox.setEditable(True)
        keyVals = [str(k) for k in self.collection.distinct('operator')]
        keyVals.insert(0,'Select')
        self.main_frame.operatorComboBox.addItems(keyVals)
        self.main_frame.operatorComboBox.setEditable(True)

        ### Connect the combobox events#{{{
        self.main_frame.osmolyteComboBox.currentIndexChanged.connect(self.osmolyteFromBox)
        self.main_frame.operatorComboBox.currentIndexChanged.connect(self.operatorFromBox)
        self.main_frame.macroMoleculeComboBox.currentIndexChanged.connect(self.macroMoleculeFromBox)
        self.main_frame.setTypeComboBox.currentIndexChanged.connect(self.setTypeFromBox)#}}}

        self.main_frame.plotButton.clicked.connect(self.plotDataListViewItems)
        self.main_frame.listWidget.itemClicked.connect(self.listGetItem)
        self.main_frame.addToPlotButton.clicked.connect(self.addToDataSets)
        self.main_frame.findSetButton.clicked.connect(self.findSets)
        #self.main_frame.clearPlotButton.clicked.connect(self.clearPlots)
        self.main_frame.clearPlotButton.clicked.connect(self.launchMPLWindow)

        # for the list checkbox
        self.main_frame.checkableList = QStandardItemModel(self.main_frame.dataListView)
        self.main_frame.checkableList.itemChanged.connect(self.onItemChanged)

        # For opening a new window.
        #self.dialogTextBrowser = MyDialog(self)
        #self.main_frame.findSetButton.clicked.connect(self.onOpenBrowser)

        # Set up the plotting widgets#{{{
        # the first plot widget
        self.main_frame.plotWidget = MatplotlibWidget(self.main_frame.widget)
        self.main_frame.plotWidget.setGeometry(QtCore.QRect(0,0,481,551./2))
        self.main_frame.plotWidget.setObjectName("plotWidget")

        # the second plot widget
        self.main_frame.plotWidget1 = MatplotlibWidget(self.main_frame.widget)
        self.main_frame.plotWidget1.setGeometry(QtCore.QRect(0,551./2,481,551./2))
        self.main_frame.plotWidget1.setObjectName("plotWidget1")#}}}
예제 #25
0
    def __init__(self, parent, dao):
        super(ReprintDeliverySlipDialog, self).__init__(parent)
        self.dao = dao

        title = _("Print a delivery slip")
        self.setWindowTitle(title)
        top_layout = QVBoxLayout()
        self.title_widget = TitleWidget(title, None)

        self.buttons = QDialogButtonBox()
        self.buttons.addButton(QDialogButtonBox.StandardButton.Cancel)
        self.buttons.addButton(QDialogButtonBox.Ok)

        hlayout = QHBoxLayout()
        hlayout.addWidget(QLabel(_("Slip number")))
        self.slip_number = QLineEdit()
        hlayout.addWidget(self.slip_number)
        hlayout.addStretch()

        self.search_results_view = QTableView()
        self.search_results_model = QStandardItemModel()
        self.search_results_model.setHorizontalHeaderLabels(
            [_("Slip Nr"), _("Date"),
             _("Customer"), _("Order")])

        self.search_results_view.setModel(self.search_results_model)
        # self.search_results_view.setHorizontalHeader(self.headers_view)
        self.search_results_view.setEditTriggers(
            QAbstractItemView.NoEditTriggers)

        self.search_results_view.horizontalHeader().setResizeMode(
            1, QHeaderView.ResizeToContents)
        self.search_results_view.horizontalHeader().setResizeMode(
            2, QHeaderView.Stretch)
        self.search_results_view.verticalHeader().hide()

        self.slip_part_view = DeliverySlipViewWidget(self)

        hlayout_results = QHBoxLayout()
        hlayout_results.addWidget(self.search_results_view)
        hlayout_results.addWidget(self.slip_part_view)

        self.search_results_model.removeRows(
            0, self.search_results_model.rowCount())
        delivery_slips = self.dao.delivery_slip_part_dao.find_recent()
        for slip in delivery_slips:
            self.search_results_model.appendRow([
                QStandardItem(str(slip[0])),
                QStandardItem(date_to_dmy(slip[1])),
                QStandardItem(slip[2]),
                QStandardItem(slip[3])
            ])

        top_layout.addWidget(self.title_widget)
        top_layout.addLayout(hlayout)
        top_layout.addLayout(hlayout_results)
        top_layout.addWidget(self.buttons)
        top_layout.setStretch(2, 100)
        self.setLayout(top_layout)

        self.search_results_view.setSelectionBehavior(
            QAbstractItemView.SelectRows)
        self.search_results_view.setSelectionMode(
            QAbstractItemView.SingleSelection)

        self.buttons.accepted.connect(self.accept)
        self.buttons.rejected.connect(self.reject)
        self.search_results_view.activated.connect(self.row_activated)
        self.search_results_view.selectionModel().currentRowChanged.connect(
            self.row_selected)
예제 #26
0
 def BuildTree(self, data, columnWidth=0):
     self.model = QStandardItemModel()
     self.data = data
     self.AddItems(self.model, data, columnWidth=columnWidth)
     self.tree.setModel(self.model)
예제 #27
0
    def _make_total_days_off_panel(self):

        widget = QFrame()
        widget.setObjectName('HorseRegularFrame')

        widget.setFrameShape(QFrame.Panel)
        widget.setFrameShadow(QFrame.Sunken)
        layout = QVBoxLayout()

        #layout.addWidget(QLabel(_("Days off to date")))
        self.day_off_total_duration_labels = dict()
        self.day_off_month_duration_labels = dict()
        self.day_off_labels = dict()

        self._day_off_table_model = QStandardItemModel(10, 3)
        self._day_off_table_model.setHorizontalHeaderLabels(
            [None, None, _("This\nmonth"),
             _("Before")])
        self.day_off_table_view = QTableView(None)
        self.day_off_table_view.setModel(self._day_off_table_model)

        # self.day_off_table_view.setHorizontalHeader(self.headers_view)
        self.day_off_table_view.verticalHeader().hide()
        self.day_off_table_view.setAlternatingRowColors(True)
        self.day_off_table_view.setEditTriggers(
            QAbstractItemView.NoEditTriggers)

        self.day_off_table_view.hide()

        row = 0
        for det in DayEventType.symbols():
            ndx = self._day_off_table_model.index(row, 0)
            self._day_off_table_model.setData(ndx, det.description,
                                              Qt.DisplayRole)

            ndx = self._day_off_table_model.index(row, 1)
            fg, bg = self.DAY_EVENT_PALETTE[det]
            self._day_off_table_model.setData(ndx, QBrush(bg),
                                              Qt.BackgroundRole)
            self._day_off_table_model.setData(ndx, QBrush(fg),
                                              Qt.TextColorRole)
            self._day_off_table_model.setData(ndx,
                                              DayEventType.short_code(det),
                                              Qt.DisplayRole)

            row += 1

        layout.addWidget(self.day_off_table_view)

        grid = QGridLayout()
        self.days_off_layout = grid
        grid.setColumnStretch(3, 1)
        row = 0

        grid.addWidget(QLabel(_('Year')), row, self.YEAR_EVENT_COLUMN)
        grid.addWidget(QLabel(_('Month')), row, self.MONTH_EVENT_COLUMN)
        row += 1

        for det in DayEventType.symbols():
            self.day_off_total_duration_labels[det] = QLabel("-")
            self.day_off_month_duration_labels[det] = QLabel("-")
            self.day_off_labels[det] = QLabel(det.description)

            hlayout = QHBoxLayout()

            sl = QLabel()
            fg, bg = self.DAY_EVENT_PALETTE[det]

            def to_html_rgb(color):
                i = color.red() * 256 * 256 + color.green() * 256 + color.blue(
                )
                return "#{:06X}".format(i)

            p = QPalette()
            p.setColor(QPalette.Window, QColor(bg))
            p.setColor(QPalette.WindowText, QColor(fg))
            sl.setPalette(p)
            sl.setAlignment(Qt.AlignCenter)
            sl.setStyleSheet("border: 2px solid black; background: {}".format(
                to_html_rgb(QColor(bg))))

            t = DayEventType.short_code(det)
            mainlog.debug(t)
            sl.setAutoFillBackground(True)
            sl.setText(t)

            grid.addWidget(sl, row, 0)
            grid.addWidget(self.day_off_labels[det], row, 1)
            grid.addWidget(self.day_off_total_duration_labels[det], row,
                           self.YEAR_EVENT_COLUMN)
            grid.addWidget(self.day_off_month_duration_labels[det], row,
                           self.MONTH_EVENT_COLUMN)

            hlayout.addStretch()

            row += 1

        layout.addLayout(grid)
        layout.addStretch()

        self.day_off_table_view.resizeColumnsToContents()
        # self.day_off_table_view.setMinimumWidth( self.day_off_table_view.width())
        # self.day_off_table_view.resize( self.day_off_table_view.minimumWidth(),
        #                                 self.day_off_table_view.minimumHeight(),)

        widget.setLayout(layout)
        return widget
예제 #28
0
    def refresh_action(self):
        global dao

        # mainlog.debug("refresh action started")
        self.hours_per_pers_subframe.set_title(date_to_my(
            self.base_date, True))

        chrono.chrono_start()
        all_events_in_month = people_admin_service.events_for_month(
            self.base_date)

        employee_with_events = [
            event.employee_id for event in all_events_in_month
        ]

        # mainlog.debug(all_events_in_month)

        self.all_events_in_year = people_admin_service.events_for_year(
            self.base_date.year)
        self.all_presences = all_presences = dao.employee_dao.presence_overview_for_month(
            self.base_date)

        all_correction_times = dict()
        for s in dao.month_time_synthesis_dao.load_all_synthesis(
                self.base_date.year, self.base_date.month):
            all_correction_times[s.employee_id] = s.correction_time

        special_activities = dao.special_activity_dao.find_on_month(
            self.base_date)

        employees = list(
            filter(
                lambda e: e.is_active or e.employee_id in all_presences or e.
                employee_id in all_correction_times or e.employee_id in
                special_activities or e.employee_id in employee_with_events,
                dao.employee_dao.list_overview()))
        self.employees = employees

        chrono.chrono_click()

        day_max = calendar.monthrange(self.base_date.year,
                                      self.base_date.month)[1]
        t_start = datetime(self.base_date.year, self.base_date.month, 1)
        t_end = datetime(self.base_date.year, self.base_date.month, day_max,
                         23, 59, 59, 999999)

        self._table_model.setRowCount(len(employees))
        self._table_model.setColumnCount(1 + day_max + 3)

        headers = QStandardItemModel(1, 1 + day_max + 3)

        headers.setHeaderData(0, Qt.Orientation.Horizontal, _("Employee"))
        for i in range(day_max):
            headers.setHeaderData(i + 1, Qt.Orientation.Horizontal,
                                  "{}".format(i + 1))
        headers.setHeaderData(day_max + 1, Qt.Orientation.Horizontal,
                              _("Correction"))
        headers.setHeaderData(day_max + 2, Qt.Orientation.Horizontal,
                              _("Total"))
        headers.setHeaderData(day_max + 3, Qt.Orientation.Horizontal,
                              _("Days off"))

        self.headers_view.setModel(
            headers)  # qt's doc : The view does *not* take ownership
        self.header_model = headers
        self.headers_view.setModel(
            self.header_model)  # qt's doc : The view does *not* take ownership

        # Compute all mondays indices
        monday = 0
        if t_start.weekday() > 0:
            monday = 7 - t_start.weekday()
        all_mondays = []

        while monday < day_max:
            all_mondays.append(monday)
            monday += 7

        today = date.today()

        # mainlog.debug("Running on employees")
        for row in range(self._table_model.rowCount()):

            # Clear the line
            for col in range(0, 32):
                ndx = self._table_model.index(row, col)
                self._table_model.setData(ndx, None, Qt.BackgroundRole)
                self._table_model.setData(ndx, QBrush(Qt.GlobalColor.black),
                                          Qt.TextColorRole)
                self._table_model.setData(ndx, None, Qt.DisplayRole)
                self._table_model.setData(ndx, None, Qt.UserRole)
                self._table_model.setData(ndx, None, Qt.UserRole + 1)
                #     else:
                #         self._table_model.setData(ndx,None,Qt.BackgroundRole)

                # else:
                #     self._table_model.setData(ndx,None,Qt.DisplayRole)
                #     self._table_model.setData(ndx,None,Qt.BackgroundRole)

            # Mark mondays
            for col in all_mondays:
                # col + 1 to account for the employee column
                self._table_model.setData(
                    self._table_model.index(row, col + 1),
                    QBrush(QColor(230, 230, 255)), Qt.BackgroundRole)

            # Mark today
            if today.month == self.base_date.month and today.year == self.base_date.year:
                self._table_model.setData(
                    self._table_model.index(row, today.day),
                    QBrush(QColor(255, 255, 128)), Qt.BackgroundRole)

        row = 0
        for employee in employees:  # employees are sorted

            self._table_model.setData(self._table_model.index(row, 0),
                                      employee.fullname,
                                      Qt.DisplayRole)  # FIXME Use a delegate
            self._table_model.setData(self._table_model.index(row, 0),
                                      employee.employee_id,
                                      Qt.UserRole)  # FIXME Use a delegate

            correction = 0
            if employee.employee_id in all_correction_times:
                correction = all_correction_times[employee.employee_id]
                self._table_model.setData(
                    self._table_model.index(row, day_max + 1),
                    duration_to_hm(correction, short_unit=True),
                    Qt.DisplayRole)
            else:
                self._table_model.setData(
                    self._table_model.index(row, day_max + 1), None,
                    Qt.DisplayRole)

            presence = 0
            if employee.employee_id in all_presences and len(
                    all_presences[employee.employee_id]) > 0:
                import functools
                presence = functools.reduce(
                    lambda acc, s: acc + s,
                    all_presences[employee.employee_id], 0)
            presence += correction

            if presence != 0:
                self._table_model.setData(ndx, QBrush(Qt.GlobalColor.black),
                                          Qt.TextColorRole)
                self._table_model.setData(
                    self._table_model.index(row, day_max + 2),
                    duration_to_hm(presence, short_unit=True), Qt.DisplayRole)
            else:
                self._table_model.setData(
                    self._table_model.index(row, day_max + 2), None,
                    Qt.DisplayRole)

            if employee.employee_id in all_presences and len(
                    all_presences[employee.employee_id]) > 0:
                for b in range(len(all_presences[employee.employee_id])):
                    ndx = self._table_model.index(row, b + 1)

                    p = all_presences[employee.employee_id][b]

                    if p > 0:
                        self._table_model.setData(
                            ndx, duration_to_hm(p, short_unit=True),
                            Qt.DisplayRole)
                        self._table_model.setData(ndx, p, Qt.UserRole)

                        if p >= 4 and p <= 8:
                            # Regular work load
                            self._table_model.setData(
                                ndx, QBrush(QColor(192, 255, 192)),
                                Qt.BackgroundRole)
                        elif p > 8 or (p < 4 and p > 0):
                            # Problematic work load
                            self._table_model.setData(
                                ndx, QBrush(QColor(255, 192, 192)),
                                Qt.BackgroundRole)

            if employee.employee_id in special_activities:
                sa_of_employee = special_activities[employee.employee_id]

                for sa in sa_of_employee:
                    start = max(t_start, sa.start_time)
                    end = min(t_end, sa.end_time)

                    for i in range(start.day, end.day + 1):
                        ndx = self._table_model.index(row, i)
                        self._table_model.setData(ndx,
                                                  QBrush(QColor(255, 128, 0)),
                                                  Qt.BackgroundRole)

                # self._table_model.setData(self._table_model.index(row,b+1),Qt.AlignRight | Qt.AlignVCenter,Qt.TextAlignmentRole)
            row += 1

        # Display day events

        employee_id_to_row = dict()  # little accelerator
        for row in range(len(employees)):
            employee_id_to_row[employees[row].employee_id] = row

        # Compute days off totals and show them

        self.day_event_totals = dict([(e.employee_id, dict())
                                      for e in employees])
        for day_event in all_events_in_month:
            # mainlog.debug("employee_id = {}".format(day_event.employee_id))
            # if day_event.employee_id not in self.day_event_totals:
            #    mainlog.debug(self.day_event_totals)

            t = self.day_event_totals[day_event.employee_id]
            if day_event.event_type not in t:
                t[day_event.event_type] = day_event.duration
            else:
                t[day_event.event_type] += day_event.duration

        for employee in employees:  # employees are sorted
            t = self.day_event_totals[employee.employee_id]
            mainlog.debug(t)
            total_off = sum(t.values())
            mainlog.debug(total_off)
            row = employee_id_to_row[employee.employee_id]
            mainlog.debug(row)
            if total_off:
                self._table_model.setData(
                    self._table_model.index(row, day_max + 3),
                    nice_round(total_off), Qt.DisplayRole)
            else:
                self._table_model.setData(
                    self._table_model.index(row, day_max + 3), None,
                    Qt.DisplayRole)

        # Show days off

        for day_event in all_events_in_month:
            row = employee_id_to_row[day_event.employee_id]
            col = day_event.date.day

            fg = bg = None
            if day_event.event_type in self.DAY_EVENT_PALETTE:
                fg, bg = self.DAY_EVENT_PALETTE[day_event.event_type]
            else:
                fg, bg = Qt.GlobalColor.red, Qt.GlobalColor.gray

            ndx = self._table_model.index(row, col)

            self._table_model.setData(ndx, day_event.day_event_id,
                                      Qt.UserRole + 1)

            # The problem here is to nicely blend the fact
            # that you can have a day event mixed with actual work
            # the very same day. Here's a poor man solution.

            active_time = self._table_model.data(ndx, Qt.UserRole)
            if not active_time:
                self._table_model.setData(
                    ndx, DayEventType.short_code(day_event.event_type),
                    Qt.DisplayRole)

                self._table_model.setData(ndx, QBrush(fg), Qt.TextColorRole)
                self._table_model.setData(ndx, QBrush(bg), Qt.BackgroundRole)
            else:
                self._table_model.setData(ndx, QBrush(fg), Qt.TextColorRole)
                self._table_model.setData(ndx, QBrush(bg), Qt.BackgroundRole)

                self._table_model.setData(
                    ndx,
                    duration_to_hm(active_time, short_unit=True) +
                    DayEventType.short_code(day_event.event_type),
                    Qt.DisplayRole)

        chrono.chrono_click()

        #for i in range(len(all_mondays)):
        self.table_view.resizeColumnsToContents()

        # mainlog.debug("Reset selection")
        ndx = self.table_view.currentIndex()

        self.table_view.selectionModel().clear()
        # self.table_view.selectionModel().clearSelection()
        # self.table_view.selectionModel().select( self.table_view.model().index(ndx.row(),ndx.column()), QItemSelectionModel.Select)
        # self.table_view.selectionModel().select( self.table_view.model().index(ndx.row(),ndx.column()), QItemSelectionModel.Select)
        self.table_view.selectionModel().setCurrentIndex(
            self.table_view.model().index(ndx.row(), ndx.column()),
            QItemSelectionModel.Select)

        self.cell_entered(self.table_view.currentIndex())
예제 #29
0
    def __init__(self, parent, find_order_action_slot):
        super(PresenceOverviewWidget, self).__init__(parent)

        self.set_panel_title(_("Presence overview"))
        self.base_date = date.today()

        headers = QStandardItemModel(1, 31 + 3)
        self._table_model = QStandardItemModel(1, 31 + 3, None)

        self.headers_view = QHeaderView(Qt.Orientation.Horizontal, self)
        self.header_model = headers
        self.headers_view.setResizeMode(QHeaderView.ResizeToContents)
        self.headers_view.setModel(
            self.header_model)  # qt's doc : The view does *not* take ownership

        self.table_view = TableViewSignaledEvents(None)
        self.table_view.setModel(self._table_model)

        self.table_view.setHorizontalHeader(self.headers_view)
        self.table_view.verticalHeader().hide()
        self.table_view.setAlternatingRowColors(True)
        self.table_view.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
        self.table_view.customContextMenuRequested.connect(
            self.popup_context_menu)

        self.copy_action = QAction(_("Copy order parts"), self.table_view)
        self.copy_action.triggered.connect(self.copy_slot)
        self.copy_action.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_C))
        self.copy_action.setShortcutContext(Qt.WidgetWithChildrenShortcut)
        self.table_view.addAction(self.copy_action)

        self.select_all_action = QAction(_("Select all"), self.table_view)
        self.select_all_action.triggered.connect(self.select_all_slot)
        self.select_all_action.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_A))
        self.select_all_action.setShortcutContext(
            Qt.WidgetWithChildrenShortcut)
        self.table_view.addAction(self.select_all_action)

        # self.table_view.setSelectionBehavior(QAbstractItemView.SelectItems)
        # self.table_view.setSelectionMode(QAbstractItemView.SingleSelection)

        navbar = NavBar(self, [(_("Month before"), self.month_before),
                               (_("Today"), self.month_today),
                               (_("Action"), self.show_actions),
                               (_("Month after"), self.month_after),
                               (_("Find"), find_order_action_slot)])

        self.action_menu = QMenu(navbar.buttons[2])
        navbar.buttons[2].setObjectName("specialMenuButton")
        navbar.buttons[4].setObjectName("specialMenuButton")

        self._make_days_off_menu_and_action_group()

        list_actions = [  # (_("Edit"),self.edit_tars, None, None),
            (_("Edit"), self.edit_timetrack_no_ndx, None, None),
            (_("Month correction"), self.edit_month_correction, None,
             [RoleType.modify_monthly_time_track_correction]),
            (self.days_off_menu, None), (self.copy_action, None),
            (self.select_all_action, None)
        ]

        # (_("Insert holidays"),self.create_holidays, None, None),
        # (_("Delete holidays"),self.delete_holidays, None, None) ]

        populate_menu(self.action_menu, self, list_actions)

        # mainlog.debug("tile widget")
        self.title_box = TitleWidget(_("Presence Overview"), self, navbar)
        self.vlayout = QVBoxLayout(self)
        self.vlayout.setObjectName("Vlayout")
        self.vlayout.addWidget(self.title_box)

        self.hours_per_pers_subframe = SubFrame(_("Overview"), self.table_view,
                                                self)
        self.vlayout.addWidget(self.hours_per_pers_subframe)

        self.time_report_view = TimeReportView(self)

        self.days_off_panel = self._make_total_days_off_panel()
        vbox = QVBoxLayout()
        vbox.addWidget(self.days_off_panel)
        vbox.addStretch()
        vbox.setStretch(0, 0)
        vbox.setStretch(1, 1)

        hlayout = QHBoxLayout()
        hlayout.addWidget(self.time_report_view)
        hlayout.addLayout(vbox)
        hlayout.setStretch(0, 1)
        self.detail_subframe = SubFrame(_("Day"), hlayout, self)

        self.vlayout.addWidget(self.detail_subframe)

        self.setLayout(self.vlayout)

        # dbox = QVBoxLayout()
        # dbox.addWidget(QLabel("kjkljkj"))

        # self.total_active_hours = LabeledValue(_("Total activity"))
        # dbox.addWidget(self.total_active_hours)

        # hbox = QHBoxLayout()
        # hbox.addWidget(self.table_view)
        # hbox.addLayout(dbox)

        # self.selection_model = self.table_view.selectionModel()
        # mainlog.debug(m)
        #sm = QItemSelectionModel(self.table_view.model())
        #sm.setModel(self.table_view.model())
        # self.table_view.setSelectionModel(self.selection_model)

        self.table_view.selectionModel().currentChanged.connect(
            self.cell_entered)

        self.table_view.doubleClickedCell.connect(self.edit_timetrack)
예제 #30
0
        self.completer.setModel(self.pFilterModel)

    def setModelColumn(self, column):
        self.completer.setCompletionColumn(column)
        self.pFilterModel.setFilterKeyColumn(column)
        super(ComboBoxWithTypingSearch, self).setModelColumn(column)

    def view(self):
        return self.completer.popup()

    def index(self):
        return self.currentIndex()

    def setTextIfCompleterIsClicked(self, text):
        if text:
            index = self.findText(text)
            self.setCurrentIndex(index)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    model = QStandardItemModel()
    for i, word in enumerate(['hola', 'adios', 'hello', 'good bye']):
        item = QStandardItem(word)
        model.setItem(i, 0, item)
    combo = ComboBoxWithTypingSearch()
    combo.setModel(model)
    combo.setModelColumn(0)
    combo.show()
    sys.exit(app.exec_())