Exemple #1
1
    def __init__(self, *args):
        QWidget.__init__(self, *args)

        # create table
        list_data = [1,2,3,4]
        lm = MyListModel(list_data, self)
        lv = QListView()
        lv.setModel(lm)

        # layout
        layout = QVBoxLayout()
        layout.addWidget(lv)
        self.setLayout(layout)
Exemple #2
0
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        model = FileListModel(self)
        model.setDirPath(QLibraryInfo.location(QLibraryInfo.PrefixPath))

        label = QLabel("Directory")
        lineEdit = QLineEdit()
        label.setBuddy(lineEdit)

        view = QListView()
        view.setModel(model)

        self.logViewer = QTextBrowser()
        self.logViewer.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred))

        lineEdit.textChanged.connect(model.setDirPath)
        lineEdit.textChanged.connect(self.logViewer.clear)
        model.numberPopulated.connect(self.updateLog)

        layout = QGridLayout()
        layout.addWidget(label, 0, 0)
        layout.addWidget(lineEdit, 0, 1)
        layout.addWidget(view, 1, 0, 1, 2)
        layout.addWidget(self.logViewer, 2, 0, 1, 2)

        self.setLayout(layout)
        self.setWindowTitle("Fetch More Example")
class SettingWindow(QWidget):
#	on_addButtonClicked=pyqtSignal()
#	on_removeButtonClicked=pyqtSignal()
#	on_okButtonClicked=pyqtSignal()
	finished=pyqtSignal()
	def __init__(self):
		QWidget.__init__(self)
		self.listview=QListView(self)
		self.addButton=QPushButton(self)
		self.removeButton=QPushButton(self)
		self.resize(630,440)
		self.okButton=QPushButton(self)
		self.listview.setGeometry(30,30,410,351)
		self.addButton.setGeometry(490,40,80,22)
		self.addButton.setText("add")
		self.addButton.clicked.connect(self.click_add)
		self.removeButton.setGeometry(490,80,80,22)
		self.removeButton.setText("remove")
		self.removeButton.clicked.connect(self.click_remove)
		self.okButton.setGeometry(490,150,80,22)
		self.okButton.setText("ok")
		self.okButton.clicked.connect(self.click_ok)
#		self.aw=null


		self.fresh()
	def click_ok(self):
		self.finished.emit()
		self.close()
	def click_add(self):
		self.aw=AddWindow()
		self.aw.show()
		self.aw.okSig.connect(self.fresh)
	def click_remove(self):
		self.remove()
	def fresh(self):
		confFile=open("conf","r")
		self.listModel=QStandardItemModel()
		self.itemList=cPickle.load(confFile)
		confFile.close()
		for  item in self.itemList:
			itemView=QStandardItem(QIcon(item.path),item.name)
			itemView.setEditable(False)
			self.listModel.appendRow(itemView)
			self.listview.setModel(self.listModel)
	def remove(self):
		index=self.listview.currentIndex().row()
		self.itemList.pop(index)
		self.listModel.removeRow(index)
		confFile=open("conf","w")
		cPickle.dump(self.itemList,confFile)
		confFile.close()
Exemple #4
0
    def __init__(self, parent=None):
        QListView.__init__(self, parent)
        dndView.__init__(self, parent)
        outlineBasics.__init__(self, parent)

        self.setResizeMode(QListView.Adjust)
        self.setWrapping(True)
        self.setItemDelegate(corkDelegate())
        self.setSpacing(5)
        self.setVerticalScrollMode(self.ScrollPerPixel)
        self.setFlow(self.LeftToRight)
        self.setSelectionBehavior(self.SelectRows)
        self.updateBackground()
Exemple #5
0
class QueryDialog(QDialog):
    """a dialog to choose an item from a query
    """
    choice = pyqtSignal(str)
     
    def __init__(self, query):
        super().__init__()
        self.query = query
        self.create_model()
        self.init_UI()
         
    def create_model(self):
        """creates the model as QSqlQueryModel,
        using the given query
        """
        self.model = QSqlQueryModel()
        q = QSqlQuery()
        q.exec_(self.query)
        self.model.setQuery(q)
        
         
    def init_UI(self):
        """setup the UI
        """
        layout = QVBoxLayout()
        self.setLayout(layout)
        self.resize(200,200)
        self.title = "Choose an existing project"
         
        self.list = QListView(self)
        layout.addWidget(self.list)
        self.list.setModel(self.model)
        self.list.setWhatsThis("Choose a project by clicking on it")
         
        self.btn = QPushButton("Accept", self)
        layout.addWidget(self.btn)
        self.btn.clicked.connect(self.on_btn_clicked)
        self.btn.setWhatsThis("Click here to accept your selection (works only if a project has been selected)")
     
    def on_btn_clicked(self):
        """when self.btn is clicked, accept the choice and emit it as self.choice
        """
        selected = self.list.selectedIndexes()
        if selected:
            index = selected[0]
            chosen = self.model.data(index, Qt.DisplayRole)
            self.choice.emit(chosen)
            self.close()
        
        self.choice.emit("")
        self.close()
Exemple #6
0
    def __init__(self, parent=None):
        super(MDIHistory, self).__init__(parent)
        self.setMinimumSize(QSize(200, 150))    
        self.setWindowTitle("PyQt5 editor test example") 

        lay = QVBoxLayout()
        lay.setContentsMargins(0,0,0,0)
        self.setLayout(lay)

        self.list = QListView()
        self.list.setEditTriggers(QListView.NoEditTriggers)
        self.list.activated.connect(self.activated)
        self.list.setAlternatingRowColors(True)
        self.list.selectionChanged = self.selectionChanged
        self.model = QStandardItemModel(self.list)

        self.MDILine = MDILine()
        self.MDILine.soft_keyboard = False
        self.MDILine.line_up = self.line_up
        self.MDILine.line_down = self.line_down

        STATUS.connect('reload-mdi-history', self.reload)

        # add widgets
        lay.addWidget(self.list)
        lay.addWidget(self.MDILine)

        self.fp = os.path.expanduser(INFO.MDI_HISTORY_PATH)
        try:
            open(self.fp, 'r')
        except:
            open(self.fp, 'a+')
            LOG.debug('MDI History file created: {}'.format(self.fp))
        self.reload()
        self.select_row('last')
Exemple #7
0
    def setupWidgets(self):
        frame = QFrame()
        frameLayout = QHBoxLayout(frame)

        self.piecesList = QListView()
        self.piecesList.setDragEnabled(True)
        self.piecesList.setViewMode(QListView.IconMode)
        self.piecesList.setIconSize(QSize(60,60))
        self.piecesList.setGridSize(QSize(80,80))
        self.piecesList.setSpacing(10)
        self.piecesList.setMovement(QListView.Snap)
        self.piecesList.setAcceptDrops(True)
        self.piecesList.setDropIndicatorShown(True)

        self.model = PiecesModel(self)
        self.piecesList.setModel(self.model)

        self.puzzleWidget = PuzzleWidget()

        self.puzzleWidget.puzzleCompleted.connect(self.setCompleted,
                Qt.QueuedConnection)

        frameLayout.addWidget(self.piecesList)
        frameLayout.addWidget(self.puzzleWidget)
        self.setCentralWidget(frame)
Exemple #8
0
    def __init__(self, parent=None):
        super(MDIHistory, self).__init__(parent)
        self.setMinimumSize(QSize(300, 200))    
        self.setWindowTitle("PyQt5 editor test example") 

        lay = QVBoxLayout()
        lay.setContentsMargins(0,0,0,0)
        self.setLayout(lay)

        self.list = QListView()
        self.list.setEditTriggers(QListView.NoEditTriggers)
        self.list.activated.connect(self.activated)
        self.list.setAlternatingRowColors(True)
        self.list.selectionChanged = self.selectionChanged
        self.model = QStandardItemModel(self.list)


        self.MDILine = MDILine()
        self.MDILine.soft_keyboard = False
        self.MDILine.line_up = self.line_up
        self.MDILine.line_down = self.line_down

        # add widgets
        lay.addWidget(self.list)
        lay.addWidget(self.MDILine)
        self.reload()
    def initUI(self):
        #GrBox1
        GrBox=QGroupBox()
        vbox = QHBoxLayout(self)
        vbox.setContentsMargins(0,0,0,0)
        #GrBox.setFixedHeight(60)
        pathButton = QPushButton(QIcon('icons\\pack.png'),"Папка")
        pathButton.setIconSize(QSize(25,25))
        pathButton.setVisible(True)
        pathLable=QLineEdit()
        #pathLable.setReadOnly(True)
        subPathCheck=QCheckBox()
        subPathCheck.setText("Подпапки")
        subPathCheck.setCheckState(0)
        vbox.addWidget(pathLable)
        vbox.addWidget(subPathCheck)
        vbox.addWidget(pathButton)
        GrBox.setLayout(vbox)
        #/GrBox1

        #FilesTable
        FilesTable=QListView(self)
        FilesTable.setToolTip("Список файлов, выберите нужные файлы для обработки,\nдля просмотра файла дважды щелкните по нему")
        FilesTableModel = QStandardItemModel()
        FilesTable.setModel(FilesTableModel)
        #/FilesTable
        #mainLayout
        mainLayout = QVBoxLayout()
        mainLayout.setContentsMargins(0,0,0,0)

        mainLayout.setMenuBar(GrBox)
        mainLayout.addWidget(FilesTable)
        #/mainLayout

        #self
        self.setLayout(mainLayout)
        self.path=pathLable.text()
        self.pathLable=pathLable
        self.subPathCheck=subPathCheck
        self.FilesTableModel = FilesTableModel
        #/self
        #connections
        pathLable.textChanged.connect(self.setPath)
        pathButton.clicked.connect(self.selectPath)
        subPathCheck.clicked.connect(self.setPath)
        FilesTableModel.itemChanged.connect(self.ChangeFilesList)
        FilesTable.doubleClicked.connect(self.openFile)
Exemple #10
0
class ListScrollArea(QVBoxLayout):
    def __init__(self, parent):
        QVBoxLayout.__init__(self, parent)

        self.scroll_area = QScrollArea()

        # A ListView is a widget, instead of a layout, so there should be no need for additional containers
        self.list_view = QListView()

        self.scroll_area.setWidget(self.list_view)

        self.addWidget(self.list_view)

        self.view_model = QStringListModel()

        self.list_view.setModel(self.view_model)

    def add_item_by_string(self, value):
        current_values = self.view_model.stringList()
        if value not in current_values:
            current_values.append(value)

        self.view_model.setStringList(current_values)

    def remove_item_by_string(self, value):
        current_values = self.view_model.stringList()
        if value in current_values:
            current_values.remove(value)
        self.view_model.setStringList(current_values)

    def clear_all(self):
        self.view_model.setStringList([])

    def get_currently_selected_item(self):
        currently_selected_item_index = self.view_model.currentIndex()
        currently_selected_item_text = str(self.list_view.data(currently_selected_item_index))
        return currently_selected_item_text

    def get_item(self, index):
        current_values = self.view_model.stringList()
        if index < len(current_values):
            return current_values[index]
        return None

    def get_num_items(self):
        return len(self.view_model.stringList())
Exemple #11
0
    def __init__(self, parent):
        super(PatchPanel, self).__init__()

        self.ola = parent.ola

        self.parent = parent

        self.device_selected = None

        self.universe = None

        grid = QGridLayout()
        self.inputs_model = PortList(self, 'input_mode')
        self.outputs_model = PortList(self, 'output_mode')
        self.devices = QListView()
        self.devices_model = DeviceList(self)
        self.devices.setModel(self.devices_model)
        self.inputs = QListView()
        self.inputs.setModel(self.inputs_model)
        self.inputs.setMinimumHeight(400)
        self.inputs.setMinimumHeight(120)
        self.outputs = QListView()
        self.outputs.setModel(self.outputs_model)
        self.outputs.setMinimumHeight(400)
        self.outputs.setMinimumHeight(120)

        # Universe Selected Change
        self.devices.selectionModel().selectionChanged.connect(self.device_selection_changed)

        devices_label = QLabel('Devices')
        grid.addWidget(devices_label, 0, 0, 1, 1)
        grid.addWidget(self.devices, 1, 0, 21, 1)
        inputs_label = QLabel('Inputs')
        grid.addWidget(inputs_label, 0, 1, 1, 1)
        grid.addWidget(self.inputs, 1, 1, 10, 1)
        outputs_label = QLabel('Outputs')
        grid.addWidget(outputs_label, 11, 1, 1, 1)
        grid.addWidget(self.outputs, 12, 1, 10, 1)
        grid.setSpacing(5)
        self.setLayout(grid)
Exemple #12
0
    def __init__(self, qpart, model):
        QListView.__init__(self, qpart.viewport())

        # ensure good selected item background on Windows
        palette = self.palette()
        palette.setColor(palette.Inactive, palette.Highlight, palette.color(palette.Active, palette.Highlight))
        self.setPalette(palette)

        self.setAttribute(Qt.WA_DeleteOnClose)

        self.setItemDelegate(HTMLDelegate(self))

        self._qpart = qpart
        self.setFont(qpart.font())

        self.setCursor(QCursor(Qt.PointingHandCursor))
        self.setFocusPolicy(Qt.NoFocus)

        self.setModel(model)

        self._selectedIndex = -1

        # if cursor moved, we shall close widget, if its position (and model) hasn't been updated
        self._closeIfNotUpdatedTimer = QTimer(self)
        self._closeIfNotUpdatedTimer.setInterval(200)
        self._closeIfNotUpdatedTimer.setSingleShot(True)

        self._closeIfNotUpdatedTimer.timeout.connect(self._afterCursorPositionChanged)

        qpart.installEventFilter(self)

        qpart.cursorPositionChanged.connect(self._onCursorPositionChanged)

        self.clicked.connect(lambda index: self.itemSelected.emit(index.row()))

        self.updateGeometry()
        self.show()

        qpart.setFocus()
    def __init__(self, parent=None):

        self.parent = parent
        self.parent.statusbar.showMessage("Keep Columns started...")
        QWidget.__init__(self,parent)
        
        self.ui = gui.keepColumnUi()
        self.ui.setupUi(self)
        
        self.columns = []
        
        self.batch_files = filedialog.askopenfilenames(parent=root, title='Choose the file(s) you want to modify')
        
        if len(self.batch_files) == 0:
            self.close()
            return
        
        self.parent.statusbar.showMessage("Checking column validity...")

        #extract columns
        for item in self.batch_files:
            self.columns.append(helpers.extract_columns(item))
 
        #check to see if all columns are equal in all the datasets
        if not helpers.are_columns_same(self.columns):
            if not helpers.columns_not_equal_message(self):
                self.close()
                return
                
        #list of items to check from        
        
        self.model = QStandardItemModel()
        
        try:
            for col in self.columns[0]:
                item = QStandardItem(col)
                item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
                item.setData(QVariant(Qt.Unchecked), Qt.CheckStateRole) 
                self.model.appendRow(item) 
        except IndexError:
            pass

        self.list = QListView(self)
        self.list.setModel(self.model) 
        self.list.setGeometry(10, 60, 380, 430)
       
        self.ui.removeBtn.clicked.connect(self.keep)
        self.ui.closeBtn.clicked.connect(self.close)
       
        self.parent.statusbar.showMessage("Welcome back!")
        self.show()
    def __init__(self, *args):
        # Invoke parent init
        QListView.__init__(self, *args)

        # Get a reference to the window object
        self.app = get_app()
        self.win = args[0]

        # Get Model data
        self.title_model = TitlesModel()

        # Setup header columns
        self.setModel(self.title_model.model)
        self.setIconSize(QSize(131, 108))
        self.setGridSize(QSize(102, 92))
        self.setViewMode(QListView.IconMode)
        self.setResizeMode(QListView.Adjust)
        self.setUniformItemSizes(True)
        self.setWordWrap(True)
        self.setTextElideMode(Qt.ElideRight)

        # Refresh view
        self.refresh_view()
    def _setupUi(self):
        self.setWindowTitle(tr("Re-Prioritize duplicates"))
        self.resize(700, 400)

        #widgets
        msg = tr(
            "Add criteria to the right box and click OK to send the dupes that correspond the "
            "best to these criteria to their respective group's "
            "reference position. Read the help file for more information."
        )
        self.promptLabel = QLabel(msg)
        self.promptLabel.setWordWrap(True)
        self.categoryCombobox = QComboBox()
        self.criteriaListView = QListView()
        self.addCriteriaButton = QPushButton(self.style().standardIcon(QStyle.SP_ArrowRight), "")
        self.removeCriteriaButton = QPushButton(self.style().standardIcon(QStyle.SP_ArrowLeft), "")
        self.prioritizationListView = QListView()
        self.prioritizationListView.setAcceptDrops(True)
        self.prioritizationListView.setDragEnabled(True)
        self.prioritizationListView.setDragDropMode(QAbstractItemView.InternalMove)
        self.prioritizationListView.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.buttonBox = QDialogButtonBox()
        self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)

        # layout
        self.mainLayout = QVBoxLayout(self)
        self.mainLayout.addWidget(self.promptLabel)
        self.splitter = QSplitter()
        sp = self.splitter.sizePolicy()
        sp.setVerticalPolicy(QSizePolicy.Expanding)
        self.splitter.setSizePolicy(sp)
        self.leftSide = QWidget()
        self.leftWidgetsLayout = QVBoxLayout()
        self.leftWidgetsLayout.addWidget(self.categoryCombobox)
        self.leftWidgetsLayout.addWidget(self.criteriaListView)
        self.leftSide.setLayout(self.leftWidgetsLayout)
        self.splitter.addWidget(self.leftSide)
        self.rightSide = QWidget()
        self.rightWidgetsLayout = QHBoxLayout()
        self.addRemoveButtonsLayout = QVBoxLayout()
        self.addRemoveButtonsLayout.addItem(verticalSpacer())
        self.addRemoveButtonsLayout.addWidget(self.addCriteriaButton)
        self.addRemoveButtonsLayout.addWidget(self.removeCriteriaButton)
        self.addRemoveButtonsLayout.addItem(verticalSpacer())
        self.rightWidgetsLayout.addLayout(self.addRemoveButtonsLayout)
        self.rightWidgetsLayout.addWidget(self.prioritizationListView)
        self.rightSide.setLayout(self.rightWidgetsLayout)
        self.splitter.addWidget(self.rightSide)
        self.mainLayout.addWidget(self.splitter)
        self.mainLayout.addWidget(self.buttonBox)
Exemple #16
0
    def __init__(self, parent):
        QVBoxLayout.__init__(self, parent)

        self.scroll_area = QScrollArea()

        # A ListView is a widget, instead of a layout, so there should be no need for additional containers
        self.list_view = QListView()

        self.scroll_area.setWidget(self.list_view)

        self.addWidget(self.list_view)

        self.view_model = QStringListModel()

        self.list_view.setModel(self.view_model)
Exemple #17
0
    def mouseDoubleClickEvent(self, event):
        item = self.indexAt(event.pos())
        try:
            player = str(item.data().toString())
        except AttributeError:
            player = str(item.data())
        if player != str(None):
            self.doubleclickeditem.emit(player)

            if self.engine:
                if self.model().dealer:
                    self.setDealer(item, player)
            else:
                self.model().removeRows(item.row(), 1)
                self.changed.emit()
        return QListView.mouseDoubleClickEvent(self, event)
Exemple #18
0
 def init_UI(self):
     """setup the UI
     """
     layout = QVBoxLayout()
     self.setLayout(layout)
     self.resize(200,200)
     self.title = "Choose an existing project"
      
     self.list = QListView(self)
     layout.addWidget(self.list)
     self.list.setModel(self.model)
     self.list.setWhatsThis("Choose a project by clicking on it")
      
     self.btn = QPushButton("Accept", self)
     layout.addWidget(self.btn)
     self.btn.clicked.connect(self.on_btn_clicked)
     self.btn.setWhatsThis("Click here to accept your selection (works only if a project has been selected)")
	def __init__(self):
		QWidget.__init__(self)
		self.listview=QListView(self)
		self.addButton=QPushButton(self)
		self.removeButton=QPushButton(self)
		self.resize(630,440)
		self.okButton=QPushButton(self)
		self.listview.setGeometry(30,30,410,351)
		self.addButton.setGeometry(490,40,80,22)
		self.addButton.setText("add")
		self.addButton.clicked.connect(self.click_add)
		self.removeButton.setGeometry(490,80,80,22)
		self.removeButton.setText("remove")
		self.removeButton.clicked.connect(self.click_remove)
		self.okButton.setGeometry(490,150,80,22)
		self.okButton.setText("ok")
		self.okButton.clicked.connect(self.click_ok)
#		self.aw=null


		self.fresh()
Exemple #20
0
    def __init__(self, parent):
        QFrame.__init__(self, parent)
        self.setFrameStyle(QFrame.Box | QFrame.Sunken)
        self.setStyleSheet("QListView{background:transparent;}")

        self.listView = QListView(self)
        self.setLayout(QHBoxLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.layout().addWidget(self.listView)

        self.listView.setContextMenuPolicy(Qt.CustomContextMenu)
        self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.listView.setMovement(QListView.Snap)
        self.listView.setFlow(QListView.LeftToRight)
        self.listView.setResizeMode(QListView.Adjust)
        self.listView.setGridSize(QSize(self.logicalDpiX() / 96 * 70,
                                        self.logicalDpiY() / 96 * 70))
        self.listView.setViewMode(QListView.IconMode)

        self.quickDesktopModel = QuickDesktopModel(self.window().platform.databaseFile)
        self.listView.setModel(self.quickDesktopModel)
        self.createActions()
        self.makeConnections()
Exemple #21
0
  def __init__(self):
    super(FlickrViewer, self).__init__()

    self.logged_in = False

    self.scaleFactor = 0.0
    self.photos = []
    self.current_page = 1
 
    self.topLayout = QGridLayout()
    self.central = QWidget()
    self.central.setLayout(self.topLayout)

    self.setCentralWidget(self.central)

    self.picture_list = QListView()
    self.photos_model = QStandardItemModel(self.picture_list)
    self.topLayout.addWidget(self.picture_list,0,0)
    self.picture_list.setModel(self.photos_model)
    self.picture_list.clicked.connect(self.on_item_selected)

    self.detail = QWidget()
    self.detail_layout = QVBoxLayout()
    self.detail_thumb = QLabel()
    self.detail.setLayout(self.detail_layout)
    self.detail_title = QLabel("Photo Title:")
    self.detail_embedding = QPlainTextEdit("..")
    self.detail_layout.addWidget(self.detail_thumb)
    self.detail_layout.addWidget(self.detail_title)
    self.detail_layout.addWidget(self.detail_embedding)
    self.topLayout.addWidget(self.detail,0,1)

    self.createActions()
    self.createMenus()

    self.setWindowTitle("Flickr Viewer")
    self.resize(500, 400)
Exemple #22
0
 def _setupUi(self):
     self.resize(400, 300)
     self.gridLayout = QGridLayout(self)
     self.label = QLabel(tr("Choose a type for this tab:"))
     self.label.setAlignment(Qt.AlignCenter)
     self.gridLayout.addWidget(self.label, 0, 0, 1, 3)
     self.gridLayout.addItem(horizontalSpacer(), 1, 0, 1, 1)
     self.verticalLayout = QVBoxLayout()
     BUTTONS = [
         ('networthButton', tr("1. Net Worth"), 'balance_sheet_16'),
         ('profitButton', tr("2. Profit && Loss"), 'income_statement_16'),
         ('transactionButton', tr("3. Transactions"), 'transaction_table_16'),
         ('gledgerButton', tr("4. General Ledger"), 'gledger_16'),
         ('scheduleButton', tr("5. Schedules"), 'schedules_16'),
         ('budgetButton', tr("6. Budgets"), 'budget_16'),
         ('docpropsButton', tr("7. Document Properties"), 'gledger_16'),
         ('pluginlistButton', tr("8. Plugin Management"), ''),
     ]
     for i, (name, label, icon) in enumerate(BUTTONS, start=1):
         button = QPushButton(label)
         if icon:
             button.setIcon(QIcon(QPixmap(':/{}'.format(icon))))
         self.verticalLayout.addWidget(button)
         setattr(self, name, button)
         shortcut = QShortcut(self)
         shortcut.setKey(QKeySequence(str(i)))
         shortcut.setContext(Qt.WidgetShortcut)
         setattr(self, 'shortcut{}'.format(i), shortcut)
     self.pluginLabel = QLabel(tr("Plugins (double-click to open)"))
     self.pluginLabel.setAlignment(Qt.AlignCenter)
     self.verticalLayout.addWidget(self.pluginLabel)
     self.pluginListView = QListView()
     self.pluginListView.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.verticalLayout.addWidget(self.pluginListView)
     self.gridLayout.addLayout(self.verticalLayout, 1, 1, 1, 1)
     self.gridLayout.addItem(horizontalSpacer(), 1, 2, 1, 1)
     self.gridLayout.addItem(verticalSpacer(), 2, 1, 1, 1)
Exemple #23
0
    def __init__(self, controller):
        super(AppletNoticeWindow, self).__init__()

        self.__controller = controller

        self.__pkglist = []

        # setup widgets
        self.__vbox_up = QVBoxLayout()
        self.__critical_label = QLabel()
        self.__critical_label.setWordWrap(True)
        self.__list_model = QStringListModel()
        self.__list_view = QListView()
        self.__list_view.setModel(self.__list_model)
        self.__vbox_up.addWidget(self.__critical_label)
        self.__vbox_up.addWidget(self.__list_view)

        # bottom buttons
        self.__vbox = QVBoxLayout()
        self.__vbox.addLayout(self.__vbox_up)

        self.__button_hbox = QHBoxLayout()
        self.__close_button = QPushButton(_("Close"))
        self.__launch_pm_button = QPushButton(_("Launch Application Browser"))
        self.__button_hbox.addWidget(self.__launch_pm_button)
        self.__button_hbox.addWidget(self.__close_button)

        self.__vbox.addLayout(self.__button_hbox)

        self.setLayout(self.__vbox)

        # set window settings
        self.resize(400, 200)
        self.setWindowTitle(_("Application updates"))

        self.__close_button.clicked.connect(self.on_close)
        self.__launch_pm_button.clicked.connect(self.on_pm)
    def __init__(self, parent=None):
        super(ConfigurationView, self).__init__(parent)
        self._layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.setLayout(self._layout)
        self._editView = EditView(parent)
        # initialize list view
        self._listView = QListView()
        self._configuration_model = self._get_config_model()
        self._listView.setModel(self._configuration_model)
        # initialize detail view
        self._detailView = QWidget()
        self._detailLayout = QBoxLayout(QBoxLayout.TopToBottom)
        self._detailView.setLayout(self._detailLayout)

        self._detailPanels = {}
        self._currentDetailPanel = None
        self._currentConfiguration = None # type: Configuration
        self._config_wide_print_amounts = {}
        self._recalculateEffectivePrintAmounts = False

        # add widgets to layout
        self._layout.addWidget(QLabel("List of Configurations"))
        self._layout.addWidget(self._listView)
        self._layout.addWidget(self._detailView)

        self._create_detail_view()
        # hide detail view on start
        self._detailView.hide()

        # selected configs map
        self._selected_configs = {}
        self._selected_counter = 0

        # add event listener for selection change
        self._listView.clicked.connect(self._on_selection_change)
        self._listView.selectionModel().currentChanged.connect(self._on_selection_change)
Exemple #25
0
class App(QMainWindow, QWidget):  # 창의 대부분의 기능
    def __init__(self):  # 창 기본 세팅 설정
        super().__init__()

        # Window options!
        self.title = 'HexQT'
        self.left = 0
        self.top = 0
        self.width = 1280
        self.height = 840

        self.rowSpacing = 4  # How many bytes before a double space.
        self.rowLength = 16  # 헥사 창에 얼마나 많은 byte 가 들어갈 것인지
        self.byteWidth = 4  # How many bits to include in a byte.
        self.mode = Mode.READ

        self.initUI()

    # readFile ... Reads file data from a file in the form of bytes and generates the text for the hex-editor.
    def readFile(self, fileName):
        fileData = ''

        if fileName:
            with open(fileName, 'rb') as fileObj:
                fileData = fileObj.read()

        self.generateView(fileData)

    # generateView ... Generates text view for hexdump likedness.
    def generateView(self, text):
        space = ' '
        bigSpace = ' ' * 4

        rowSpacing = self.rowSpacing
        rowLength = self.rowLength

        offset = 0

        offsetText = ''
        mainText = ''
        asciiText = ''

        for chars in range(1, len(text) + 1):
            byte = text[chars - 1]
            char = chr(text[chars - 1])

            # Asciitext 는 오른쪽 출력부
            if char is ' ':
                asciiText += '.'

            elif char is '\n':
                asciiText += '!'

            else:
                asciiText += char
            # main text 가 중앙에 있는것
            mainText += format(byte, '0' + str(self.byteWidth) + 'x')

            if chars % rowLength is 0:
                offsetText += format(offset, '08x') + '\n'
                mainText += '\n'
                asciiText += '\n'

            elif chars % rowSpacing is 0:
                mainText += space * 2

            else:
                mainText += space

            offset += len(char)

        self.offsetTextArea.setText(offsetText)
        self.mainTextArea.setText(mainText)
        self.asciiTextArea.setText(asciiText)

    # openFile ... Opens a file directory and returns the filename.
    def openFile(self):
        fileSelect = FileSelector()
        fileName = fileSelect.fileName

        self.readFile(fileName)

    # saveFile ... Method for saving the edited hex file.
    def saveFile(self):
        print('Saved!')

    # highlightMain ... Bi-directional highlighting from main.
    def highlightMain(self):
        # Create and get cursors for getting and setting selections.
        highlightCursor = QTextCursor(self.asciiTextArea.document())
        # asciitextArea의 처음을 가르치는 커서를 구성
        cursor = self.mainTextArea.textCursor()
        # 커서의 위치의 사본을 따서 복사 함
        # Clear any current selections and reset text color.
        highlightCursor.select(QTextCursor.Document)
        highlightCursor.setCharFormat(QTextCharFormat())
        highlightCursor.clearSelection()

        # Information about where selections and rows start.
        selectedText = cursor.selectedText()  # The actual text selected.
        selectionStart = cursor.selectionStart()
        selectionEnd = cursor.selectionEnd()

        mainText = self.mainTextArea.toPlainText().replace('\n', 'A')

        totalBytes = 0

        for char in mainText[selectionStart:selectionEnd]:
            if char is not ' ':
                totalBytes += len(char)

        asciiStart = 0

        for char in mainText[:selectionStart]:
            if char is not ' ':
                asciiStart += len(char)

        totalBytes = round(totalBytes / self.byteWidth)
        asciiStart = round(asciiStart / self.byteWidth)
        asciiEnd = asciiStart + totalBytes

        asciiText = self.asciiTextArea.toPlainText()

        # Select text and highlight it.
        highlightCursor.setPosition(asciiStart, QTextCursor.MoveAnchor)
        highlightCursor.setPosition(asciiEnd, QTextCursor.KeepAnchor)

        highlight = QTextCharFormat()
        highlight.setBackground(Qt.red)
        highlightCursor.setCharFormat(highlight)
        highlightCursor.clearSelection()

    # highlightAscii ... Bi-directional highlighting from ascii.
    def highlightAscii(self):
        selectedText = self.asciiTextArea.textCursor().selectedText()

    # offsetJump ... Creates a dialogue and gets the offset to jump to and then jumps to that offset.

    def offsetJump(self):  # input dialog 를 활용 하여 jump to ofsset 을 만듭니다.
        jumpText = InputDialogue('Jump to Offset', 'Offset').dialogueReponse
        jumpOffset = 0xF

        mainText = self.mainTextArea.toPlainText()
        mainText = mainText.strip().replace('  ', ' ')

        textCursor = self.mainTextArea.textCursor()

    # createMainView ... Creates the primary view and look of the application (3-text areas.)

    def createMainView(self):
        qhBox = QHBoxLayout()
        qhBox2 = QHBoxLayout()
        qvBox = QVBoxLayout()

        self.treeModel = QFileSystemModel()
        self.treeModel.setRootPath('')
        self.listModel = QFileSystemModel()
        self.listModel.setRootPath('')
        self.tree = QTreeView()
        self.tree.setModel(self.treeModel)
        self.listview = QListView()
        self.listview.setModel(self.listModel)

        self.mainTextArea = QTextEdit()
        self.offsetTextArea = QTextEdit()
        self.asciiTextArea = QTextEdit()

        # Initialize them all to read only.
        self.mainTextArea.setReadOnly(True)
        self.asciiTextArea.setReadOnly(True)
        self.offsetTextArea.setReadOnly(True)

        # Create the fonts and styles to be used and then apply them.
        font = QFont("DejaVu Sans Mono", 12, QFont.Normal, True)

        self.mainTextArea.setFont(font)
        self.asciiTextArea.setFont(font)
        self.offsetTextArea.setFont(font)

        self.offsetTextArea.setTextColor(Qt.red)

        # Syncing scrolls.
        syncScrolls(self.mainTextArea, self.asciiTextArea, self.offsetTextArea)

        # Highlight linking. BUG-GY
        # self.mainTextArea.selectionChanged.connect(self.highlightMain)
        # self.asciiTextArea.selectionChanged.connect(self.highlightAscii)

        qhBox.addWidget(self.offsetTextArea, 1)
        qhBox.addWidget(self.mainTextArea, 6)
        qhBox.addWidget(self.asciiTextArea, 2)
        qhBox2.addWidget(self.tree)
        qhBox2.addWidget(self.listview)
        self.tree.clicked.connect(self.on_clicked)

        qvBox.addLayout(qhBox2)
        qvBox.addLayout(qhBox)
        return qvBox

    def on_clicked(self, index):
        path = self.treeModel.fileInfo(index).absoluteFilePath()
        self.listview.setRootIndex(self.listModel.setRootPath(path))

    # initUI ... Initializes the min look of the application.
    def initUI(self):
        # Initialize basic window options.
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Center the window.
        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())

        # Creates a menu bar, (file, edit, options, etc...)
        mainMenu = self.menuBar()

        # Menus for window.
        fileMenu = mainMenu.addMenu('File')
        editMenu = mainMenu.addMenu('Edit')
        viewMenu = mainMenu.addMenu('View')
        helpMenu = mainMenu.addMenu('Help')

        # FILE MENU ---------------------------------------

        # Open button.
        openButton = QAction(QIcon(), 'Open', self)
        openButton.setShortcut('Ctrl+O')
        openButton.setStatusTip('Open file')
        openButton.triggered.connect(self.openFile)

        # Save button.
        saveButton = QAction(QIcon(), 'Save', self)
        saveButton.setShortcut('Ctrl+S')
        saveButton.setStatusTip('Open file')
        saveButton.triggered.connect(self.saveFile)

        # Optional exit stuff.
        exitButton = QAction(QIcon(), 'Exit', self)
        exitButton.setShortcut('Ctrl+Q')
        exitButton.setStatusTip('Exit application')
        exitButton.triggered.connect(self.close)

        fileMenu.addAction(openButton)
        fileMenu.addAction(saveButton)
        fileMenu.addAction(exitButton)

        # EDIT MENU ---------------------------------------

        # Jump to Offset
        offsetButton = QAction(QIcon(), 'Jump to Offset', self)
        offsetButton.setShortcut('Ctrl+J')
        offsetButton.setStatusTip('Jump to Offset')
        offsetButton.triggered.connect(self.offsetJump)

        editMenu.addAction(offsetButton)

        # Creating a widget for the central widget thingy.
        centralWidget = QWidget()
        centralWidget.setLayout(self.createMainView())

        self.setCentralWidget(centralWidget)

        # Show our masterpiece.
        self.show()
Exemple #26
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self._next_id = 0
        self.list = list_ = QListView(self)
        #model = QStandardItemModel(self)
        model = EditStepsModel(self)

        list_.setModel(model)
        list_.setEditTriggers(QListView.NoEditTriggers)
        list_.selectionModel().currentChanged.connect(self._on_select)
        # Remove borders
        list_.setAttribute(Qt.WA_MacShowFocusRect, 0)
        list_.setFrameStyle(QFrame.Plain | QFrame.NoFrame)
        # Add borders to full set
        self.setAttribute(Qt.WA_MacShowFocusRect, 1)
        self.setFrameStyle(QFrame.Sunken | QFrame.Panel)
        self.setFocusPolicy(Qt.StrongFocus)
        self.setFocusProxy(list_)

        style = self.style()
        icon = style.standardIcon(QStyle.SP_DialogCancelButton)
        self._a_add = a_add = QAction(
            style.standardIcon(QStyle.SP_FileIcon),
            "Add new step",
            self,
            statusTip="Add a new step to compile process",
            triggered=self._on_add,
        )
        self._a_del = a_del = QAction(
            style.standardIcon(QStyle.SP_DialogDiscardButton),
            "Remove a step",
            self,
            statusTip="Remove selected step from compile process",
            triggered=self._on_del,
        )
        self._a_up = a_up = QAction(
            style.standardIcon(QStyle.SP_ArrowUp),
            "Move step up",
            self,
            statusTip="Move selected step up a position",
            triggered=self._on_up,
        )
        self._a_down = a_down = QAction(
            style.standardIcon(QStyle.SP_ArrowDown),
            "Move step down",
            self,
            statusTip="Move selected step down a position",
            triggered=self._on_down,
        )

        actions = QToolBar(self)
        actions.setFloatable(False)
        actions.setMovable(False)
        actions.setIconSize(QSize(16, 16))
        actions.addAction(a_add)
        actions.addAction(a_del)
        actions.addAction(a_up)
        actions.addAction(a_down)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.addWidget(list_)
        layout.addWidget(actions)
        self.setLayout(layout)
Exemple #27
0
class FTPGUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.debug = False
        self.ftp = mFTP()
        if self.debug:
            self.ftp.open_handler('127.0.0.1', 8000)
            self.ftp.user_handler('anonymous', 'password')
        self.initUI()
        self.threadpool = QThreadPool()
        self.getFlags = []
        self.putFlags = []

    def initUI(self):
        self.centerwidget = QWidget(self)
        self.setCentralWidget(self.centerwidget)
        self.setupLayout(self.centerwidget)
        self.setupMenu()
        self.setupWidget()

        self.resize(1200, 960)
        self.center()
        self.setWindowTitle('Minimum-FTP')
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def setupLayout(self, wid):
        # Auth related widget
        authlay = QHBoxLayout()

        hostLabel = QLabel('Host:')
        portLabel = QLabel('Port:')
        usernameLabel = QLabel('Username:'******'Password:'******'Connect', self)
        if self.debug:
            self.connectBtn.setEnabled(False)
        # self.connectBtn.setIcon(QApplication.style().standardIcon(QStyle.SP_DirIcon))

        authlay.addWidget(hostLabel)
        authlay.addWidget(self.hostInput)
        authlay.addWidget(portLabel)
        authlay.addWidget(self.portInput)
        authlay.addWidget(usernameLabel)
        authlay.addWidget(self.usernameInput)
        authlay.addWidget(passwordLabel)
        authlay.addWidget(self.passwordInput)
        authlay.addWidget(self.connectBtn)

        # Show commands in this widget
        commandlay = QVBoxLayout()

        commandLabel = QLabel('Command Window')

        self.commandText = QTextEdit()

        commandlay.addWidget(commandLabel)
        commandlay.addWidget(self.commandText)

        # Show local file and remote file in this widget
        locallay = QVBoxLayout()
        localpathlay = QHBoxLayout()
        remotelay = QVBoxLayout()
        remotepathlay = QHBoxLayout()

        localfileLabel = QLabel('Local File')
        remotefileLabel = QLabel('Remote File')

        self.localfileLine = QLineEdit()
        self.remotefileLine = QLineEdit()
        self.localfileList = QListView()
        self.remotefileList = QListView()
        # self.localfileReload = QPushButton()
        # self.remotefileReload = QPushButton()
        # self.localfileReload.setIcon(QApplication.style().standardIcon(QStyle.SP_BrowserReload))
        # self.remotefileReload.setIcon(QApplication.style().standardIcon(QStyle.SP_BrowserReload))

        localpathlay.addWidget(localfileLabel)
        localpathlay.addWidget(self.localfileLine)
        # localpathlay.addWidget(self.localfileReload)
        remotepathlay.addWidget(remotefileLabel)
        remotepathlay.addWidget(self.remotefileLine)
        # remotepathlay.addWidget(self.remotefileReload)

        locallay.addLayout(localpathlay)
        locallay.addWidget(self.localfileList)
        remotelay.addLayout(remotepathlay)
        remotelay.addWidget(self.remotefileList)

        localframe = QFrame(self)
        localframe.setFrameShape(QFrame.StyledPanel)
        localframe.setLayout(locallay)
        remoteframe = QFrame(self)
        remoteframe.setFrameShape(QFrame.StyledPanel)
        remoteframe.setLayout(remotelay)

        filesplitter = QSplitter(Qt.Horizontal)
        filesplitter.addWidget(localframe)
        filesplitter.addWidget(remoteframe)

        self.tasklist = QListWidget(self)

        # Set overall layout
        vlay = QVBoxLayout()

        authframe = QFrame(self)
        authframe.setFrameShape(QFrame.StyledPanel)
        authframe.setLayout(authlay)
        commandframe = QFrame(self)
        commandframe.setFrameShape(QFrame.StyledPanel)
        commandframe.setLayout(commandlay)

        topsplitter = QSplitter(Qt.Vertical)
        topsplitter.addWidget(authframe)
        topsplitter.addWidget(commandframe)
        topsplitter.addWidget(filesplitter)
        topsplitter.addWidget(self.tasklist)

        vlay.addWidget(topsplitter)

        wid.setLayout(vlay)

    def setupMenu(self):
        self.statusbar = self.statusBar()
        self.statusbar.showMessage('Ready')

        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('File')
        aboutMenu = menubar.addMenu('About')

        modeMenu = QMenu('Mode', self)
        self.binaryAct = QAction('Binary', self, checkable=True)
        self.binaryAct.setChecked(False)
        self.binaryAct.triggered.connect(self.setBinary)
        modeMenu.addAction(self.binaryAct)
        fileMenu.addMenu(modeMenu)

        systemAct = QAction('System', self)
        systemAct.triggered.connect(self.checkSystem)
        aboutMenu.addAction(systemAct)

    def setupWidget(self):
        self.connectBtn.clicked.connect(self.connectClicked)

        self.commandText.setReadOnly(True)
        self.localfileLine.setReadOnly(True)
        self.remotefileLine.setReadOnly(True)

        self.localfileModel = LocalFileSystemModel()
        self.localfileList.setModel(self.localfileModel)
        self.localfileList.doubleClicked.connect(self.doubleClickLocalFile)
        self.localfileLine.setText(str(self.localfileModel.path))

        self.remotefileModel = RemoteFileSystemModel(self.ftp, self)
        self.remotefileList.setModel(self.remotefileModel)
        self.remotefileList.doubleClicked.connect(self.doubleClickRemoteFile)
        self.remotefileLine.setText(str(self.remotefileModel.path))

        # self.localfileReload.clicked.connect(self.localfileModel.setupItem)
        # self.remotefileReload.clicked.connect(self.remotefileModel.setupItem)

        self.remotefileList.installEventFilter(self)
        self.localfileList.installEventFilter(self)

    def eventFilter(self, source, event):
        if (event.type() == QEvent.ContextMenu
                and source is self.remotefileList):
            menu = QMenu()

            getAct = QAction('Download', self)
            menu.addAction(getAct)
            mkdirAct = QAction('New Directory', self)
            mkdirAct.triggered.connect(self.remoteMkdir)
            menu.addAction(mkdirAct)
            rmdirAct = QAction('Remove Directory', self)
            menu.addAction(rmdirAct)
            renameAct = QAction('Rename', self)
            menu.addAction(renameAct)
            refreshAct = QAction('Refresh', self)
            menu.addAction(refreshAct)

            action = menu.exec_(event.globalPos())
            if action:
                item = source.indexAt(event.pos())
                item_name = item.data()
                if action == rmdirAct:
                    self.remoteRmdir(item_name)
                elif action == renameAct:
                    self.remoteRename(item_name)
                elif action == refreshAct:
                    self.remotefileModel.setupItem()
                elif action == getAct:
                    self.getSlot(item_name)
            return True
        elif (event.type() == QEvent.ContextMenu
              and source is self.localfileList):
            menu = QMenu()

            putAct = QAction('Upload', self)
            menu.addAction(putAct)

            action = menu.exec_(event.globalPos())
            if action:
                item = source.indexAt(event.pos())
                item_name = item.data()
                if action == putAct:
                    self.putSlot(item_name)

        return super(FTPGUI, self).eventFilter(source, event)

    def putSlot(self, filename):
        downloadtask = QListWidgetItem(self.tasklist)
        self.tasklist.addItem(downloadtask)

        dlvlay = QHBoxLayout()
        listwidget = QWidget(self)
        typelabel = QLabel('Upload')
        dlfilename = QLabel(filename[:30])
        downloadprogress = QProgressBar(self)
        dlbutton = QPushButton('Pause')
        dlvlay.addWidget(typelabel, 1)
        dlvlay.addWidget(dlfilename, 2)
        dlvlay.addWidget(downloadprogress, 6)
        dlvlay.addWidget(dlbutton, 1)
        listwidget.setLayout(dlvlay)

        downloadtask.setSizeHint(listwidget.sizeHint())
        downloadtask.setFlags(downloadtask.flags() & ~Qt.ItemIsSelectable)
        self.tasklist.setItemWidget(downloadtask, listwidget)

        path = self.localfileModel.path / filename
        putPauseflag = {
            'stop': False,
            'button': dlbutton,
            'dlpb': downloadprogress,
            'localname': path,
            'remotefullpath': self.remotefileModel.path,
            'remotename': filename
        }
        self.putFlags.append(putPauseflag)
        id = len(self.putFlags) - 1
        dlbutton.clicked.connect(self.putPauseSlot(id))
        worker = putWorker(self.ftp, path, filename, 0, downloadprogress,
                           self.putUpdatePBSlot, self.putFinishSlot,
                           putPauseflag, id)
        self.threadpool.start(worker)

    def putUpdatePBSlot(self, tup):
        tup[1].setValue(tup[0])

    def putFinishSlot(self, tup):
        new_code = 0
        if tup[1] == 1:
            new_code = 1
        putPauseflag = self.putFlags[tup[3]]
        self.printLog([tup[0], new_code], 'put ' + tup[2])
        if tup[1] != 1:
            self.remotefileModel.setupItem()
        if tup[1] == 0:
            putPauseflag['stop'] = True
            putPauseflag['button'].setEnabled(False)

    def putPauseSlot(self, id):
        def realPauseSlot():
            putPauseflag = self.putFlags[id]
            if not putPauseflag['stop']:
                putPauseflag['stop'] = True
                putPauseflag['button'].setText('Continue')
            else:
                putPauseflag['stop'] = False
                putPauseflag['button'].setText('Pause')
                localname = putPauseflag['localname']
                remotename = putPauseflag['remotename']
                remotefullpath = putPauseflag['remotefullpath']
                dlpb = putPauseflag['dlpb']
                info = self.remotefileModel.getinfo(remotefullpath, remotename)
                # if info['size']:
                try:
                    size = info['size']
                except:
                    size = 0
                worker = putWorker(self.ftp, localname,
                                   remotefullpath + '/' + remotename, size,
                                   dlpb, self.putUpdatePBSlot,
                                   self.putFinishSlot, putPauseflag, id)
                self.threadpool.start(worker)

        return realPauseSlot

    def doubleClickLocalFile(self, index):
        self.localfileModel.changeDir(index.data())
        self.localfileLine.setText(str(self.localfileModel.path))

    def getSlot(self, filename):
        remotefilename = filename
        remotefullpath = self.remotefileModel.path
        localfilename = str(self.localfileModel.path / filename)
        size = self.remotefileModel.file_info[remotefilename]['size']
        gettaskitem = QListWidgetItem(self.tasklist)
        self.tasklist.addItem(gettaskitem)

        dlvlay = QHBoxLayout()
        listwidget = QWidget(self)
        typelabel = QLabel('Download')
        dlfilename = QLabel(filename[:30])
        getpb = QProgressBar(self)
        dlbutton = QPushButton('Pause')
        dlvlay.addWidget(typelabel, 1)
        dlvlay.addWidget(dlfilename, 2)
        dlvlay.addWidget(getpb, 6)
        dlvlay.addWidget(dlbutton, 1)
        listwidget.setLayout(dlvlay)

        gettaskitem.setSizeHint(listwidget.sizeHint())
        gettaskitem.setFlags(gettaskitem.flags() & ~Qt.ItemIsSelectable)
        self.tasklist.setItemWidget(gettaskitem, listwidget)

        getPauseflag = {
            'stop': False,
            'button': dlbutton,
            'getpb': getpb,
            'localname': localfilename,
            'remotefullpath': remotefullpath,
            'remotename': filename,
            'size': size
        }

        self.getFlags.append(getPauseflag)
        id = len(self.getFlags) - 1
        dlbutton.clicked.connect(self.getPauseSlot(id))

        worker = getWorker(self.ftp, localfilename,
                           remotefullpath + '/' + remotefilename, False, getpb,
                           self.getUpdatePBSlot, self.getFinishSlot,
                           self.getFlags[id], id)
        self.threadpool.start(worker)

    def getUpdatePBSlot(self, tup):
        tup[1].setValue(tup[0])

    def getFinishSlot(self, tup):
        new_code = 0
        getPauseflag = self.getFlags[tup[3]]
        if tup[1] == 1:
            new_code = 1
        self.printLog([tup[0], new_code], 'get ' + tup[2])
        if tup[1] != 1:
            self.localfileModel.setupItem()
        if tup[1] == 0:
            getPauseflag['stop'] = True
            getPauseflag['button'].setEnabled(False)

    def getPauseSlot(self, id):
        def realPauseSlot():
            getPauseflag = self.getFlags[id]
            if not getPauseflag['stop']:
                getPauseflag['stop'] = True
                getPauseflag['button'].setText('Continue')
            else:
                getPauseflag['stop'] = False
                getPauseflag['button'].setText('Pause')
                localfilename = getPauseflag['localname']
                remotefullpath = getPauseflag['remotefullpath']
                remotename = getPauseflag['remotename']
                getpb = getPauseflag['getpb']
                worker = getWorker(self.ftp, localfilename,
                                   remotefullpath + '/' + remotename, True,
                                   getpb, self.getUpdatePBSlot,
                                   self.getFinishSlot, getPauseflag, id)
                self.threadpool.start(worker)

        return realPauseSlot

    def remoteMkdir(self):
        text, ok = QInputDialog.getText(self, 'New Directory',
                                        'Enter new directory name:')
        if not ok:
            return
        mkdirresult = self.ftp.mkdir_handler(text)
        self.printLog(mkdirresult, 'mkdir ' + text)
        if mkdirresult[1] == 0:
            self.remotefileModel.setupItem()

    def remoteRmdir(self, dirname):
        rmdirresult = self.ftp.rmdir_handler(dirname)
        self.printLog(rmdirresult, 'rmdir ' + dirname)
        if rmdirresult[1] == 0:
            self.remotefileModel.setupItem()

    def remoteRename(self, oldname):
        newname, ok = QInputDialog.getText(self, 'Rename',
                                           'Enter new file name:')
        if not ok:
            return
        renameresult = self.ftp.rename_handler(oldname, newname)
        self.printLog(renameresult, 'rename ' + oldname + ' ' + newname)
        if renameresult[1] == 0:
            self.remotefileModel.setupItem()

    def doubleClickRemoteFile(self, index):
        self.remotefileModel.changeDir(index.data())
        self.remotefileLine.setText(str(self.remotefileModel.path))

    def connectClicked(self):
        if self.connectBtn.text() == 'Connect':
            host = self.hostInput.text()
            # TODO: more robust
            port = int(self.portInput.text())
            username = self.usernameInput.text()
            password = self.passwordInput.text()

            openresult = self.ftp.open_handler(host, port)
            self.printLog(openresult, 'open ' + host + ' ' + str(port))
            if openresult[1] != 0:
                return
            loginresult = self.ftp.user_handler(username, password)
            self.printLog(loginresult,
                          'user ' + username + ' ' + '*' * len(password))
            if loginresult[1] == 0:
                self.connectBtn.setText('Disconnect')
                self.remotefileModel.setupItem()
        else:
            byeresult = self.ftp.bye_handler()
            self.printLog(byeresult, 'bye')
            if byeresult[1] == 0:
                self.connectBtn.setText('Connect')
                self.remotefileModel.removeRows(
                    0, self.remotefileModel.rowCount())

    def setBinary(self):
        if not self.ftp.open_status:
            return
        binresult = self.ftp.binary_handler()
        self.printLog(binresult, 'binary')
        if binresult[1] == 0:
            self.binaryAct.setChecked(True)

    def checkSystem(self):
        if self.ftp.open_status:
            sysresult = self.ftp.system_handler()
            self.printLog(sysresult, 'system')
            if sysresult[1] == 0:
                message = sysresult[0].strip('\r\n')
            else:
                message = 'Something wrong while receiving data.'
        else:
            message = 'No connection established.'
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("FTP Server System Information")
        msg.setInformativeText(message)
        msg.setWindowTitle("About-System")
        msg.setStandardButtons(QMessageBox.Ok)
        msg.exec_()

    def printLog(self, result, command):
        greenColor = QColor(46, 139, 87)
        blueColor = QColor(0, 0, 255)
        redColor = QColor(255, 0, 0)
        blackColor = QColor(0, 0, 0)
        self.setUpdatesEnabled(False)
        self.commandText.append(
            "<span style='color:#4169E1'>&gt;ftp&nbsp;&nbsp;&nbsp;</span><span style='color:#2F4F4F'>"
            + command + "</span>")
        if result[1] == 0:
            self.commandText.setTextColor(greenColor)
        elif result[1] == 1:
            self.commandText.setTextColor(redColor)
        else:
            self.commandText.setTextColor(redColor)
        self.commandText.append(result[0].strip('\r\n'))
        self.setUpdatesEnabled(True)
Exemple #28
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        # self.gfont = FontProperties(fname='assets/PingFang.ttc')
        self.accuser = Accuser()
        self.dbconn = DBConn()
        self.scheduler = Scheduler(self.dbconn)
        self.scheduler_status = False
        self.automaton = ReAutomaton()
        self.analyzer = anal.Analyzer(self.dbconn)
        self.init_ui()

    def closeEvent(self, a0):
        self.scheduler.browser.quit()
        return super().closeEvent(a0)

    def init_ui(self):
        self.setWindowTitle("Weibo Monitor")
        self.setGeometry(30, 30, 1024, 720)
        self.init_components()
        self.show()

    def init_components(self):
        self.gwidget = QTabWidget()
        self.setCentralWidget(self.gwidget)
        self.glayout = QHBoxLayout()
        self.crawl_widget = QWidget()
        self.ana_widget = QWidget()
        self.init_crawl_widget()
        self.init_ana_widget()
        self.gwidget.addTab(self.crawl_widget, "Crawl")
        self.gwidget.addTab(self.ana_widget, "Analyze")
        self.init_triggers()
        self.running = False

    def init_crawl_widget(self):
        self.llayout = QVBoxLayout()
        self.crawl_widget.setLayout(self.llayout)
        self.log_label = QLabel("Log")
        self.log_list = QTableView()
        self.log_model = QStandardItemModel()
        self.log_model.setColumnCount(3)
        self.log_model.setHorizontalHeaderLabels(["Status", "Time", "Message"])
        self.log_list.setModel(self.log_model)
        self.log_list.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)
        self.log_list.horizontalHeader().setSectionResizeMode(
            0, QHeaderView.ResizeToContents)
        self.log_list.horizontalHeader().setSectionResizeMode(
            1, QHeaderView.ResizeToContents)
        self.log_list.horizontalHeader().setSectionResizeMode(
            2, QHeaderView.ResizeToContents)
        log_widget = QWidget()
        log_layout = QVBoxLayout()
        log_layout.addWidget(self.log_label)
        log_layout.addWidget(self.log_list)
        log_widget.setLayout(log_layout)
        self.rule_label = QLabel("Rule")
        self.rule_edit = QTextEdit()
        rule_widget = QWidget()
        rule_layout = QVBoxLayout()
        rule_layout.addWidget(self.rule_label)
        rule_layout.addWidget(self.rule_edit)
        rule_widget.setLayout(rule_layout)
        self.crawl_button = QPushButton('Crawl')
        self.llayout.addWidget(log_widget)
        self.llayout.addWidget(rule_widget)
        self.llayout.addWidget(self.crawl_button)
        self.llayout.setStretch(0, 15)
        self.llayout.setStretch(1, 6)
        self.llayout.setStretch(2, 1)

    def init_ana_widget(self):
        self.rlayout = QHBoxLayout()
        self.ana_widget.setLayout(self.rlayout)
        self.fig = Figure()
        self.canvas = FigureCanvas(self.fig)
        self.canvas_label = QLabel("Result")
        canvas_widget = QWidget()
        canvas_layout = QVBoxLayout()
        canvas_widget.setLayout(canvas_layout)
        canvas_layout.addWidget(self.canvas_label)
        canvas_layout.addWidget(self.canvas)
        canvas_layout.setStretch(0, 1)
        canvas_layout.setStretch(1, 20)

        self.tracklist_panel = QWidget()
        self.tracklist_layout = QVBoxLayout()
        self.tracklist_panel.setLayout(self.tracklist_layout)
        self.init_topic_tracklist()
        self.init_weibo_tracklist()
        self.tracklist_layout.addWidget(self.topic_tracklist_widget)
        self.tracklist_layout.addWidget(self.weibo_tracklist_widget)
        self.rlayout.addWidget(self.tracklist_panel)
        self.rlayout.addWidget(canvas_widget)
        cfg = self.scheduler.load_config()
        for topic_name in cfg['topic_tracklist']:
            self.topic_tracklist_model.appendRow(QStandardItem(topic_name))
        for weibo_id in cfg["weibo_id_tracklist"]:
            self.weibo_tracklist_model.appendRow(QStandardItem(str(weibo_id)))

    def init_topic_tracklist(self):
        self.topic_tracklist = QListView()
        self.topic_tracklist_label = QLabel("Topic Track List")
        self.topic_tracklist_model = QStandardItemModel()
        self.topic_tracklist.setModel(self.topic_tracklist_model)
        topic_tracklist_buttons = QWidget()
        topic_tracklist_buttons_layout = QHBoxLayout()
        topic_tracklist_buttons_layout.setSpacing(0)
        topic_tracklist_buttons_layout.setContentsMargins(0, 0, 0, 0)
        topic_tracklist_buttons.setLayout(topic_tracklist_buttons_layout)
        self.topic_tracklist_add_button = QPushButton("+")
        self.topic_tracklist_del_button = QPushButton("-")
        self.topic_tracklist_conf_button = QPushButton("confirm")
        self.topic_analyze_button = QPushButton("analyze")
        topic_tracklist_buttons_layout.addWidget(
            self.topic_tracklist_add_button)
        topic_tracklist_buttons_layout.addWidget(
            self.topic_tracklist_del_button)
        topic_tracklist_buttons_layout.addStretch(20)
        topic_tracklist_buttons_layout.addWidget(
            self.topic_tracklist_conf_button)
        topic_tracklist_buttons_layout.addWidget(self.topic_analyze_button)
        topic_tracklist_buttons_layout.setStretch(0, 6)
        topic_tracklist_buttons_layout.setStretch(1, 6)
        topic_tracklist_buttons_layout.setStretch(2, 6)
        topic_tracklist_buttons_layout.setStretch(3, 6)
        self.topic_tracklist_widget = QWidget()
        topic_tracklist_layout = QVBoxLayout()
        self.topic_tracklist_widget.setLayout(topic_tracklist_layout)
        topic_tracklist_layout.addWidget(self.topic_tracklist_label)
        topic_tracklist_layout.addWidget(self.topic_tracklist)
        topic_tracklist_layout.addWidget(topic_tracklist_buttons)

    def init_weibo_tracklist(self):
        self.weibo_tracklist = QListView()
        self.weibo_tracklist_label = QLabel("Weibo Track List")
        self.weibo_tracklist_model = QStandardItemModel()
        self.weibo_tracklist.setModel(self.weibo_tracklist_model)
        weibo_tracklist_buttons = QWidget()
        weibo_tracklist_buttons_layout = QHBoxLayout()
        weibo_tracklist_buttons_layout.setSpacing(0)
        weibo_tracklist_buttons_layout.setContentsMargins(0, 0, 0, 0)
        weibo_tracklist_buttons.setLayout(weibo_tracklist_buttons_layout)
        self.weibo_tracklist_add_button = QPushButton("+")
        self.weibo_tracklist_del_button = QPushButton("-")
        self.weibo_tracklist_conf_button = QPushButton("confirm")
        self.weibo_analyze_button = QPushButton("analyze")
        weibo_tracklist_buttons_layout.addWidget(
            self.weibo_tracklist_add_button)
        weibo_tracklist_buttons_layout.addWidget(
            self.weibo_tracklist_del_button)
        weibo_tracklist_buttons_layout.addStretch(20)
        weibo_tracklist_buttons_layout.addWidget(
            self.weibo_tracklist_conf_button)
        weibo_tracklist_buttons_layout.addWidget(self.weibo_analyze_button)
        weibo_tracklist_buttons_layout.setStretch(0, 6)
        weibo_tracklist_buttons_layout.setStretch(1, 6)
        weibo_tracklist_buttons_layout.setStretch(2, 6)
        weibo_tracklist_buttons_layout.setStretch(3, 6)

        self.weibo_sentiment_checkbox = QCheckBox("Comment Sentimnet")
        weibo_analyze_options = QWidget()
        weibo_analyze_options_layout = QHBoxLayout()
        weibo_analyze_options.setLayout(weibo_analyze_options_layout)
        weibo_analyze_options_layout.addWidget(self.weibo_sentiment_checkbox)

        self.weibo_tracklist_widget = QWidget()
        weibo_tracklist_layout = QVBoxLayout()
        self.weibo_tracklist_widget.setLayout(weibo_tracklist_layout)
        weibo_tracklist_layout.addWidget(self.weibo_tracklist_label)
        weibo_tracklist_layout.addWidget(self.weibo_tracklist)
        weibo_tracklist_layout.addWidget(weibo_tracklist_buttons)
        weibo_tracklist_layout.addWidget(weibo_analyze_options)

    def init_triggers(self):
        self.crawl_button.clicked.connect(self.crawl_button_clicked)
        self.topic_tracklist_add_button.clicked.connect(
            self.topic_add_button_clicked)
        self.topic_tracklist_del_button.clicked.connect(
            self.topic_del_button_clicked)
        self.topic_tracklist_conf_button.clicked.connect(
            self.topic_conf_button_clicked)
        self.topic_analyze_button.clicked.connect(
            self.topic_analyze_button_clicked)
        self.weibo_tracklist_add_button.clicked.connect(
            self.weibo_add_button_clicked)
        self.weibo_tracklist_del_button.clicked.connect(
            self.weibo_del_button_clicked)
        self.weibo_tracklist_conf_button.clicked.connect(
            self.weibo_conf_button_clicked)
        self.weibo_analyze_button.clicked.connect(
            self.weibo_analyze_button_clicked)

    @pyqtSlot()
    def crawl_button_clicked(self):
        rule_text = self.rule_edit.toPlainText().strip()
        if rule_text:
            try:
                rule = eval(rule_text)
                assert isinstance(rule, ReRule)
            except Exception as ex:
                QMessageBox.information(self, "Invalid Rule Syntax",
                                        '\n'.join(ex.args))
                return
            self.automaton.set_rule(rule)
        if self.scheduler_status:
            self.log("Restart Crawlers", "INFO")
        else:
            self.scheduler_status = True
            self.crawl_button.setText("Restart Crawler")
            self.log("Start Crawlers", "INFO")
        self.scheduler.terminate()
        self.scheduler.wait()
        self.scheduler.set_weibo_handler(self.handle_weibo)
        self.scheduler.set_topic_handler(self.handle_topic)
        self.scheduler.start()

    @pyqtSlot()
    def topic_analyze_button_clicked(self):
        indexes = self.topic_tracklist.selectedIndexes()
        if not indexes:
            return
        index = indexes[0]
        topic_name = self.topic_tracklist_model.item(index.row()).text()

        if not topic_name:
            return
        topic = self.analyzer.get_topic(topic_name)
        if not topic:
            return
        topic_heat = self.analyzer.get_topic_heat(topic)
        self.fig.clear()
        ax = self.fig.add_subplot(111)
        times = list(map(lambda x: x[0], topic_heat))
        heats = list(map(lambda x: x[1], topic_heat))
        ax.plot(times, heats)
        # ax.set_title(topic_name, fontproperties=self.gfont)
        self.fig.autofmt_xdate()
        self.canvas.draw()

    @pyqtSlot()
    def weibo_analyze_button_clicked(self):
        indexes = self.weibo_tracklist.selectedIndexes()
        if not indexes:
            return
        index = indexes[0]
        weibo_id = self.weibo_tracklist_model.item(index.row()).text()
        if not weibo_id:
            return
        weibo_id = int(weibo_id)

        weibo = self.analyzer.get_weibo(weibo_id)
        if not weibo:
            return
        weibo_heat = self.analyzer.get_weibo_heat(weibo)
        self.fig.clear()
        ax = self.fig.add_subplot(111)
        times = list(map(lambda x: x[0], weibo_heat))
        heats = list(map(lambda x: x[1], weibo_heat))
        ax.plot(times, heats)
        topics = self.analyzer.get_weibo_topics(weibo_id)
        sentiment = self.analyzer.get_sentiment(weibo['text'])
        # ax.set_title('#'.join(topics) + "--Sentiment: {:.3f}".format(sentiment), fontproperties=self.gfont)
        self.fig.autofmt_xdate()
        self.canvas.draw()

    @pyqtSlot()
    def topic_add_button_clicked(self):
        item = QStandardItem("")
        self.topic_tracklist_model.appendRow(item)
        self.topic_tracklist.setCurrentIndex(item.index())

    @pyqtSlot()
    def topic_del_button_clicked(self):
        index = self.topic_tracklist.selectedIndexes()[0]
        self.topic_tracklist_model.removeRow(index.row())
        if self.topic_tracklist_model.rowCount():
            self.topic_tracklist.setCurrentIndex(
                self.topic_tracklist_model.index(0, 0))

    @pyqtSlot()
    def topic_conf_button_clicked(self):
        topics = [
            self.topic_tracklist_model.item(idx).text()
            for idx in range(self.topic_tracklist_model.rowCount())
        ]
        topic_tracklist = ','.join(topics)
        self.scheduler.config.set("TopicSpider", "topic_tracklist",
                                  topic_tracklist)
        with open("config.ini", "w") as fp:
            self.scheduler.config.write(fp)

    @pyqtSlot()
    def weibo_add_button_clicked(self):
        item = QStandardItem("")
        self.weibo_tracklist_model.appendRow(item)
        self.weibo_tracklist.setCurrentIndex(item.index())

    @pyqtSlot()
    def weibo_del_button_clicked(self):
        index = self.weibo_tracklist.selectedIndexes()[0]
        self.weibo_tracklist_model.removeRow(index.row())
        if self.weibo_tracklist_model.rowCount():
            self.weibo_tracklist.setCurrentIndex(
                self.weibo_tracklist_model.index(0, 0))

    @pyqtSlot()
    def weibo_conf_button_clicked(self):
        weibo_ids = [
            self.weibo_tracklist_model.item(idx).text()
            for idx in range(self.weibo_tracklist_model.rowCount())
        ]
        weibo_tracklist = ','.join(weibo_ids)
        self.scheduler.config.set("WeiboSpider", "weibo_id_tracklist",
                                  weibo_tracklist)
        with open("config.ini", "w") as fp:
            self.scheduler.config.write(fp)

    def handle_weibo(self, weibo):
        self.dbconn.process_weibo(weibo)
        if self.automaton.match(weibo.text):
            msg = "Matched Weibo {}: {}".format(weibo.weibo_id,
                                                repr(weibo.text))
            self.log(msg, "WARNING")
            self.handle_matched_weibo(weibo)
        else:
            msg = "Process Weibo {}".format(weibo.weibo_id)
            self.log(msg, "NORMAL")

    def handle_matched_weibo(self, weibo):
        reason = '匹配敏感关键字规则\n' + self.rule_edit.toPlainText()
        if self.accuser.accuse_weibo(weibo, reason):
            msg = "Accuse weibo {}".format(weibo.weibo_id)
            self.log(msg, "INFO")

    def handle_topic(self, topic):
        self.dbconn.process_topic(topic)
        msg = "Process Topic {}".format(repr(topic.name))
        self.log(msg, "NORMAL")

    def log(self, msg, status_str="INFO"):
        time_str = datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
        self.log_model.appendRow([
            QStandardItem(status_str),
            QStandardItem(time_str),
            QStandardItem(msg)
        ])
class VistaListaAttrezzatura(QWidget):

    def __init__(self, callback):
        super(VistaListaAttrezzatura, self).__init__()

        # Attributi
        self.controller_lista_attrezzatura = ControllerListaAttrezzatura()
        self.callback = callback
        self.layout_verticale1 = QVBoxLayout()
        self.layout_orizzontale = QHBoxLayout()
        self.layout_verticale2 = QVBoxLayout()

        # Sfondo
        self.show_background("LISTA ATTREZZATURA")

        self.layout_verticale1.addSpacerItem(QSpacerItem(0, 200))

        self.layout_orizzontale.addSpacerItem(QSpacerItem(100, 0))

        # Lista
        self.vista_lista = QListView()

        label = self.aggiorna()

        self.layout_orizzontale.addWidget(label)

        self.layout_orizzontale.addSpacerItem(QSpacerItem(1000, 0))

        # Pulsanti Apri e Indietro allineati
        self.show_pulsantiera()

        # Spaziatura
        self.layout_orizzontale.addSpacerItem(QSpacerItem(150, 0))
        self.layout_verticale1.addLayout(self.layout_orizzontale)

        if self.controller_lista_attrezzatura.get_lista_filtrata() == []:
            self.layout_verticale1.addSpacerItem(QSpacerItem(0, 350))
        else:
            self.layout_verticale1.addSpacerItem(QSpacerItem(0, 150))

        # Impostazione layout totale
        self.setLayout(self.layout_verticale1)
        self.setWindowTitle('Lista Attrezzatura')

    # Metodo che, collegato al pulsante "INDIETRO", permette di tornare alla vista precedente
    def indietro(self):
        self.callback()
        self.controller_lista_attrezzatura.salva_dati()
        self.close()

    # Creazione, settaggio e stile dello sfondo
    def show_background(self, stringa):
        # Sfondo
        self.setFixedWidth(QDesktopWidget().width())
        self.setFixedHeight(QDesktopWidget().height())
        back_img = QImage("Data/Immagini/imagine.jpg")
        img = back_img.scaled(self.width(), self.height())
        palette = QPalette()
        palette.setBrush(10, QBrush(img))
        self.setPalette(palette)

        # Titolo
        titolo = QLabel(stringa)
        titolo.setAlignment(Qt.AlignCenter)
        titolo.setFont(QFont('Times New Roman', 60))
        self.layout_verticale1.addSpacerItem(QSpacerItem(0, 50, QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.layout_verticale1.addWidget(titolo)
        self.layout_verticale1.addSpacerItem(QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed))

    # Creazione, settaggio e stile pulsanti
    def show_pulsantiera(self):
        if not self.controller_lista_attrezzatura.get_lista_filtrata() == []:
            pulsante_apri = QPushButton("Apri")
            pulsante_apri.setFont(QFont('Times New Roman', 20, 100, True))
            pulsante_apri.setStyleSheet('QPushButton {background-color: orange; color: black;}')
            pulsante_apri.setFixedSize(250, 100)
            pulsante_apri.clicked.connect(self.attrezzatura_selezionata)
            self.layout_verticale2.addWidget(pulsante_apri)

        # Pulsante indietro
        pulsante_indietro = QPushButton("Indietro")
        pulsante_indietro.setFont(QFont('Times New Roman', 20, 100, True))
        pulsante_indietro.setStyleSheet('QPushButton {background-color: orange; color: black;}')
        pulsante_indietro.setFixedSize(250, 100)
        pulsante_indietro.clicked.connect(self.indietro)
        self.layout_verticale2.addWidget(pulsante_indietro)
        self.layout_verticale2.addSpacerItem(QSpacerItem(0, 50))
        self.layout_orizzontale.addLayout(self.layout_verticale2)

    # Metodo che gestisce la situazione in cui al click del pulsante "APRI", non venga selezionato niente
    # con gestione delle eccezioni
    def attrezzatura_selezionata(self):
        try:
            selezionata = self.vista_lista.selectedIndexes()[0].row()
            lista = self.controller_lista_attrezzatura.get_lista_filtrata()
            attrezzatura = lista[selezionata]
            self.vista_attrezzatura = VistaAttrezzatura(self.showFullScreen,
                                                        attrezzatura,
                                                        self.controller_lista_attrezzatura.prenota_attrezzatura,
                                                        self.aggiorna)
            self.vista_attrezzatura.showFullScreen()
        except IndexError:
            QMessageBox.information(self, 'Attenzione!', 'Non hai selezionato nessuna attrezzatura.', QMessageBox.Ok,
                                    QMessageBox.Ok)
        except:
            QMessageBox.critical(self, 'Errore!', 'Qualcosa è andato storto, riprova più tardi.', QMessageBox.Ok,
                                 QMessageBox.Ok)

    # Metodo che aggiorna la finestra
    def aggiorna(self):
        vista_lista_model = QStandardItemModel(self.vista_lista)
        if self.controller_lista_attrezzatura.get_lista_filtrata() == []:
            label = QLabel(" Non ci sono oggetti disponibili adatti\nalle tue caratteristiche")
            label.setAlignment(Qt.AlignCenter)
            label.setFont(QFont('Times New Roman', 25, 100))
            label.setStyleSheet('QLabel {background-color: lightBlue; color: black;}')
            label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum)
            self.layout_orizzontale.addSpacerItem(QSpacerItem(0, 50))
            return label

        else:
            for attrezzatura in self.controller_lista_attrezzatura.get_lista_filtrata():
                item = QStandardItem()
                nome = attrezzatura.get_nome()
                item.setText(nome)
                item.setEditable(False)
                item.setFont(QFont('Times New Roman', 30, 100))
                vista_lista_model.appendRow(item)
            self.vista_lista.setModel(vista_lista_model)
            return self.vista_lista
Exemple #30
0
 def closeEvent(self, e):
     logger.debug('closeEvent')
     QListView.closeEvent(self, e)
Exemple #31
0
    def __init__(self):
        super().__init__()
        self.setLayout(QVBoxLayout())
        self.setWindowTitle(i18n("Export Settings"))
        buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

        buttons.accepted.connect(self.accept)
        buttons.rejected.connect(self.reject)
        mainWidget = QTabWidget()
        self.layout().addWidget(mainWidget)
        self.layout().addWidget(buttons)

        # Set basic crop settings
        # Set which layers to remove before export.
        mainExportSettings = QWidget()
        mainExportSettings.setLayout(QVBoxLayout())
        groupExportCrop = QGroupBox(i18n("Crop Settings"))
        formCrop = QFormLayout()
        groupExportCrop.setLayout(formCrop)
        self.chk_toOutmostGuides = QCheckBox(i18n("Crop to outmost guides"))
        self.chk_toOutmostGuides.setChecked(True)
        self.chk_toOutmostGuides.setToolTip(i18n("This will crop to the outmost guides if possible and otherwise use the underlying crop settings."))
        formCrop.addRow("", self.chk_toOutmostGuides)
        btn_fromSelection = QPushButton(i18n("Set Margins from Active Selection"))
        btn_fromSelection.clicked.connect(self.slot_set_margin_from_selection)
        # This doesn't work.
        formCrop.addRow("", btn_fromSelection)
        self.spn_marginLeft = QSpinBox()
        self.spn_marginLeft.setMaximum(99999)
        self.spn_marginLeft.setSuffix(" px")
        formCrop.addRow(i18n("Left:"), self.spn_marginLeft)
        self.spn_marginTop = QSpinBox()
        self.spn_marginTop.setMaximum(99999)
        self.spn_marginTop.setSuffix(" px")
        formCrop.addRow(i18n("Top:"), self.spn_marginTop)
        self.spn_marginRight = QSpinBox()
        self.spn_marginRight.setMaximum(99999)
        self.spn_marginRight.setSuffix(" px")
        formCrop.addRow(i18n("Right:"), self.spn_marginRight)
        self.spn_marginBottom = QSpinBox()
        self.spn_marginBottom.setMaximum(99999)
        self.spn_marginBottom.setSuffix(" px")
        formCrop.addRow(i18n("Bottom:"), self.spn_marginBottom)
        groupExportLayers = QGroupBox(i18n("Layers"))
        formLayers = QFormLayout()
        groupExportLayers.setLayout(formLayers)
        self.cmbLabelsRemove = labelSelector()
        formLayers.addRow(i18n("Label for removal:"), self.cmbLabelsRemove)
        self.ln_text_layer_name = QLineEdit()
        self.ln_text_layer_name.setToolTip(i18n("These are keywords that can be used to identify text layers. A layer only needs to contain the keyword to be recognized. Keywords should be comma separated."))
        self.ln_panel_layer_name = QLineEdit()
        self.ln_panel_layer_name.setToolTip(i18n("These are keywords that can be used to identify panel layers. A layer only needs to contain the keyword to be recognized. Keywords should be comma separated."))
        formLayers.addRow(i18n("Text Layer Key:"), self.ln_text_layer_name)
        formLayers.addRow(i18n("Panel Layer Key:"), self.ln_panel_layer_name)

        mainExportSettings.layout().addWidget(groupExportCrop)
        mainExportSettings.layout().addWidget(groupExportLayers)
        mainWidget.addTab(mainExportSettings, i18n("General"))

        # CBZ, crop, resize, which metadata to add.
        CBZexportSettings = QWidget()
        CBZexportSettings.setLayout(QVBoxLayout())
        self.CBZactive = QCheckBox(i18n("Export to CBZ"))
        CBZexportSettings.layout().addWidget(self.CBZactive)
        self.CBZgroupResize = comic_export_resize_widget("CBZ")
        CBZexportSettings.layout().addWidget(self.CBZgroupResize)
        self.CBZactive.clicked.connect(self.CBZgroupResize.setEnabled)
        CBZgroupMeta = QGroupBox(i18n("Metadata to Add"))
        # CBZexportSettings.layout().addWidget(CBZgroupMeta)
        CBZgroupMeta.setLayout(QFormLayout())

        mainWidget.addTab(CBZexportSettings, i18n("CBZ"))

        # ACBF, crop, resize, creator name, version history, panel layer, text layers.
        ACBFExportSettings = QWidget()
        ACBFform = QFormLayout()
        ACBFExportSettings.setLayout(QVBoxLayout())
        ACBFdocInfo = QGroupBox()
        ACBFdocInfo.setTitle(i18n("ACBF Document Info"))
        ACBFdocInfo.setLayout(ACBFform)
        self.lnACBFSource = QLineEdit()
        self.lnACBFSource.setToolTip(i18n("Whether the acbf file is an adaption of an existing source, and if so, how to find information about that source. So for example, for an adapted webcomic, the official website url should go here."))
        self.lnACBFID = QLabel()
        self.lnACBFID.setToolTip(i18n("By default this will be filled with a generated universal unique identifier. The ID by itself is merely so that comic book library management programs can figure out if this particular comic is already in their database and whether it has been rated. Of course, the UUID can be changed into something else by manually changing the JSON, but this is advanced usage."))
        self.spnACBFVersion = QSpinBox()
        self.ACBFhistoryModel = QStandardItemModel()
        acbfHistoryList = QListView()
        acbfHistoryList.setModel(self.ACBFhistoryModel)
        btn_add_history = QPushButton(i18n("Add History Entry"))
        btn_add_history.clicked.connect(self.slot_add_history_item)
        self.chkIncludeTranslatorComments = QCheckBox()
        self.chkIncludeTranslatorComments.setText(i18n("Include translator's comments"))
        self.chkIncludeTranslatorComments.setToolTip(i18n("A PO file can contain translator's comments. If this is checked, the translations comments will be added as references into the ACBF file."))
        self.lnTranslatorHeader = QLineEdit()

        ACBFform.addRow(i18n("Source:"), self.lnACBFSource)
        ACBFform.addRow(i18n("ACBF UID:"), self.lnACBFID)
        ACBFform.addRow(i18n("Version:"), self.spnACBFVersion)
        ACBFform.addRow(i18n("Version history:"), acbfHistoryList)
        ACBFform.addRow("", btn_add_history)
        ACBFform.addRow("", self.chkIncludeTranslatorComments)
        ACBFform.addRow(i18n("Translator header:"), self.lnTranslatorHeader)

        ACBFAuthorInfo = QWidget()
        acbfAVbox = QVBoxLayout(ACBFAuthorInfo)
        infoLabel = QLabel(i18n("The people responsible for the generation of the CBZ/ACBF files."))
        infoLabel.setWordWrap(True)
        ACBFAuthorInfo.layout().addWidget(infoLabel)
        self.ACBFauthorModel = QStandardItemModel(0, 6)
        labels = [i18n("Nick Name"), i18n("Given Name"), i18n("Middle Name"), i18n("Family Name"), i18n("Email"), i18n("Homepage")]
        self.ACBFauthorModel.setHorizontalHeaderLabels(labels)
        self.ACBFauthorTable = QTableView()
        acbfAVbox.addWidget(self.ACBFauthorTable)
        self.ACBFauthorTable.setModel(self.ACBFauthorModel)
        self.ACBFauthorTable.verticalHeader().setDragEnabled(True)
        self.ACBFauthorTable.verticalHeader().setDropIndicatorShown(True)
        self.ACBFauthorTable.verticalHeader().setSectionsMovable(True)
        self.ACBFauthorTable.verticalHeader().sectionMoved.connect(self.slot_reset_author_row_visual)
        AuthorButtons = QHBoxLayout()
        btn_add_author = QPushButton(i18n("Add Author"))
        btn_add_author.clicked.connect(self.slot_add_author)
        AuthorButtons.addWidget(btn_add_author)
        btn_remove_author = QPushButton(i18n("Remove Author"))
        btn_remove_author.clicked.connect(self.slot_remove_author)
        AuthorButtons.addWidget(btn_remove_author)
        acbfAVbox.addLayout(AuthorButtons)
        
        ACBFStyle = QWidget()
        ACBFStyle.setLayout(QHBoxLayout())
        self.ACBFStylesModel = QStandardItemModel()
        self.ACBFStyleClass = QListView()
        self.ACBFStyleClass.setModel(self.ACBFStylesModel)
        ACBFStyle.layout().addWidget(self.ACBFStyleClass)
        ACBFStyleEdit = QWidget()
        ACBFStyleEditVB = QVBoxLayout(ACBFStyleEdit)
        self.ACBFuseFont = QCheckBox(i18n("Use font"))
        self.ACBFFontList = QListView()
        self.ACBFFontList.setItemDelegate(font_list_delegate())
        self.ACBFuseFont.toggled.connect(self.font_slot_enable_font_view)
        self.ACBFFontListModel = QStandardItemModel()
        self.ACBFFontListModel.rowsRemoved.connect(self.slot_font_current_style)
        self.ACBFFontListModel.itemChanged.connect(self.slot_font_current_style)
        self.btnAcbfAddFont = QPushButton()
        self.btnAcbfAddFont.setIcon(Application.icon("list-add"))
        self.btnAcbfAddFont.clicked.connect(self.font_slot_add_font)
        self.btn_acbf_remove_font = QPushButton()
        self.btn_acbf_remove_font.setIcon(Application.icon("edit-delete"))
        self.btn_acbf_remove_font.clicked.connect(self.font_slot_remove_font)
        self.ACBFFontList.setModel(self.ACBFFontListModel)
        self.ACBFdefaultFont = QComboBox()
        self.ACBFdefaultFont.addItems(["sans-serif", "serif", "monospace", "cursive", "fantasy"])
        acbfFontButtons = QHBoxLayout()
        acbfFontButtons.addWidget(self.btnAcbfAddFont)
        acbfFontButtons.addWidget(self.btn_acbf_remove_font)
        self.ACBFBold = QCheckBox(i18n("Bold"))
        self.ACBFItal = QCheckBox(i18n("Italic"))
        self.ACBFStyleClass.clicked.connect(self.slot_set_style)
        self.ACBFStyleClass.selectionModel().selectionChanged.connect(self.slot_set_style)
        self.ACBFStylesModel.itemChanged.connect(self.slot_set_style)
        self.ACBFBold.toggled.connect(self.slot_font_current_style)
        self.ACBFItal.toggled.connect(self.slot_font_current_style)
        colorWidget = QGroupBox(self)
        colorWidget.setTitle(i18n("Text Colors"))
        colorWidget.setLayout(QVBoxLayout())
        self.regularColor = QColorDialog()
        self.invertedColor = QColorDialog()
        self.btn_acbfRegColor = QPushButton(i18n("Regular Text"), self)
        self.btn_acbfRegColor.clicked.connect(self.slot_change_regular_color)
        self.btn_acbfInvColor = QPushButton(i18n("Inverted Text"), self)
        self.btn_acbfInvColor.clicked.connect(self.slot_change_inverted_color)
        colorWidget.layout().addWidget(self.btn_acbfRegColor)
        colorWidget.layout().addWidget(self.btn_acbfInvColor)
        ACBFStyleEditVB.addWidget(colorWidget)
        ACBFStyleEditVB.addWidget(self.ACBFuseFont)
        ACBFStyleEditVB.addWidget(self.ACBFFontList)
        ACBFStyleEditVB.addLayout(acbfFontButtons)
        ACBFStyleEditVB.addWidget(self.ACBFdefaultFont)
        ACBFStyleEditVB.addWidget(self.ACBFBold)
        ACBFStyleEditVB.addWidget(self.ACBFItal)
        ACBFStyleEditVB.addStretch()
        ACBFStyle.layout().addWidget(ACBFStyleEdit)

        ACBFTabwidget = QTabWidget()
        ACBFTabwidget.addTab(ACBFdocInfo, i18n("Document Info"))
        ACBFTabwidget.addTab(ACBFAuthorInfo, i18n("Author Info"))
        ACBFTabwidget.addTab(ACBFStyle, i18n("Style Sheet"))
        ACBFExportSettings.layout().addWidget(ACBFTabwidget)
        mainWidget.addTab(ACBFExportSettings, i18n("ACBF"))

        # Epub export, crop, resize, other questions.
        EPUBexportSettings = QWidget()
        EPUBexportSettings.setLayout(QVBoxLayout())
        self.EPUBactive = QCheckBox(i18n("Export to EPUB"))
        EPUBexportSettings.layout().addWidget(self.EPUBactive)
        self.EPUBgroupResize = comic_export_resize_widget("EPUB")
        EPUBexportSettings.layout().addWidget(self.EPUBgroupResize)
        self.EPUBactive.clicked.connect(self.EPUBgroupResize.setEnabled)
        mainWidget.addTab(EPUBexportSettings, i18n("EPUB"))

        # For Print. Crop, no resize.
        TIFFExportSettings = QWidget()
        TIFFExportSettings.setLayout(QVBoxLayout())
        self.TIFFactive = QCheckBox(i18n("Export to TIFF"))
        TIFFExportSettings.layout().addWidget(self.TIFFactive)
        self.TIFFgroupResize = comic_export_resize_widget("TIFF")
        TIFFExportSettings.layout().addWidget(self.TIFFgroupResize)
        self.TIFFactive.clicked.connect(self.TIFFgroupResize.setEnabled)
        mainWidget.addTab(TIFFExportSettings, i18n("TIFF"))
Exemple #32
0
    def initUI(self):
        
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        #a_combobox = QWidgets.QComboBox()
        comboA = QtWidgets.QComboBox(self)
        comboB = QtWidgets.QComboBox(self)
        #comboA.setGeometry(QtCore.QRect(400, 180, 200, 50))
        comboA.setGeometry(400, 200, 150, 80)
        comboB.setGeometry(20, 300, 220, 40)
        layoutA = QtWidgets.QVBoxLayout(comboA)
        layoutB = QtWidgets.QVBoxLayout(comboB)

        comboA.setStyleSheet("font: 20px; border-style: outset; border-width:0px ; border-color: rbg(128,128,128); color:rgb(0,0,0); background-color: rgb(255,255,255);");
        comboB.setStyleSheet("font: 20px; border-style: outset; border-width:0px ; border-color: rbg(128,128,128); color:rgb(0,0,0); background-color: rgb(255,255,255);");
        comboA.addItem("選擇連線硬體")
        comboA.addItem("Arduino")
        comboA.addItem("Circuit")
        comboA.addItem("ESP-8266")
        comboA.addItem("Picoboard")
        comboA.addItem("Raspberry Pi")
        comboB.addItem("選擇燒錄硬體")
        comboB.addItem("Arduino Uno")
        comboB.addItem("ESP-8266")
        comboB.addItem("Circuit")
        ##預設值
        #comboA.setCurrentIndex(0)
         
        #print (comboA.currentText())
        comboA.activated.connect(self.comboA_selectionchange)
        comboB.activated.connect(self.comboB_selectionchange)
        layoutA.addWidget(comboA)
        layoutB.addWidget(comboB)

        #label
        l_v = QLabel('v:'+version,self) #//版本號
        l_v.resize(80,25)
        l_v.setStyleSheet("font: 12px; border-style: outset; color:rgb(255,0,255);");
        l_v.move(20,20)

        l_A = QLabel("連接硬體功能",self)
        l_A.setAlignment(QtCore.Qt.AlignCenter)
        l_A.resize(150,35)
        l_A.setStyleSheet("font: 20px;text-align:center; color:rgb(255,255,255); background-color: rgb(233,0,125);");
        l_A.move(400,300)
        l_B = QLabel('',self)
        l_B.setPixmap(self.pixmap)
        l_B.resize(300,160)
        l_B.move(350,10)

        l_C =QLabel('燒錄韌體',self)
        l_C.move(250,300)
        l_C.setAlignment(QtCore.Qt.AlignCenter) #//*置中*/
        l_C.resize(120,35)
        l_C.setStyleSheet("font: 20px;text-align:center; color:rgb(255,255,255); background-color: rgb(233,0,125);");

        l_D =QLabel('開始創作',self)
        l_D.setAlignment(QtCore.Qt.AlignLeft)
        l_D.resize(120,35)
        l_D.setStyleSheet("font: 16px; border-style: outset; border-width:0px ; border-color: rbg(128,128,128); color:rgb(174, 182, 191); ");
        l_D.move(600,175)

        l_E =QLabel('選擇硬體',self)
        l_E.setAlignment(QtCore.Qt.AlignLeft)
        l_E.resize(120,35)
        l_E.setStyleSheet("font: 16px; border-style: outset; border-width:0px ; border-color: rbg(128,128,128); color:rgb(174, 182, 191); ");
        l_E.move(400,175)

        l_F =QLabel('確認硬體',self)
        l_F.setAlignment(QtCore.Qt.AlignLeft)
        l_F.resize(120,35)
        l_F.setStyleSheet("font: 16px; border-style: outset; border-width:0px ; border-color: rbg(128,128,128); color:rgb(174, 182, 191); ");
        l_F.move(20,175)


        b_port = QPushButton("連接埠",self)
        b_port.resize(120,35)
        b_port.setStyleSheet("font: 20px;text-align:center; color:rgb(255,255,255); background-color: rgb(233,0,125);");
        b_port.setToolTip("偵測設備port")
        b_port.move(250,200)
        b_port.clicked.connect(self.b_port_clicked)

        
        #l_B = QLabel("設備port",self)
        #l_B.move(164,10)
        #https://blog.csdn.net/jia666666/article/details/81624550
        listviewA = QListView(self)
        listviewA.setStyleSheet("font: 20px;  background-color: rgb(255,255,255);");
        listviewA.resize(220,80)
        listviewA.move(20,200)
        slm=QStringListModel()

        ##port
        self.qList=serial_ports()
        ##listviewA.qList=['aaaa','bbbb','cccc']
        slm.setStringList(self.qList)
        listviewA.setModel(slm)
        listviewA.clicked.connect(self.listviewA_clicked)

        b_class = QPushButton("OSEP課程資源",self)
        b_class.setStyleSheet("font: 20px;text-align:center; color:rgb(255,255,255); background-color: rgb(233,0,125);");
        b_class.setToolTip("瀏覽器開啟OSEP課程資源")
        b_class.resize(150,35)
        b_class.move(600,200)
        b_class.clicked.connect(self.b_class_clicked)

        b_url = QPushButton("OSEP線上操作",self)
        b_url.setStyleSheet("font: 20px;text-align:center; color:rgb(255,255,255); background-color: rgb(233,0,125);");
        b_url.setToolTip("瀏覽器開啟OSEP線上操作網站")
        b_url.resize(150,35)
        b_url.move(600,250)
        b_url.clicked.connect(self.b_url_clicked)

        b_offline = QPushButton("OSEP離線操作",self)
        b_offline.resize(150,35)
        b_offline.setStyleSheet("font: 20px;text-align:center; color:rgb(128,128,128); background-color: rgb(255,255,255);");
        b_offline.setToolTip("OSEP離線操作")
        b_offline.move(600,300)
        b_offline.clicked.connect(self.b_offline_clicked)

        b_clear = QPushButton("重置OSEP",self)
        b_clear.setToolTip("clear python.exe")
        b_clear.resize(150,35)
        b_clear.setStyleSheet("font: 20px;text-align:center; color:rgb(128,128,128); background-color: rgb(255,255,255);");
        b_clear.move(600,65)
        b_clear.clicked.connect(self.b_clear_clicked)

        b_about = QPushButton("關於OSEP",self)
        b_about.setToolTip("關於OSEP")
        b_about.resize(150,35)
        b_about.setStyleSheet("font: 20px; color: rgb(128,128,128);  text-align::center; ");
        b_about.move(600,20)
        b_about.clicked.connect(self.b_about_clicked)
        
        self.show()
Exemple #33
0
class Main(QWidget):
    def __init__(self, user, width=160, height=660):
        super().__init__()
        self.user = user

        self.lv = QListView(self)
        self.lv.setViewMode(QListView.ListMode)
        self.lv.setIconSize(QSize(30, 30))
        # self.lb.setGridSize(QSize(30,30))
        self.lv.resize(width, height)
        self.lv.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.lv.setResizeMode(QListView.Adjust)
        self.lv_model = QStandardItemModel()
        self.lv.setModel(self.lv_model)
        # self.lb_model.appendRow(QStandardItem(QIcon("./client/image/man.png"), "普通员工A"))
        # self.lb_model.appendRow(QStandardItem(QIcon("./client/image/woman.png"), "普通员工B"))
        self.lv.doubleClicked.connect(self.lv_clicked)

        MsgWorker().do_update = self.do_update
        self.query_all_users()

    def query_all_users(self):
        MsgWorker().send_msg(msg_lib.build_get_all_users_msg())

    def do_update(self, all_users):
        self.all_users = all_users
        for user in self.all_users:
            self.lv_model.appendRow(
                QStandardItem(QIcon("./client/image/man.png"), user.nick_name))

            # self.lb.insert(tk.END, user.nick_name)

    def lv_clicked(self, model_index):
        user = self.all_users[model_index.row()]
        self.chat_to({'mode': 'user', 'data': user})

    def send(self):
        pass
        # val = self.sdTxt.get('1.0', tk.END)
        # MsgWorker().send_msg(val.encode())
        # self.rcTxt.tag_config("tag_me", foreground="green")
        # self.rcTxt.insert(tk.INSERT, '我:%s'%val, ("tag_me"))

    chat_form = None

    def chat_to(self, user):
        if not self.chat_form:
            self.chat_form = Chat()
            self.chat_form.after_close = self.do_after_close
            self.chat_form.show()

        self.chat_form.chat_to(user)
        self.chat_form.setWindowState(self.windowState()
                                      & ~QtCore.Qt.WindowMinimized
                                      | QtCore.Qt.WindowActive)
        self.chat_form.raise_()
        self.chat_form.activateWindow()

    def do_after_close(self):
        self.chat_form = None

    def closeEvent(self, event):
        if self.chat_form:
            self.chat_form.close()
        MsgWorker().send_msg(msg_lib.build_logout_msg(self.user.name))
Exemple #34
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1127, 870)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(40, 10, 711, 25))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(
            self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.horizontalLayout.addWidget(self.lineEdit_4)
        self.lineEdit_5 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.horizontalLayout.addWidget(self.lineEdit_5)
        self.lineEdit_6 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.horizontalLayout.addWidget(self.lineEdit_6)
        self.lineEdit_7 = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineEdit_7.setObjectName("lineEdit_7")
        self.horizontalLayout.addWidget(self.lineEdit_7)
        self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(70, 40, 61, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(30, 40, 31, 20))
        self.lineEdit.setMaxLength(2)
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(290, 40, 54, 12))
        self.label.setObjectName("label")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(330, 40, 31, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(380, 40, 31, 23))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(420, 40, 41, 23))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(470, 40, 41, 23))
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(530, 40, 41, 23))
        self.pushButton_7.setObjectName("pushButton_7")
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setGeometry(QtCore.QRect(590, 40, 41, 23))
        self.pushButton_8.setObjectName("pushButton_8")
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setGeometry(QtCore.QRect(650, 40, 41, 23))
        self.pushButton_9.setObjectName("pushButton_9")
        self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_10.setGeometry(QtCore.QRect(710, 40, 41, 23))
        self.pushButton_10.setObjectName("pushButton_10")
        self.pushButton_11 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_11.setGeometry(QtCore.QRect(770, 40, 41, 23))
        self.pushButton_11.setObjectName("pushButton_11")
        self.pushButton_12 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_12.setGeometry(QtCore.QRect(830, 40, 41, 23))
        self.pushButton_12.setObjectName("pushButton_12")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(890, 10, 91, 21))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setTextFormat(QtCore.Qt.PlainText)
        self.label_2.setScaledContents(False)
        self.label_2.setWordWrap(False)
        self.label_2.setObjectName("label_2")
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(290, 70, 381, 731))
        self.textBrowser.setObjectName("textBrowser")
        self.textBrowser_2 = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser_2.setGeometry(QtCore.QRect(700, 70, 391, 731))
        self.textBrowser_2.setObjectName("textBrowser_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(300, 810, 54, 12))
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(770, 10, 54, 12))
        self.label_4.setObjectName("label_4")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(190, 40, 69, 22))
        self.comboBox.setObjectName("comboBox")
        self.lineEdit_8 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_8.setGeometry(QtCore.QRect(140, 40, 31, 20))
        self.lineEdit_8.setMaxLength(1)
        self.lineEdit_8.setObjectName("lineEdit_8")
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setEnabled(True)
        self.listView.setGeometry(QtCore.QRect(30, 70, 201, 731))
        self.listView.setObjectName("listView")

        self.listModel = QStringListModel()
        listView = QListView()
        self.dds = ['无数据']
        self.listModel.setStringList(self.dds)
        self.listView.setModel(self.listModel)
        self.listView.clicked.connect(self.checkItem)

        self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_2.setGeometry(QtCore.QRect(430, 810, 69, 22))
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_3 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_3.setGeometry(QtCore.QRect(860, 810, 69, 22))
        self.comboBox_3.setObjectName("comboBox_3")
        self.listView_2 = QtWidgets.QListView(self.centralwidget)
        self.listView_2.setGeometry(QtCore.QRect(240, 70, 31, 731))
        self.listView_2.setObjectName("listView_2")

        self.listModel_2 = QStringListModel()
        self.dds_2 = ['无']
        self.listModel_2.setStringList(self.dds_2)
        self.listView_2.setModel(self.listModel_2)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1127, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.repaint)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
Exemple #35
0
 def __init__(self):
     QComboBox.__init__(self)
     listView = QListView()
     self.setView(listView)
     return
Exemple #36
0
class MDIHistory(QWidget, _HalWidgetBase):
    def __init__(self, parent=None):
        super(MDIHistory, self).__init__(parent)
        self.setMinimumSize(QSize(200, 150))    
        self.setWindowTitle("PyQt5 editor test example") 

        lay = QVBoxLayout()
        lay.setContentsMargins(0,0,0,0)
        self.setLayout(lay)

        self.list = QListView()
        self.list.setEditTriggers(QListView.NoEditTriggers)
        self.list.activated.connect(self.activated)
        self.list.setAlternatingRowColors(True)
        self.list.selectionChanged = self.selectionChanged
        self.model = QStandardItemModel(self.list)

        self.MDILine = MDILine()
        self.MDILine.soft_keyboard = False
        self.MDILine.line_up = self.line_up
        self.MDILine.line_down = self.line_down

        STATUS.connect('mdi-history-changed', self.reload)

        # add widgets
        lay.addWidget(self.list)
        lay.addWidget(self.MDILine)

        self.fp = os.path.expanduser(INFO.MDI_HISTORY_PATH)
        try:
            open(self.fp, 'r')
        except:
            open(self.fp, 'a+')
            LOG.debug('MDI History file created: {}'.format(self.fp))
        self.reload()
        self.select_row('last')

    def _hal_init(self):
        STATUS.connect('state-off', lambda w: self.setEnabled(False))
        STATUS.connect('state-estop', lambda w: self.setEnabled(False))
        STATUS.connect('interp-idle', lambda w: self.setEnabled(STATUS.machine_is_on()
                                                                and (STATUS.is_all_homed()
                                                                or INFO.NO_HOME_REQUIRED)))
        STATUS.connect('interp-run', lambda w: self.setEnabled(not STATUS.is_auto_mode()))
        STATUS.connect('all-homed', lambda w: self.setEnabled(STATUS.machine_is_on()))

    def reload(self, w=None ):
        self.model.clear()
        try:
            with open(self.fp,'r') as inputfile:
                for line in inputfile:
                    line = line.rstrip('\n')
                    item = QStandardItem(line)
                    self.model.appendRow(item)
            self.list.setModel(self.model)
            self.list.scrollToBottom()
            if self.MDILine.hasFocus():
                self.select_row('last')
        except:
            LOG.debug('File path is not valid: {}'.format(fp))

    def selectionChanged(self,old, new):
        cmd = self.getSelected()
        self.MDILine.setText(cmd)
        selectionModel = self.list.selectionModel()
        if selectionModel.hasSelection():
            self.row = selectionModel.currentIndex().row()

    def getSelected(self):
        selected_indexes = self.list.selectedIndexes()
        selected_rows = [item.row() for item in selected_indexes]
        # iterates each selected row in descending order
        for selected_row in sorted(selected_rows, reverse=True):
            text = self.model.item(selected_row).text()
            return text

    def activated(self):
        cmd = self.getSelected()
        self.MDILine.setText(cmd)
        self.MDILine.submit()
        self.select_row('down')

    def run_command(self):
        self.MDILine.submit()
        self.select_row('last')

    def select_row(self, style):
        style = style.lower()
        selectionModel = self.list.selectionModel()
        parent = QModelIndex()
        self.rows = self.model.rowCount(parent) - 1
        if style == 'last':
            self.row = self.rows
        elif style == 'up':
            if self.row > 0:
                self.row -= 1
            else:
                self.row = 0
        elif style == 'down':
            if self.row < self.rows:
                self.row += 1
            else:
                self.row = self.rows
        else:
            return
        top = self.model.index(self.row, 0, parent)
        bottom = self.model.index(self.row, 0, parent)
        selectionModel.setCurrentIndex(top, QItemSelectionModel.Select | QItemSelectionModel.Rows)
        selection = QItemSelection(top, top)
        selectionModel.clearSelection()
        selectionModel.select(selection, QItemSelectionModel.Select)

    def line_up(self):
        self.select_row('up')

    def line_down(self):
        self.select_row('down')

    #########################################################################
    # This is how designer can interact with our widget properties.
    # designer will show the pyqtProperty properties in the editor
    # it will use the get set and reset calls to do those actions
    #########################################################################

    def set_soft_keyboard(self, data):
        self.MDILine.soft_keyboard = data
    def get_soft_keyboard(self):
        return self.MDILine.soft_keyboard
    def reset_soft_keyboard(self):
        self.MDILine.soft_keyboard = False

    # designer will show these properties in this order:
    soft_keyboard_option = pyqtProperty(bool, get_soft_keyboard, set_soft_keyboard, reset_soft_keyboard)
Exemple #37
0
class VistaPrenotazioniCliente(QWidget):

    def __init__(self, email_cliente, parent=None):
        super(VistaPrenotazioniCliente, self).__init__(parent)
        self.controllore_lista_prenotazioni = ControlloreListaPrenotazioni()
        self.email_cliente = email_cliente

        self.v_layout = QVBoxLayout()

        self.label_prenotazioni = QLabel("Prenotazioni: ")
        self.label_prenotazioni.setFont(QFont("Times New Roman", 18))
        self.v_layout.addWidget(self.label_prenotazioni)

        self.lista_prenotazioni = QListView()
        self.aggiorna_dati_prenotazioni()
        self.v_layout.addWidget(self.lista_prenotazioni)

        self.h_layout = QHBoxLayout()

        self.create_button("Nuova prenotazione", self.go_nuova_prenotazione, "background-color: rgb(0, 255, 0);")
        self.create_button("Apri prenotazione", self.apri_prenotazione, "background-color: rgb(170,180,255);")
        self.create_button("Elimina prenotazione", self.conferma_elimina_prenotazione, "background-color: rgb(255,0,0);")

        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)
        self.resize(250, 500)
        self.setWindowTitle("Prenotazioni")

    #Crea un bottone con i parametri passati e lo aggiunge al layout dei bottoni
    def create_button(self, testo, comando, background_color):
        bottone = QPushButton(testo)
        bottone.setFont(QFont("Arial", 14))
        bottone.setStyleSheet(background_color)
        bottone.clicked.connect(comando)
        self.h_layout.addWidget(bottone)

    #Funzione di callback che aggiorna i dati delle prenotazioni visualizzate
    def aggiorna_dati_prenotazioni(self):
        self.modello_lista_prenotazioni = QStandardItemModel()
        self.controllore_lista_prenotazioni = ControlloreListaPrenotazioni()
        for prenotazione in self.controllore_lista_prenotazioni.get_lista_prenotazioni_cliente(self.email_cliente):
            item = QStandardItem()
            item.setText("Prenotazione del " + prenotazione.data_inizio.strftime("%d/%m/%Y") + " - " + prenotazione.data_fine.strftime("%d/%m/%Y"))
            item.setEditable(False)
            item.setFont(QFont("Arial", 16))
            self.modello_lista_prenotazioni.appendRow(item)
        self.lista_prenotazioni.setModel(self.modello_lista_prenotazioni)

    #Visualizza la finestra per creare una nuova prenotazione
    def go_nuova_prenotazione(self):
        self.vista_nuova_prenotazione = VistaNuovaPrenotazione(self.email_cliente, self.aggiorna_dati_prenotazioni)
        self.vista_nuova_prenotazione.show()

    #Viuslizza i dettagli della prenotazione selezionata, se non è stata selezionata alcuna prenotazione mostra un
    #messaggio di errore
    def apri_prenotazione(self):
        try:
            indice = self.lista_prenotazioni.selectedIndexes()[0].row()
            da_visualizzare = self.controllore_lista_prenotazioni.get_lista_prenotazioni_cliente(self.email_cliente)[indice]
        except:
            QMessageBox.critical(self, "Errore", "Seleziona la prenotazione da visualizzare", QMessageBox.Ok, QMessageBox.Ok)
            return

        self.vista_prenotazione = VistaPrenotazione(ControllorePrenotazione(da_visualizzare))
        self.vista_prenotazione.show()

    #Chiede conferma dell'eliminazione di una prenotazione, in caso affermativo la cancella
    def conferma_elimina_prenotazione(self):
        try:
            indice = self.lista_prenotazioni.selectedIndexes()[0].row()
            da_eliminare = self.controllore_lista_prenotazioni.get_lista_prenotazioni_cliente(self.email_cliente)[indice]
        except:
            QMessageBox.critical(self, "Errore", "Seleziona la prenotazione da eliminare", QMessageBox.Ok,QMessageBox.Ok)
            return

        if da_eliminare.data_inizio < datetime.now():
            QMessageBox.critical(self, "Errore", "Non puoi eliminare prenotazioni passate", QMessageBox.Ok, QMessageBox.Ok)
            return
        risposta = QMessageBox.question(self, "Elimina prenotazione",
                               "Sei sicuro di voler elimare la prenotazione selezionata? \nPerderai la caparra versata", QMessageBox.Yes,
                               QMessageBox.No)
        if risposta == QMessageBox.Yes:
            self.controllore_lista_prenotazioni.elimina_prenotazione_singola(self.email_cliente, da_eliminare.data_inizio)
            self.controllore_lista_prenotazioni.save_data()
            self.aggiorna_dati_prenotazioni()
        else:
            return
Exemple #38
0
def main(args):
    app = QApplication(args)
    page = QSplitter()
    data = Model(1000, 10, page)
    selections = QItemSelectionModel(data)
    table = QTableView()
    table.setModel(data)
    table.setSelectionModel(selections)
    table.horizontalHeader().setSectionsMovable(True)
    table.verticalHeader().setSectionsMovable(True)
    # Set StaticContents to enable minimal repaints on resizes.
    table.viewport().setAttribute(Qt.WA_StaticContents)
    page.addWidget(table)
    tree = QTreeView()
    tree.setModel(data)
    tree.setSelectionModel(selections)
    tree.setUniformRowHeights(True)
    tree.header().setStretchLastSection(False)
    tree.viewport().setAttribute(Qt.WA_StaticContents)
    # Disable the focus rect to get minimal repaints when scrolling on Mac.
    tree.setAttribute(Qt.WA_MacShowFocusRect, False)
    page.addWidget(tree)
    list = QListView()
    list.setModel(data)
    list.setSelectionModel(selections)
    list.setViewMode(QListView.IconMode)
    list.setSelectionMode(QAbstractItemView.ExtendedSelection)
    list.setAlternatingRowColors(False)
    list.viewport().setAttribute(Qt.WA_StaticContents)
    list.setAttribute(Qt.WA_MacShowFocusRect, False)
    page.addWidget(list)
    page.setWindowIcon(QIcon(images_dir + '/interview.png'))
    page.setWindowTitle("Interview")
    page.show()
    return app.exec_()
Exemple #39
0
class comic_export_setting_dialog(QDialog):
    acbfStylesList = ["speech", "commentary", "formal", "letter", "code", "heading", "audio", "thought", "sign", "sound", "emphasis", "strong"]

    def __init__(self):
        super().__init__()
        self.setLayout(QVBoxLayout())
        self.setWindowTitle(i18n("Export Settings"))
        buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

        buttons.accepted.connect(self.accept)
        buttons.rejected.connect(self.reject)
        mainWidget = QTabWidget()
        self.layout().addWidget(mainWidget)
        self.layout().addWidget(buttons)

        # Set basic crop settings
        # Set which layers to remove before export.
        mainExportSettings = QWidget()
        mainExportSettings.setLayout(QVBoxLayout())
        groupExportCrop = QGroupBox(i18n("Crop Settings"))
        formCrop = QFormLayout()
        groupExportCrop.setLayout(formCrop)
        self.chk_toOutmostGuides = QCheckBox(i18n("Crop to outmost guides"))
        self.chk_toOutmostGuides.setChecked(True)
        self.chk_toOutmostGuides.setToolTip(i18n("This will crop to the outmost guides if possible and otherwise use the underlying crop settings."))
        formCrop.addRow("", self.chk_toOutmostGuides)
        btn_fromSelection = QPushButton(i18n("Set Margins from Active Selection"))
        btn_fromSelection.clicked.connect(self.slot_set_margin_from_selection)
        # This doesn't work.
        formCrop.addRow("", btn_fromSelection)
        self.spn_marginLeft = QSpinBox()
        self.spn_marginLeft.setMaximum(99999)
        self.spn_marginLeft.setSuffix(" px")
        formCrop.addRow(i18n("Left:"), self.spn_marginLeft)
        self.spn_marginTop = QSpinBox()
        self.spn_marginTop.setMaximum(99999)
        self.spn_marginTop.setSuffix(" px")
        formCrop.addRow(i18n("Top:"), self.spn_marginTop)
        self.spn_marginRight = QSpinBox()
        self.spn_marginRight.setMaximum(99999)
        self.spn_marginRight.setSuffix(" px")
        formCrop.addRow(i18n("Right:"), self.spn_marginRight)
        self.spn_marginBottom = QSpinBox()
        self.spn_marginBottom.setMaximum(99999)
        self.spn_marginBottom.setSuffix(" px")
        formCrop.addRow(i18n("Bottom:"), self.spn_marginBottom)
        groupExportLayers = QGroupBox(i18n("Layers"))
        formLayers = QFormLayout()
        groupExportLayers.setLayout(formLayers)
        self.cmbLabelsRemove = labelSelector()
        formLayers.addRow(i18n("Label for removal:"), self.cmbLabelsRemove)
        self.ln_text_layer_name = QLineEdit()
        self.ln_text_layer_name.setToolTip(i18n("These are keywords that can be used to identify text layers. A layer only needs to contain the keyword to be recognized. Keywords should be comma separated."))
        self.ln_panel_layer_name = QLineEdit()
        self.ln_panel_layer_name.setToolTip(i18n("These are keywords that can be used to identify panel layers. A layer only needs to contain the keyword to be recognized. Keywords should be comma separated."))
        formLayers.addRow(i18n("Text Layer Key:"), self.ln_text_layer_name)
        formLayers.addRow(i18n("Panel Layer Key:"), self.ln_panel_layer_name)

        mainExportSettings.layout().addWidget(groupExportCrop)
        mainExportSettings.layout().addWidget(groupExportLayers)
        mainWidget.addTab(mainExportSettings, i18n("General"))

        # CBZ, crop, resize, which metadata to add.
        CBZexportSettings = QWidget()
        CBZexportSettings.setLayout(QVBoxLayout())
        self.CBZactive = QCheckBox(i18n("Export to CBZ"))
        CBZexportSettings.layout().addWidget(self.CBZactive)
        self.CBZgroupResize = comic_export_resize_widget("CBZ")
        CBZexportSettings.layout().addWidget(self.CBZgroupResize)
        self.CBZactive.clicked.connect(self.CBZgroupResize.setEnabled)
        CBZgroupMeta = QGroupBox(i18n("Metadata to Add"))
        # CBZexportSettings.layout().addWidget(CBZgroupMeta)
        CBZgroupMeta.setLayout(QFormLayout())

        mainWidget.addTab(CBZexportSettings, i18n("CBZ"))

        # ACBF, crop, resize, creator name, version history, panel layer, text layers.
        ACBFExportSettings = QWidget()
        ACBFform = QFormLayout()
        ACBFExportSettings.setLayout(QVBoxLayout())
        ACBFdocInfo = QGroupBox()
        ACBFdocInfo.setTitle(i18n("ACBF Document Info"))
        ACBFdocInfo.setLayout(ACBFform)
        self.lnACBFSource = QLineEdit()
        self.lnACBFSource.setToolTip(i18n("Whether the acbf file is an adaption of an existing source, and if so, how to find information about that source. So for example, for an adapted webcomic, the official website url should go here."))
        self.lnACBFID = QLabel()
        self.lnACBFID.setToolTip(i18n("By default this will be filled with a generated universal unique identifier. The ID by itself is merely so that comic book library management programs can figure out if this particular comic is already in their database and whether it has been rated. Of course, the UUID can be changed into something else by manually changing the JSON, but this is advanced usage."))
        self.spnACBFVersion = QSpinBox()
        self.ACBFhistoryModel = QStandardItemModel()
        acbfHistoryList = QListView()
        acbfHistoryList.setModel(self.ACBFhistoryModel)
        btn_add_history = QPushButton(i18n("Add History Entry"))
        btn_add_history.clicked.connect(self.slot_add_history_item)
        self.chkIncludeTranslatorComments = QCheckBox()
        self.chkIncludeTranslatorComments.setText(i18n("Include translator's comments"))
        self.chkIncludeTranslatorComments.setToolTip(i18n("A PO file can contain translator's comments. If this is checked, the translations comments will be added as references into the ACBF file."))
        self.lnTranslatorHeader = QLineEdit()

        ACBFform.addRow(i18n("Source:"), self.lnACBFSource)
        ACBFform.addRow(i18n("ACBF UID:"), self.lnACBFID)
        ACBFform.addRow(i18n("Version:"), self.spnACBFVersion)
        ACBFform.addRow(i18n("Version history:"), acbfHistoryList)
        ACBFform.addRow("", btn_add_history)
        ACBFform.addRow("", self.chkIncludeTranslatorComments)
        ACBFform.addRow(i18n("Translator header:"), self.lnTranslatorHeader)

        ACBFAuthorInfo = QWidget()
        acbfAVbox = QVBoxLayout(ACBFAuthorInfo)
        infoLabel = QLabel(i18n("The people responsible for the generation of the CBZ/ACBF files."))
        infoLabel.setWordWrap(True)
        ACBFAuthorInfo.layout().addWidget(infoLabel)
        self.ACBFauthorModel = QStandardItemModel(0, 6)
        labels = [i18n("Nick Name"), i18n("Given Name"), i18n("Middle Name"), i18n("Family Name"), i18n("Email"), i18n("Homepage")]
        self.ACBFauthorModel.setHorizontalHeaderLabels(labels)
        self.ACBFauthorTable = QTableView()
        acbfAVbox.addWidget(self.ACBFauthorTable)
        self.ACBFauthorTable.setModel(self.ACBFauthorModel)
        self.ACBFauthorTable.verticalHeader().setDragEnabled(True)
        self.ACBFauthorTable.verticalHeader().setDropIndicatorShown(True)
        self.ACBFauthorTable.verticalHeader().setSectionsMovable(True)
        self.ACBFauthorTable.verticalHeader().sectionMoved.connect(self.slot_reset_author_row_visual)
        AuthorButtons = QHBoxLayout()
        btn_add_author = QPushButton(i18n("Add Author"))
        btn_add_author.clicked.connect(self.slot_add_author)
        AuthorButtons.addWidget(btn_add_author)
        btn_remove_author = QPushButton(i18n("Remove Author"))
        btn_remove_author.clicked.connect(self.slot_remove_author)
        AuthorButtons.addWidget(btn_remove_author)
        acbfAVbox.addLayout(AuthorButtons)
        
        ACBFStyle = QWidget()
        ACBFStyle.setLayout(QHBoxLayout())
        self.ACBFStylesModel = QStandardItemModel()
        self.ACBFStyleClass = QListView()
        self.ACBFStyleClass.setModel(self.ACBFStylesModel)
        ACBFStyle.layout().addWidget(self.ACBFStyleClass)
        ACBFStyleEdit = QWidget()
        ACBFStyleEditVB = QVBoxLayout(ACBFStyleEdit)
        self.ACBFuseFont = QCheckBox(i18n("Use font"))
        self.ACBFFontList = QListView()
        self.ACBFFontList.setItemDelegate(font_list_delegate())
        self.ACBFuseFont.toggled.connect(self.font_slot_enable_font_view)
        self.ACBFFontListModel = QStandardItemModel()
        self.ACBFFontListModel.rowsRemoved.connect(self.slot_font_current_style)
        self.ACBFFontListModel.itemChanged.connect(self.slot_font_current_style)
        self.btnAcbfAddFont = QPushButton()
        self.btnAcbfAddFont.setIcon(Application.icon("list-add"))
        self.btnAcbfAddFont.clicked.connect(self.font_slot_add_font)
        self.btn_acbf_remove_font = QPushButton()
        self.btn_acbf_remove_font.setIcon(Application.icon("edit-delete"))
        self.btn_acbf_remove_font.clicked.connect(self.font_slot_remove_font)
        self.ACBFFontList.setModel(self.ACBFFontListModel)
        self.ACBFdefaultFont = QComboBox()
        self.ACBFdefaultFont.addItems(["sans-serif", "serif", "monospace", "cursive", "fantasy"])
        acbfFontButtons = QHBoxLayout()
        acbfFontButtons.addWidget(self.btnAcbfAddFont)
        acbfFontButtons.addWidget(self.btn_acbf_remove_font)
        self.ACBFBold = QCheckBox(i18n("Bold"))
        self.ACBFItal = QCheckBox(i18n("Italic"))
        self.ACBFStyleClass.clicked.connect(self.slot_set_style)
        self.ACBFStyleClass.selectionModel().selectionChanged.connect(self.slot_set_style)
        self.ACBFStylesModel.itemChanged.connect(self.slot_set_style)
        self.ACBFBold.toggled.connect(self.slot_font_current_style)
        self.ACBFItal.toggled.connect(self.slot_font_current_style)
        colorWidget = QGroupBox(self)
        colorWidget.setTitle(i18n("Text Colors"))
        colorWidget.setLayout(QVBoxLayout())
        self.regularColor = QColorDialog()
        self.invertedColor = QColorDialog()
        self.btn_acbfRegColor = QPushButton(i18n("Regular Text"), self)
        self.btn_acbfRegColor.clicked.connect(self.slot_change_regular_color)
        self.btn_acbfInvColor = QPushButton(i18n("Inverted Text"), self)
        self.btn_acbfInvColor.clicked.connect(self.slot_change_inverted_color)
        colorWidget.layout().addWidget(self.btn_acbfRegColor)
        colorWidget.layout().addWidget(self.btn_acbfInvColor)
        ACBFStyleEditVB.addWidget(colorWidget)
        ACBFStyleEditVB.addWidget(self.ACBFuseFont)
        ACBFStyleEditVB.addWidget(self.ACBFFontList)
        ACBFStyleEditVB.addLayout(acbfFontButtons)
        ACBFStyleEditVB.addWidget(self.ACBFdefaultFont)
        ACBFStyleEditVB.addWidget(self.ACBFBold)
        ACBFStyleEditVB.addWidget(self.ACBFItal)
        ACBFStyleEditVB.addStretch()
        ACBFStyle.layout().addWidget(ACBFStyleEdit)

        ACBFTabwidget = QTabWidget()
        ACBFTabwidget.addTab(ACBFdocInfo, i18n("Document Info"))
        ACBFTabwidget.addTab(ACBFAuthorInfo, i18n("Author Info"))
        ACBFTabwidget.addTab(ACBFStyle, i18n("Style Sheet"))
        ACBFExportSettings.layout().addWidget(ACBFTabwidget)
        mainWidget.addTab(ACBFExportSettings, i18n("ACBF"))

        # Epub export, crop, resize, other questions.
        EPUBexportSettings = QWidget()
        EPUBexportSettings.setLayout(QVBoxLayout())
        self.EPUBactive = QCheckBox(i18n("Export to EPUB"))
        EPUBexportSettings.layout().addWidget(self.EPUBactive)
        self.EPUBgroupResize = comic_export_resize_widget("EPUB")
        EPUBexportSettings.layout().addWidget(self.EPUBgroupResize)
        self.EPUBactive.clicked.connect(self.EPUBgroupResize.setEnabled)
        mainWidget.addTab(EPUBexportSettings, i18n("EPUB"))

        # For Print. Crop, no resize.
        TIFFExportSettings = QWidget()
        TIFFExportSettings.setLayout(QVBoxLayout())
        self.TIFFactive = QCheckBox(i18n("Export to TIFF"))
        TIFFExportSettings.layout().addWidget(self.TIFFactive)
        self.TIFFgroupResize = comic_export_resize_widget("TIFF")
        TIFFExportSettings.layout().addWidget(self.TIFFgroupResize)
        self.TIFFactive.clicked.connect(self.TIFFgroupResize.setEnabled)
        mainWidget.addTab(TIFFExportSettings, i18n("TIFF"))

        # SVG, crop, resize, embed vs link.
        #SVGExportSettings = QWidget()

        #mainWidget.addTab(SVGExportSettings, i18n("SVG"))

    """
    Add a history item to the acbf version history list.
    """

    def slot_add_history_item(self):
        newItem = QStandardItem()
        newItem.setText(str(i18n("v{version}-in this version...")).format(version=str(self.spnACBFVersion.value())))
        self.ACBFhistoryModel.appendRow(newItem)

    """
    Get the margins by treating the active selection in a document as the trim area.
    This allows people to snap selections to a vector or something, and then get the margins.
    """

    def slot_set_margin_from_selection(self):
        doc = Application.activeDocument()
        if doc is not None:
            if doc.selection() is not None:
                self.spn_marginLeft.setValue(doc.selection().x())
                self.spn_marginTop.setValue(doc.selection().y())
                self.spn_marginRight.setValue(doc.width() - (doc.selection().x() + doc.selection().width()))
                self.spn_marginBottom.setValue(doc.height() - (doc.selection().y() + doc.selection().height()))

    """
    Add an author with default values initialised.
    """

    def slot_add_author(self):
        listItems = []
        listItems.append(QStandardItem(i18n("Anon")))  # Nick name
        listItems.append(QStandardItem(i18n("John")))  # First name
        listItems.append(QStandardItem())  # Middle name
        listItems.append(QStandardItem(i18n("Doe")))  # Last name
        listItems.append(QStandardItem())  # email
        listItems.append(QStandardItem())  # homepage
        self.ACBFauthorModel.appendRow(listItems)

    """
    Remove the selected author from the author list.
    """

    def slot_remove_author(self):
        self.ACBFauthorModel.removeRow(self.ACBFauthorTable.currentIndex().row())

    """
    Ensure that the drag and drop of authors doesn't mess up the labels.
    """

    def slot_reset_author_row_visual(self):
        headerLabelList = []
        for i in range(self.ACBFauthorTable.verticalHeader().count()):
            headerLabelList.append(str(i))
        for i in range(self.ACBFauthorTable.verticalHeader().count()):
            logicalI = self.ACBFauthorTable.verticalHeader().logicalIndex(i)
            headerLabelList[logicalI] = str(i + 1)
        self.ACBFauthorModel.setVerticalHeaderLabels(headerLabelList)
    """
    Set the style item to the gui item's style.
    """
    
    def slot_set_style(self):
        index = self.ACBFStyleClass.currentIndex()
        if index.isValid():
            item = self.ACBFStylesModel.item(index.row())
            fontUsed = item.data(role=styleEnum.FONT)
            if fontUsed is not None:
                self.ACBFuseFont.setChecked(fontUsed)
            else:
                self.ACBFuseFont.setChecked(False)
            self.font_slot_enable_font_view()
            fontList = item.data(role=styleEnum.FONTLIST)
            self.ACBFFontListModel.clear()
            for font in fontList:
                NewItem = QStandardItem(font)
                NewItem.setEditable(True)
                self.ACBFFontListModel.appendRow(NewItem)
            self.ACBFdefaultFont.setCurrentText(str(item.data(role=styleEnum.FONTGENERIC)))
            bold = item.data(role=styleEnum.BOLD)
            if bold is not None:
                self.ACBFBold.setChecked(bold)
            else:
                self.ACBFBold.setChecked(False)
            italic = item.data(role=styleEnum.ITALIC)
            if italic is not None:
                self.ACBFItal.setChecked(italic)
            else:
                self.ACBFItal.setChecked(False)
    
    """
    Set the gui items to the currently selected style.
    """
    
    def slot_font_current_style(self):
        index = self.ACBFStyleClass.currentIndex()
        if index.isValid():
            item = self.ACBFStylesModel.item(index.row())
            fontList = []
            for row in range(self.ACBFFontListModel.rowCount()):
                font = self.ACBFFontListModel.item(row)
                fontList.append(font.text())
            item.setData(self.ACBFuseFont.isChecked(), role=styleEnum.FONT)
            item.setData(fontList, role=styleEnum.FONTLIST)
            item.setData(self.ACBFdefaultFont.currentText(), role=styleEnum.FONTGENERIC)
            item.setData(self.ACBFBold.isChecked(), role=styleEnum.BOLD)
            item.setData(self.ACBFItal.isChecked(), role=styleEnum.ITALIC)
            self.ACBFStylesModel.setItem(index.row(), item)
    """
    Change the regular color
    """
    
    def slot_change_regular_color(self):
        if (self.regularColor.exec_() == QDialog.Accepted):
            square = QPixmap(32, 32)
            square.fill(self.regularColor.currentColor())
            self.btn_acbfRegColor.setIcon(QIcon(square))
    """
    change the inverted color
    """
    
    def slot_change_inverted_color(self):
        if (self.invertedColor.exec_() == QDialog.Accepted):
            square = QPixmap(32, 32)
            square.fill(self.invertedColor.currentColor())
            self.btn_acbfInvColor.setIcon(QIcon(square))
            
    def font_slot_enable_font_view(self):
        self.ACBFFontList.setEnabled(self.ACBFuseFont.isChecked())
        self.btn_acbf_remove_font.setEnabled(self.ACBFuseFont.isChecked())
        self.btnAcbfAddFont.setEnabled(self.ACBFuseFont.isChecked())
        self.ACBFdefaultFont.setEnabled(self.ACBFuseFont.isChecked())
        if self.ACBFFontListModel.rowCount() < 2:
                self.btn_acbf_remove_font.setEnabled(False)
        
    def font_slot_add_font(self):
        NewItem = QStandardItem(QFont().family())
        NewItem.setEditable(True)
        self.ACBFFontListModel.appendRow(NewItem)
    
    def font_slot_remove_font(self):
        index  = self.ACBFFontList.currentIndex()
        if index.isValid():
            self.ACBFFontListModel.removeRow(index.row())
            if self.ACBFFontListModel.rowCount() < 2:
                self.btn_acbf_remove_font.setEnabled(False)

    """
    Load the UI values from the config dictionary given.
    """

    def setConfig(self, config):
        if "cropToGuides" in config.keys():
            self.chk_toOutmostGuides.setChecked(config["cropToGuides"])
        if "cropLeft" in config.keys():
            self.spn_marginLeft.setValue(config["cropLeft"])
        if "cropTop" in config.keys():
            self.spn_marginTop.setValue(config["cropTop"])
        if "cropRight" in config.keys():
            self.spn_marginRight.setValue(config["cropRight"])
        if "cropBottom" in config.keys():
            self.spn_marginBottom.setValue(config["cropBottom"])
        if "labelsToRemove" in config.keys():
            self.cmbLabelsRemove.setLabels(config["labelsToRemove"])
        if "textLayerNames" in config.keys():
            self.ln_text_layer_name.setText(", ".join(config["textLayerNames"]))
        else:
            self.ln_text_layer_name.setText("text")
        if "panelLayerNames" in config.keys():
            self.ln_panel_layer_name.setText(", ".join(config["panelLayerNames"]))
        else:
            self.ln_panel_layer_name.setText("panels")
        self.CBZgroupResize.set_config(config)
        if "CBZactive" in config.keys():
            self.CBZactive.setChecked(config["CBZactive"])
        self.EPUBgroupResize.set_config(config)
        if "EPUBactive" in config.keys():
            self.EPUBactive.setChecked(config["EPUBactive"])
        self.TIFFgroupResize.set_config(config)
        if "TIFFactive" in config.keys():
            self.TIFFactive.setChecked(config["TIFFactive"])

        if "acbfAuthor" in config.keys():
            if isinstance(config["acbfAuthor"], list):
                for author in config["acbfAuthor"]:
                    listItems = []
                    listItems.append(QStandardItem(author.get("nickname", "")))
                    listItems.append(QStandardItem(author.get("first-name", "")))
                    listItems.append(QStandardItem(author.get("initials", "")))
                    listItems.append(QStandardItem(author.get("last-name", "")))
                    listItems.append(QStandardItem(author.get("email", "")))
                    listItems.append(QStandardItem(author.get("homepage", "")))
                    self.ACBFauthorModel.appendRow(listItems)
                pass
            else:
                listItems = []
                listItems.append(QStandardItem(config["acbfAuthor"]))  # Nick name
                for i in range(0, 5):
                    listItems.append(QStandardItem())  # First name
                self.ACBFauthorModel.appendRow(listItems)

        if "acbfSource" in config.keys():
            self.lnACBFSource.setText(config["acbfSource"])
        if "acbfID" in config.keys():
            self.lnACBFID.setText(config["acbfID"])
        else:
            self.lnACBFID.setText(QUuid.createUuid().toString())
        if "acbfVersion" in config.keys():
            self.spnACBFVersion.setValue(config["acbfVersion"])
        if "acbfHistory" in config.keys():
            for h in config["acbfHistory"]:
                item = QStandardItem()
                item.setText(h)
                self.ACBFhistoryModel.appendRow(item)
        if "acbfStyles" in config.keys():
            styleDict = config.get("acbfStyles", {})
            for key in self.acbfStylesList:
                keyDict = styleDict.get(key, {})
                style = QStandardItem(key.title())
                style.setCheckable(True)
                if key in styleDict.keys():
                    style.setCheckState(Qt.Checked)
                else:
                    style.setCheckState(Qt.Unchecked)
                fontOn = False
                if "font" in keyDict.keys() or "genericfont" in keyDict.keys():
                    fontOn = True
                style.setData(fontOn, role=styleEnum.FONT)
                if "font" in keyDict:
                    fontlist = keyDict["font"]
                    if isinstance(fontlist, list):
                        font = keyDict.get("font", QFont().family())
                        style.setData(font, role=styleEnum.FONTLIST)
                    else:
                        style.setData([fontlist], role=styleEnum.FONTLIST)
                else:
                   style.setData([QFont().family()], role=styleEnum.FONTLIST)
                style.setData(keyDict.get("genericfont", "sans-serif"), role=styleEnum.FONTGENERIC)
                style.setData(keyDict.get("bold", False), role=styleEnum.BOLD)
                style.setData(keyDict.get("ital", False), role=styleEnum.ITALIC)
                self.ACBFStylesModel.appendRow(style)
            keyDict = styleDict.get("general", {})
            self.regularColor.setCurrentColor(QColor(keyDict.get("color", "#000000")))
            square = QPixmap(32, 32)
            square.fill(self.regularColor.currentColor())
            self.btn_acbfRegColor.setIcon(QIcon(square))
            keyDict = styleDict.get("inverted", {})
            self.invertedColor.setCurrentColor(QColor(keyDict.get("color", "#FFFFFF")))
            square.fill(self.invertedColor.currentColor())
            self.btn_acbfInvColor.setIcon(QIcon(square))
        else:
            for key in self.acbfStylesList:
                style = QStandardItem(key.title())
                style.setCheckable(True)
                style.setCheckState(Qt.Unchecked)
                style.setData(False, role=styleEnum.FONT)
                style.setData(QFont().family(), role=styleEnum.FONTLIST)
                style.setData("sans-serif", role=styleEnum.FONTGENERIC)
                style.setData(False, role=styleEnum.BOLD) #Bold
                style.setData(False, role=styleEnum.ITALIC) #Italic
                self.ACBFStylesModel.appendRow(style)
        self.CBZgroupResize.setEnabled(self.CBZactive.isChecked())
        self.lnTranslatorHeader.setText(config.get("translatorHeader", "Translator's Notes"))
        self.chkIncludeTranslatorComments.setChecked(config.get("includeTranslComment", False))

    """
    Store the GUI values into the config dictionary given.
    
    @return the config diactionary filled with new values.
    """

    def getConfig(self, config):

        config["cropToGuides"] = self.chk_toOutmostGuides.isChecked()
        config["cropLeft"] = self.spn_marginLeft.value()
        config["cropTop"] = self.spn_marginTop.value()
        config["cropBottom"] = self.spn_marginRight.value()
        config["cropRight"] = self.spn_marginBottom.value()
        config["labelsToRemove"] = self.cmbLabelsRemove.getLabels()
        config["CBZactive"] = self.CBZactive.isChecked()
        config = self.CBZgroupResize.get_config(config)
        config["EPUBactive"] = self.EPUBactive.isChecked()
        config = self.EPUBgroupResize.get_config(config)
        config["TIFFactive"] = self.TIFFactive.isChecked()
        config = self.TIFFgroupResize.get_config(config)
        authorList = []
        for row in range(self.ACBFauthorTable.verticalHeader().count()):
            logicalIndex = self.ACBFauthorTable.verticalHeader().logicalIndex(row)
            listEntries = ["nickname", "first-name", "initials", "last-name", "email", "homepage"]
            author = {}
            for i in range(len(listEntries)):
                entry = self.ACBFauthorModel.data(self.ACBFauthorModel.index(logicalIndex, i))
                if entry is None:
                    entry = " "
                if entry.isspace() is False and len(entry) > 0:
                    author[listEntries[i]] = entry
                elif listEntries[i] in author.keys():
                    author.pop(listEntries[i])
            authorList.append(author)
        config["acbfAuthor"] = authorList
        config["acbfSource"] = self.lnACBFSource.text()
        config["acbfID"] = self.lnACBFID.text()
        config["acbfVersion"] = self.spnACBFVersion.value()
        versionList = []
        for r in range(self.ACBFhistoryModel.rowCount()):
            index = self.ACBFhistoryModel.index(r, 0)
            versionList.append(self.ACBFhistoryModel.data(index, Qt.DisplayRole))
        config["acbfHistory"] = versionList
        
        acbfStylesDict = {}
        for row in range(0, self.ACBFStylesModel.rowCount()):
            entry = self.ACBFStylesModel.item(row)
            if entry.checkState() == Qt.Checked:
                key = entry.text().lower()
                style = {}
                if entry.data(role=styleEnum.FONT):
                    font = entry.data(role=styleEnum.FONTLIST)
                    if font is not None:
                        style["font"] = font
                    genericfont = entry.data(role=styleEnum.FONTGENERIC)
                    if font is not None:
                        style["genericfont"] = genericfont
                bold = entry.data(role=styleEnum.BOLD)
                if bold is not None:
                    style["bold"] = bold
                italic = entry.data(role=styleEnum.ITALIC)
                if italic is not None:
                    style["ital"] = italic
                acbfStylesDict[key] = style
        acbfStylesDict["general"] = {"color": self.regularColor.currentColor().name()}
        acbfStylesDict["inverted"] = {"color": self.invertedColor.currentColor().name()}
        config["acbfStyles"] = acbfStylesDict
        config["translatorHeader"] = self.lnTranslatorHeader.text()
        config["includeTranslComment"] = self.chkIncludeTranslatorComments.isChecked()

        # Turn this into something that retreives from a line-edit when string freeze is over.
        config["textLayerNames"] = self.ln_text_layer_name.text().split(",")
        config["panelLayerNames"] = self.ln_panel_layer_name.text().split(",")
        return config
Exemple #40
0
    def b_port_clicked(self):
        global listviewA
        listviewA = QListView(self)
        listviewA.setStyleSheet("font: 20px;  background-color: rgb(255,255,255);");
        listviewA.resize(220,80)
        listviewA.move(20,200)
        slm=QStringListModel()

        self.qList=serial_ports()
        slm.setStringList(self.qList)
        listviewA.setModel(slm)
        listviewA.clicked.connect(self.listviewA_clicked)
        listviewA.show()  #self.show()
Exemple #41
0
class FileManager(QWidget, _HalWidgetBase):
    def __init__(self, parent=None):
        super(FileManager, self).__init__(parent)
        self.title = 'Qtvcp File System View'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self._last = 0

        if INFO.PROGRAM_PREFIX is not None:
            self.user_path = os.path.expanduser(INFO.PROGRAM_PREFIX)
        else:
            self.user_path = (os.path.join(os.path.expanduser('~'), 'linuxcnc/nc_files'))
        user = os.path.split(os.path.expanduser('~') )[-1]
        self.media_path = (os.path.join('/media', user))
        temp = [('User', self.user_path), ('Media', self.media_path)]
        self._jumpList = OrderedDict(temp)
        self.currentPath = None
        self.currentFolder = None
        self.PREFS_ = None
        self.initUI()


    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        pasteBox = QHBoxLayout()
        self.textLine = QLineEdit()
        self.textLine.setToolTip('Current Director/selected File')
        self.pasteButton = QToolButton()
        self.pasteButton.setEnabled(False)
        self.pasteButton.setText('Paste')
        self.pasteButton.setToolTip('Copy file from copy path to current directory/file')
        self.pasteButton.clicked.connect(self.paste)
        self.pasteButton.hide()
        pasteBox.addWidget(self.textLine)
        pasteBox.addWidget(self.pasteButton)

        self.copyBox = QFrame()
        hbox = QHBoxLayout()
        hbox.setContentsMargins(0,0,0,0)
        self.copyLine = QLineEdit()
        self.copyLine.setToolTip('File path to copy from, when pasting')
        self.copyButton = QToolButton()
        self.copyButton.setText('Copy')
        self.copyButton.setToolTip('Record current file as copy path')
        self.copyButton.clicked.connect(self.recordCopyPath)
        hbox.addWidget(self.copyButton)
        hbox.addWidget(self.copyLine)
        self.copyBox.setLayout(hbox)
        self.copyBox.hide()

        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.currentPath())
        self.model.setFilter(QDir.AllDirs | QDir.NoDot | QDir.Files)
        self.model.setNameFilterDisables(False)
        self.model.rootPathChanged.connect(self.folderChanged)

        self.list = QListView()
        self.list.setModel(self.model)
        self.list.resize(640, 480)
        self.list.clicked[QModelIndex].connect(self.listClicked)
        self.list.activated.connect(self._getPathActivated)
        self.list.setAlternatingRowColors(True)
        self.list.hide()

        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.resize(640, 480)
        self.table.clicked[QModelIndex].connect(self.listClicked)
        self.table.activated.connect(self._getPathActivated)
        self.table.setAlternatingRowColors(True)

        header = self.table.horizontalHeader()
        header.setSectionResizeMode(0, QHeaderView.Stretch)
        header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QHeaderView.ResizeToContents)
        header.swapSections(1,3)
        header.setSortIndicator(1,Qt.AscendingOrder)

        self.table.setSortingEnabled(True)
        self.table.setColumnHidden(2, True) # type
        self.table.verticalHeader().setVisible(False) # row count header

        self.cb = QComboBox()
        self.cb.currentIndexChanged.connect(self.filterChanged)
        self.fillCombobox(INFO.PROGRAM_FILTERS_EXTENSIONS)
        self.cb.setMinimumSize(200,30)
        self.cb.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))

        self.button2 = QToolButton()
        self.button2.setText('User')
        self.button2.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.button2.setMinimumSize(60, 30)
        self.button2.setToolTip('Jump to User directory.\nLong press for Options.')
        self.button2.clicked.connect(self.onJumpClicked)

        self.button3 = QToolButton()
        self.button3.setText('Add Jump')
        self.button3.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.button3.setMinimumSize(60, 30)
        self.button3.setToolTip('Add current directory to jump button list')
        self.button3.clicked.connect(self.onActionClicked)

        self.settingMenu = QMenu(self)
        self.button2.setMenu(self.settingMenu)

        hbox = QHBoxLayout()
        hbox.addWidget(self.button2)
        hbox.addWidget(self.button3)
        hbox.insertStretch (2, stretch = 0)
        hbox.addWidget(self.cb)

        windowLayout = QVBoxLayout()
        windowLayout.addLayout(pasteBox)
        windowLayout.addWidget(self.copyBox)
        windowLayout.addWidget(self.list)
        windowLayout.addWidget(self.table)
        windowLayout.addLayout(hbox)
        self.setLayout(windowLayout)
        self.show()

    def _hal_init(self):
        if self.PREFS_:
            last_path = self.PREFS_.getpref('last_loaded_directory', self.user_path, str, 'BOOK_KEEPING')
            LOG.debug("lAST FILE PATH: {}".format(last_path))
            if not last_path == '':
                self.updateDirectoryView(last_path)
            else:
                self.updateDirectoryView(self.user_path)


            # get all the saved jumplist paths
            temp = self.PREFS_.getall('FILEMANAGER_JUMPLIST')
            self._jumpList.update(temp)

        else:
            LOG.debug("lAST FILE PATH: {}".format(self.user_path))
            self.updateDirectoryView(self.user_path)

        # install jump paths into toolbutton menu
        for i in self._jumpList:
            self.addAction(i)

        # set recorded columns sort settings
        self.SETTINGS_.beginGroup("FileManager-{}".format(self.objectName()))
        sect = self.SETTINGS_.value('sortIndicatorSection', type = int)
        order = self.SETTINGS_.value('sortIndicatorOrder', type = int)
        self.SETTINGS_.endGroup()
        if not None in(sect,order):
            self.table.horizontalHeader().setSortIndicator(sect,order)

    # when qtvcp closes this gets called
    # record jump list paths
    def _hal_cleanup(self):
        if self.PREFS_:
            for i, key in enumerate(self._jumpList):
                if i in(0,1):
                    continue
                self.PREFS_.putpref(key, self._jumpList.get(key), str, 'FILEMANAGER_JUMPLIST')

        # record sorted columns
        h = self.table.horizontalHeader()
        self.SETTINGS_.beginGroup("FileManager-{}".format(self.objectName()))
        self.SETTINGS_.setValue('sortIndicatorSection', h.sortIndicatorSection())
        self.SETTINGS_.setValue('sortIndicatorOrder', h.sortIndicatorOrder())
        self.SETTINGS_.endGroup()

    #########################
    # callbacks
    #########################

    # add shown text and hidden filter data from the INI
    def fillCombobox(self, data):
        for i in data:
            self.cb.addItem(i[0],i[1])

    def folderChanged(self, data):
        data = os.path.normpath(data)
        self.currentFolder = data
        self.textLine.setText(data)

    def updateDirectoryView(self, path, quiet = False):
        if os.path.exists(path):
            self.list.setRootIndex(self.model.setRootPath(path))
            self.table.setRootIndex(self.model.setRootPath(path))
        else:
            LOG.debug("Set directory view error - no such path {}".format(path))
            if not quiet:
                STATUS.emit('error', LOW_ERROR, "File Manager error - No such path: {}".format(path))

    # retrieve selected filter (it's held as QT.userData)
    def filterChanged(self, index):
        userdata =  self.cb.itemData(index)
        self.model.setNameFilters(userdata)

    def listClicked(self, index):
        # the signal passes the index of the clicked item
        dir_path = os.path.normpath(self.model.filePath(index))
        if self.model.fileInfo(index).isFile():
            self.currentPath = dir_path
            self.textLine.setText(self.currentPath)
            return
        root_index = self.model.setRootPath(dir_path)
        self.list.setRootIndex(root_index)
        self.table.setRootIndex(root_index)

    def onUserClicked(self):
        self.showUserDir()

    def onMediaClicked(self):
        self.showMediaDir()

    # jump directly to a saved path shown on the button
    def onJumpClicked(self):
        data = self.button2.text()
        if data.upper() == 'MEDIA':
            self.showMediaDir()
        elif data.upper() == 'USER':
            self.showUserDir()
        else:
            temp = self._jumpList.get(data)
            if temp is not None:
                self.updateDirectoryView(temp)
            else:
                STATUS.emit('error', linuxcnc.OPERATOR_ERROR, 'file jumopath: {} not valid'.format(data))
                log.debug('file jumopath: {} not valid'.format(data))

    # jump directly to a saved path from the menu
    def jumpTriggered(self, data):
        if data.upper() == 'MEDIA':
            self.button2.setText('{}'.format(data))
            self.button2.setToolTip('Jump to Media directory.\nLong press for Options.')
            self.showMediaDir()
        elif data.upper() == 'USER':
            self.button2.setText('{}'.format(data))
            self.button2.setToolTip('Jump to User directory.\nLong press for Options.')
            self.showUserDir()
        else:
            self.button2.setText('{}'.format(data))
            self.button2.setToolTip('Jump to directory:\n{}'.format(self._jumpList.get(data)))
            self.updateDirectoryView(self._jumpList.get(data))

    # add a jump list path
    def onActionClicked(self):
        i = self.currentFolder
        try:
            self._jumpList[i] = i
        except Exception as e:
            print(e)
        button = QAction(QIcon.fromTheme('user-home'), i, self)
        # weird lambda i=i to work around 'function closure'
        button.triggered.connect(lambda state, i=i: self.jumpTriggered(i))
        self.settingMenu.addAction(button)

    # get current selection and update the path
    # then if the path is good load it into linuxcnc
    # record it in the preference file if available
    def _getPathActivated(self):
        if self.list.isVisible():
            row = self.list.selectionModel().currentIndex()
        else:
            row = self.table.selectionModel().currentIndex()
            self.listClicked(row)

        fname = self.currentPath
        if fname is None: 
            return
        if fname:
            self.load(fname)

    def recordCopyPath(self):
        data, isFile = self.getCurrentSelected()
        if isFile:
            self.copyLine.setText(os.path.normpath(data))
            self.pasteButton.setEnabled(True)
        else:
            self.copyLine.setText('')
            self.pasteButton.setEnabled(False)
            STATUS.emit('error', OPERATOR_ERROR, 'Can only copy a file, not a folder')

    def paste(self):
        res = self.copyFile(self.copyLine.text(), self.textLine.text())
        if res:
            self.copyLine.setText('')
            self.pasteButton.setEnabled(False)

    ########################
    # helper functions
    ########################

    def addAction(self, i):
        axisButton = QAction(QIcon.fromTheme('user-home'), i, self)
        # weird lambda i=i to work around 'function closure'
        axisButton.triggered.connect(lambda state, i=i: self.jumpTriggered(i))
        self.settingMenu.addAction(axisButton)

    def showList(self, state=True):
        if state:
            self.table.hide()
            self.list.show()
        else:
            self.table.show()
            self.list.hide()

    def showTable(self, state=True):
        self.showList(not state)

    def showCopyControls(self, state):
        if state:
            self.copyBox.show()
            self.pasteButton.show()
        else:
            self.copyBox.hide()
            self.pasteButton.hide()

    def showMediaDir(self, quiet = False):
        self.updateDirectoryView(self.media_path, quiet)

    def showUserDir(self, quiet = False):
        self.updateDirectoryView(self.user_path, quiet)

    def copyFile(self, s, d):
        try:
            shutil.copy(s, d)
            return True
        except Exception as e:
            LOG.error("Copy file error: {}".format(e))
            STATUS.emit('error', OPERATOR_ERROR, "Copy file error: {}".format(e))
            return False

    @pyqtSlot(float)
    @pyqtSlot(int)
    def scroll(self, data):
        if data > self._last:
            self.up()
        elif data < self._last:
            self.down()
        self._last = data

    # moves the selection up
    # used with MPG scrolling
    def up(self):
        self.select_row('up')

    # moves the selection down
    # used with MPG scrolling
    def down(self):
        self.select_row('down')

    def select_row(self, style='down'):
        style = style.lower()
        if self.list.isVisible():
            i = self.list.rootIndex()
            selectionModel = self.list.selectionModel()
        else:
            i = self.table.rootIndex()
            selectionModel = self.table.selectionModel()

        row = selectionModel.currentIndex().row()
        self.rows = self.model.rowCount(i)

        if style == 'last':
            row = self.rows
        elif style == 'up':
            if row > 0:
                row -= 1
            else:
                row = 0
        elif style == 'down':
            if row < self.rows-1:
                row += 1
            else:
                row = self.rows-1
        else:
            return
        top = self.model.index(row, 0, i)
        selectionModel.setCurrentIndex(top, QItemSelectionModel.Select | QItemSelectionModel.Rows)
        selection = QItemSelection(top, top)
        selectionModel.clearSelection()
        selectionModel.select(selection, QItemSelectionModel.Select)

    # returns the current highlighted (selected) path as well as
    # whether it's a file or not.
    def getCurrentSelected(self):
        if self.list.isVisible():
            selectionModel = self.list.selectionModel()
        else:
            selectionModel = self.table.selectionModel()
        index = selectionModel.currentIndex()
        dir_path = os.path.normpath(self.model.filePath(index))
        if self.model.fileInfo(index).isFile():
            return (dir_path, True)
        else:
            return (dir_path, False)

    # This can be class patched to do something else
    def load(self, fname=None):
        try:
            if fname is None:
                self._getPathActivated()
                return
            self.recordBookKeeping()
            ACTION.OPEN_PROGRAM(fname)
            STATUS.emit('update-machine-log', 'Loaded: ' + fname, 'TIME')
        except Exception as e:
            LOG.error("Load file error: {}".format(e))
            STATUS.emit('error', NML_ERROR, "Load file error: {}".format(e))

    # This can be class patched to do something else
    def recordBookKeeping(self):
        fname = self.currentPath
        if fname is None: 
            return
        if self.PREFS_:
            self.PREFS_.putpref('last_loaded_directory', self.model.rootPath(), str, 'BOOK_KEEPING')
            self.PREFS_.putpref('RecentPath_0', fname, str, 'BOOK_KEEPING')
Exemple #42
0
    def __init__(self, playlist, parent=None):
        super(Player, self).__init__(parent)
        self.setStyleSheet(stylesheet(self))
        self.colorDialog = None
        self.trackInfo = ""
        self.statusInfo = ""
        self.duration = 0

        self.url = ""
        self. settings = QSettings("QAudioPlayer", "QAudioPlayer")

        self.player = QMediaPlayer()
        self.playlist = QMediaPlaylist()
        self.player.setPlaylist(self.playlist)

        self.player.durationChanged.connect(self.durationChanged)
        self.player.positionChanged.connect(self.positionChanged)
        self.player.metaDataChanged.connect(self.metaDataChanged)
        self.playlist.currentIndexChanged.connect(self.playlistPositionChanged)
        self.player.mediaStatusChanged.connect(self.statusChanged)
        self.player.bufferStatusChanged.connect(self.bufferingProgress)
        self.player.error.connect(self.displayErrorMessage)

        self.playlistModel = PlaylistModel()
        self.playlistModel.setPlaylist(self.playlist)

        self.playlistView = QListView()
#        self.playlistView.setSpacing(1)
        self.playlistView.setStyleSheet(stylesheet(self))
        self.playlistView.setModel(self.playlistModel)
        self.playlistView.setCurrentIndex(
                self.playlistModel.index(self.playlist.currentIndex(), 0))

        self.playlistView.activated.connect(self.jump)

        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0, self.player.duration() / 1000)
        self.slider.setStyleSheet(stylesheet(self))

        self.labelDuration = QLabel()
        self.slider.sliderMoved.connect(self.seek)

        openButton = QPushButton("Open", clicked=self.open)
        openButton.setIcon(openButton.style().standardIcon(QStyle.SP_DialogOpenButton))

        clearButton = QPushButton("", clicked=self.clearList)
        clearButton.setFixedWidth(36)
        clearButton.setIcon(QIcon.fromTheme("edit-delete"))
        clearButton.setToolTip("clear List")

        controls = PlayerControls()
        controls.setState(self.player.state())
        controls.setVolume(self.player.volume())
        controls.setMuted(controls.isMuted())

        controls.play.connect(self.player.play)
        controls.pause.connect(self.player.pause)
        controls.stop.connect(self.player.stop)
        controls.next.connect(self.playlist.next)
        controls.previous.connect(self.previousClicked)
        controls.changeVolume.connect(self.player.setVolume)
        controls.changeMuting.connect(self.player.setMuted)
        controls.changeRate.connect(self.player.setPlaybackRate)

        self.player.stateChanged.connect(controls.setState)
        self.player.volumeChanged.connect(controls.setVolume)
        self.player.mutedChanged.connect(controls.setMuted)

        displayLayout = QHBoxLayout()
        displayLayout.addWidget(self.playlistView)

        controlLayout = QHBoxLayout()
        controlLayout.setContentsMargins(0, 0, 0, 0)
        controlLayout.addWidget(openButton)
        controlLayout.addWidget(clearButton)
#        controlLayout.addStretch(1)
        controlLayout.addWidget(controls)
#        controlLayout.addStretch(1)

        layout = QVBoxLayout()
        layout.addLayout(displayLayout)
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.slider)
        hLayout.addWidget(self.labelDuration)
        layout.addLayout(hLayout)
        layout.addLayout(controlLayout)

        self.statusBar = QStatusBar()
        vlayout = QVBoxLayout()
        vlayout.addWidget(self.statusBar)
        layout.addLayout(vlayout)
        self.statusBar.showMessage("Welcome")
        self.setWindowTitle("QAudioPlayer")
        self.setMinimumSize(300, 200)
#        self.setBackgroundRole(QPalette.Window)
        self.setContentsMargins(0,0,0,0)
        self.setLayout(layout)
        self.readSettings()

        if not self.player.isAvailable():
            QMessageBox.warning(self, "Service not available",
                    "The QMediaPlayer object does not have a valid service.\n"
                    "Please check the media service plugins are installed.")

            controls.setEnabled(False)
            self.playlistView.setEnabled(False)
            openButton.setEnabled(False)
            self.colorButton.setEnabled(False)
            self.fullScreenButton.setEnabled(False)

        self.metaDataChanged()

        self.addToPlaylist(playlist)
    def createVmessSettingPanel(self):
        labelDetourTo = QLabel(
            self.translate("InboundVmessPanel", "Detour To InboundDetour: "), self)
        self.comboBoxInVmessInboundTags = QComboBox()
        self.checkBoxdisableInsecureEncryption = QCheckBox(
            self.translate("InboundVmessPanel", "Disable Insecure Encryption"), self)
        self.checkBoxdisableInsecureEncryption.setChecked(False)
        
        labelEmail    = QLabel(
            self.translate("InboundVmessPanel", "Email: "), self)
        self.lineEditInVmessMail   = QLineEdit()
        labelUIID     = QLabel(
            self.translate("InboundVmessPanel", "UUID: "), self)
        self.lineEditInVmessUUID   = QLineEdit()
        labelAlterID  = QLabel(
            self.translate("InboundVmessPanel", "AlterID: "), self)
        labelLevel    = QLabel(
            self.translate("InboundVmessPanel", "Level: "), self)
        self.btnInVmessGenerate    = QPushButton(
            self.translate("InboundVmessPanel", "Generate UUID"), self)
        self.btnInVmessChange      = QPushButton(
            self.translate("InboundVmessPanel", "Modify"), self)
        self.btnInVmessClear       = QPushButton(
            self.translate("InboundVmessPanel", "Clear"), self)
        self.btnInVmessAdd         = QPushButton(
            self.translate("InboundVmessPanel", "Add"), self)
        self.btnInVmessDelete      = QPushButton(
            self.translate("InboundVmessPanel", "Delete"), self)
        self.spinBoxInVmessLevel   = QSpinBox()
        self.spinBoxInVmessAlterID = QSpinBox()
        
        self.spinBoxInVmessAlterID.setRange(0, 65535)
        self.spinBoxInVmessLevel.setRange(0, 65535)
        self.spinBoxInVmessLevel.setValue(10)
        self.spinBoxInVmessAlterID.setValue(30)
        self.lineEditInVmessUUID.setInputMask("HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH; ")
        self.comboBoxInVmessInboundTags.setView(QListView())
        #self.comboBoxInVmessInboundTags.setStyleSheet("QComboBox {min-width: 128px; }" "QComboBox QAbstractItemView::item {min-width: 128px; }")
        
        hboxDetourTo = QHBoxLayout()
        hboxDetourTo.addWidget(labelDetourTo)
        hboxDetourTo.addWidget(self.comboBoxInVmessInboundTags)
        #hboxDetourTo.addStretch()
        
        hboxID = QHBoxLayout()
        hboxID.addWidget(labelUIID)
        hboxID.addWidget(self.lineEditInVmessUUID)
        hboxID.addWidget(self.btnInVmessGenerate)
        
        hboxLevel = QHBoxLayout()
        hboxLevel.addWidget(labelLevel)
        hboxLevel.addWidget(self.spinBoxInVmessLevel)
        hboxLevel.addWidget(labelAlterID)
        hboxLevel.addWidget(self.spinBoxInVmessAlterID)
        hboxLevel.addStretch()
        
        hboxEmail = QHBoxLayout()
        hboxEmail.addWidget(labelEmail)
        hboxEmail.addWidget(self.lineEditInVmessMail)
        
        vboxInVmessBtn = QVBoxLayout()
        vboxInVmessBtn.addStretch()
        vboxInVmessBtn.addWidget(self.btnInVmessAdd)
        vboxInVmessBtn.addWidget(self.btnInVmessClear)
        vboxInVmessBtn.addWidget(self.btnInVmessChange)
        vboxInVmessBtn.addWidget(self.btnInVmessDelete)
        
        vboxSetting = QVBoxLayout()
        vboxSetting.addLayout(hboxID)
        vboxSetting.addLayout(hboxLevel)
        vboxSetting.addLayout(hboxEmail)
        
        self.tableWidgetInVmessUser = tableWidgetUser = QTableWidget(self)
        tableWidgetUser.setRowCount(0)
        tableWidgetUser.setColumnCount(4)
        tableWidgetUser.setHorizontalHeaderLabels(self.labelUserVmessPanel)
        tableWidgetUser.setSelectionMode(QAbstractItemView.SingleSelection)
        tableWidgetUser.setSelectionBehavior(QAbstractItemView.SelectRows)
        tableWidgetUser.setEditTriggers(QAbstractItemView.NoEditTriggers)
        tableWidgetUser.horizontalHeader().setStretchLastSection(True)

        hboxTableWidgetUser = QHBoxLayout()
        hboxTableWidgetUser.addWidget(tableWidgetUser)
        hboxTableWidgetUser.addLayout(vboxInVmessBtn)
        
        vboxSetting.addLayout(hboxTableWidgetUser)
        
        self.groupBoxClientsSetting = groupBoxClientsSetting = QGroupBox(
            self.translate("InboundVmessPanel", "Clients: "), self)
        groupBoxClientsSetting.setLayout(vboxSetting)
        groupBoxClientsSetting.setCheckable(True)
        groupBoxClientsSetting.setChecked(True)
        
        vboxVmessPanel = QVBoxLayout()
        vboxVmessPanel.addLayout(hboxDetourTo)
        vboxVmessPanel.addWidget(self.checkBoxdisableInsecureEncryption)
        vboxVmessPanel.addWidget(self.createVmessDefaultSettingPanel())
        vboxVmessPanel.addWidget(groupBoxClientsSetting)
        
        if (v2rayshellDebug):
            self.__debugBtn = QPushButton("__debugTest", self)
            vboxVmessPanel.addWidget(self.__debugBtn)
            self.__debugBtn.clicked.connect(self.__debugTest)
            self.settingInboundVmessPanelFromJSONFile(self.inboundVmessJSONFile, True)
       
        groupBoxVmessPanel = QGroupBox(
            self.translate("InboundVmessPanel", "Vmess"), self)
        groupBoxVmessPanel.setLayout(vboxVmessPanel)

        self.createVmessPanelSignals()

        return groupBoxVmessPanel
Exemple #44
0
class TeamChooserWidget(QWidget):
    def __init__(self, parent, on_next, league=None):
        super().__init__(parent)
        self.layout = QVBoxLayout()
        self.list_view = QListView()
        self.league = league
        self.model = TeamListModel(league)
        self.list_view.setModel(self.model)
        self.list_view.setSelectionMode(QAbstractItemView.MultiSelection)
        self.list_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.list_view.customContextMenuRequested.connect(self.list_context_menu)
        self.layout.addWidget(self.list_view)
        self.team_add = AddItemWidget(self, "New Team Name: ", self.add_team, unavailable_options=self.model.all_team_names)
        self.layout.addWidget(self.team_add)

        self.button_h_layout = QHBoxLayout()
        self.button_cancel = QPushButton("Cancel")
        self.button_cancel.clicked.connect(self.on_cancel)
        self.button_next = QPushButton("Next")
        self.button_next.clicked.connect(on_next)
        self.button_h_layout.addWidget(self.button_cancel)
        self.button_h_layout.addWidget(self.button_next)
        self.layout.addLayout(self.button_h_layout)
        self.setLayout(self.layout)
        self.new_teams = []

    def add_team(self, name):
        self.new_teams.append(name)
        team = Team.create(name=name)
        self.model.add_team(team)

    def list_context_menu(self, pos):
        self.listMenu = QMenu()
        current_index = self.list_view.currentIndex()
        select = self.listMenu.addAction("Select")
        select.triggered.connect(
            lambda: self.list_view.selectionModel().select(current_index, QtCore.QItemSelectionModel.Select)
        )

        deselect = self.listMenu.addAction("Deselect")
        deselect.triggered.connect(
            lambda: self.list_view.selectionModel().select(current_index, QtCore.QItemSelectionModel.Deselect)
        )
        delete = self.listMenu.addAction("Delete")
        delete.setDisabled(current_index.data() not in self.new_teams)
        delete.triggered.connect(lambda: self.model.delete_team(current_index.row()))

        parentPosition = self.list_view.mapToGlobal(QtCore.QPoint(0, 0))
        self.listMenu.move(parentPosition + pos)
        self.listMenu.show()

    def on_cancel(self):
        self.model.delete_added_teams()
        self.window().close()

    def get_selected_teams(self):
        teams = []
        for i in self.list_view.selectedIndexes():
            teams.append(self.model.get_team(i.row()))
        return teams
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.biography = OrderedDict()
        self.family = OrderedDict()
        # create widgets
        self.classes_lbl = QLabel(self)
        self.class_list = QListView(self)
        self.add_class_btn = QPushButton(self)
        self.students_lbl = QLabel(self)
        self.faves_only_chb = QCheckBox(self)
        self.student_list = QListView(self)
        self.name_lbl = QLabel("Jane Wayne", self)
        self.sex_icon = QLabel(self)
        self.age_lbl = QLabel(self)
        self.birthday_lbl = QLabel(self)
        self.personality_lbl = QLabel(self)
        self.club_lbl = QLabel(self)
        self.location_lbl = QLabel(self)
        for key in ("age", "birthday", "personality", "club", "location"):
            self.biography[key] = QLabel(self)
        for key in ("father", "mother", "siblings"):
            self.family[key] = QLabel(self)
        self.grades_lbl = QLabel(self)
        self.grades_list = cmn.QProgressList(
            translation_context="school subjects", parent=self)
        for name in world.subjects():
            self.grades_list.addBar(name)
        self.student_view = QGraphicsView(self)

        # create layout
        #        classesbox = QVBoxLayout()
        #        classesbox.addWidget(self.classes_lbl)
        #        classesbox.addWidget(self.class_list)
        #        classesbox.addWidget(self.add_class_btn)

        self.bio_form = QFormLayout()
        for key, field in self.biography.items():
            self.bio_form.addRow(key, field)

        self.family_form = QFormLayout()
        for key, field in self.family.items():
            self.family_form.addRow(key, field)

        layout = QGridLayout(self)
        layout.addWidget(self.classes_lbl, 0, 0)
        layout.addWidget(self.class_list, 1, 0, 3, 1)
        layout.addWidget(self.add_class_btn, 4, 0)
        #        layout.addLayout(classesbox, 0, 0, -1, 1)
        layout.addWidget(self.students_lbl, 0, 1)
        layout.addWidget(self.faves_only_chb, 0, 2)
        layout.addWidget(self.student_list, 1, 1, -1, 2)
        layout.addWidget(self.name_lbl, 0, 3)
        layout.addWidget(self.sex_icon, 0, 4)
        layout.addLayout(self.bio_form, 1, 3)
        layout.addLayout(self.family_form, 1, 4)
        layout.addWidget(self.grades_lbl, 2, 3)
        layout.addWidget(self.grades_list, 3, 3, -1, 2)
        layout.addWidget(self.student_view, 0, 5, -1, 1)

        layout.setColumnStretch(0, 2)
        layout.setColumnStretch(1, 1)
        layout.setColumnStretch(2, 1)
        layout.setColumnStretch(3, 2)
        layout.setColumnStretch(4, 2)
        layout.setColumnStretch(5, 4)

        # configure widgets
        self.retranslateUi()
        sizepol = self.add_class_btn.sizePolicy()
        sizepol.setHorizontalPolicy(QSizePolicy.Fixed)
        self.add_class_btn.setSizePolicy(sizepol)
Exemple #46
0
class LocationCompleterView(QWidget):
    def __init__(self):
        super().__init__(None)
        self._view = None  # QListView
        self._delegate = None  # LocationCompleterDelegate
        self._searchEnginesLayout = None  # QHBoxLayout
        self._resizeHeight = -1
        self._resizeTimer = None  # QTimer
        self._forceResize = True

        self.setAttribute(Qt.WA_ShowWithoutActivating)
        self.setAttribute(Qt.WA_X11NetWmWindowTypeCombo)

        if gVar.app.platformName() == 'xcb':
            self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint
                                | Qt.BypassWindowManagerHint)
        else:
            self.setWindowFlags(Qt.Popup)

        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        self._view = QListView(self)
        layout.addWidget(self._view)

        self._view.setUniformItemSizes(True)
        self._view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self._view.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
        self._view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self._view.setSelectionBehavior(QAbstractItemView.SelectRows)
        self._view.setSelectionMode(QAbstractItemView.SingleSelection)

        self._view.setMouseTracking(True)
        gVar.app.installEventFilter(self)

        self._delegate = LocationCompleterDelegate(self)
        self._view.setItemDelegate(self._delegate)

        searchFrame = QFrame(self)
        searchFrame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised)
        searchLayout = QHBoxLayout(searchFrame)
        searchLayout.setContentsMargins(10, 4, 4, 4)

        searchSettingsButton = ToolButton(self)
        searchSettingsButton.setIcon(IconProvider.settingsIcon())
        searchSettingsButton.setToolTip(_('Manage Search Engines'))
        searchSettingsButton.setAutoRaise(True)
        searchSettingsButton.setIconSize(QSize(16, 16))
        searchSettingsButton.clicked.connect(self.searchEnginesDialogRequested)

        searchLabel = QLabel(_('Search with:'))
        self._searchEnginesLayout = QHBoxLayout()

        self._setupSearchEngines()
        gVar.app.searchEnginesManager().enginesChanged.connect(
            self._setupSearchEngines)

        searchLayout.addWidget(searchLabel)
        searchLayout.addLayout(self._searchEnginesLayout)
        searchLayout.addStretch()
        searchLayout.addWidget(searchSettingsButton)

        layout.addWidget(searchFrame)

    def model(self):
        '''
        @return: QAbstractItemModel
        '''
        return self._view.model()

    def setModel(self, model):
        '''
        @param model QAbstractItemModel
        '''
        self._view.setModel(model)

    def selectionModel(self):
        '''
        @return: QItemSelectionModel
        '''
        return self._view.selectionModel()

    def currentIndex(self):
        '''
        @return: QModelIndex
        '''
        return self._view.currentIndex()

    def setCurrentIndex(self, index):
        '''
        @param index QModelIndex
        '''
        self._view.setCurrentIndex(index)

    def adjustSize(self):
        maxItemsCount = 12
        newHeight = self._view.sizeHintForRow(0) * min(maxItemsCount,
                                                       self.model().rowCount())

        if not self._resizeTimer:
            self._resizeTimer = QTimer(self)
            self._resizeTimer.setInterval(200)

            def func():
                if self._resizeHeight > 0:
                    self._view.setFixedHeight(self._resizeHeight)
                    self.setFixedHeight(self.sizeHint().height())
                self._resizeHeight = -1

            self._resizeTimer.timeout.connect(func)

        if not self._forceResize:
            if newHeight == self._resizeHeight:
                return
            elif newHeight == self._view.height():
                self._resizeHeight = -1
                return
            elif newHeight < self._view.height():
                self._resizeHeight = newHeight
                self._resizeTimer.start()
                return

        self._resizeHeight = -1
        self._forceResize = False
        self._view.setFixedHeight(newHeight)
        self.setFixedHeight(self.sizeHint().height())

    # override
    def eventFilter(self, obj, event):  # noqa C901
        '''
        @param obj QObject
        @param event QEvent
        @return: bool
        '''
        # Event filter based on QCompleter::eventFilter from qcompleter.cpp
        if obj == self or obj == self._view or not self.isVisible():
            return False

        evtType = event.type()
        if obj == self._view.viewport():
            if evtType == QEvent.MouseButtonRelease:
                # QMouseEvent
                e = event
                index = self._view.indexAt(e.pos())
                if not index.isValid():
                    return False

                # Qt::MouseButton
                button = e.button()
                # Qt::KeyboardModifiers
                modifiers = e.modifiers()

                if button == Qt.LeftButton and modifiers == Qt.NoModifier:
                    self.indexActivated.emit(index)
                    return True

                if button == Qt.MiddleButton or (button == Qt.LeftButton
                                                 and modifiers
                                                 == Qt.ControlModifier):
                    self.indexCtrlActivated.emit(index)
                    return True

                if button == Qt.LeftButton and modifiers == Qt.ShiftModifier:
                    self.indexShiftActivated.emit(index)
                    return True

            return False

        if evtType == QEvent.KeyPress:
            # QKeyEvent
            keyEvent = event
            evtKey = keyEvent.key()
            modifiers = keyEvent.modifiers()
            index = self._view.currentIndex()
            item = self.model().index(0, 0)
            if item.data(LocationCompleterModel.VisitSearchItemRole):
                visitSearchIndex = item
            else:
                visitSearchIndex = QModelIndex()

            if (evtKey == Qt.Key_Up or evtKey == Qt.Key_Down) and \
                    self._view.currentIndex() != index:
                self._view.setCurrentIndex(index)  # TODO: ?

            if evtKey in (Qt.Key_Return, Qt.Key_Enter):
                if index.isValid():
                    if modifiers == Qt.NoModifier or modifiers == Qt.KeypadModifier:
                        self.indexActivated.emit(index)
                        return True

                    if modifiers == Qt.ControlModifier:
                        self.indexCtrlActivated.emit(index)
                        return True

                    if modifiers == Qt.ShiftModifier:
                        self.indexShiftActivated.emit(index)
                        return True

            elif evtKey == Qt.Key_End:
                if modifiers & Qt.ControlModifier:
                    self._view.setCurrentIndex(self.model().index(
                        self.model().rowCount() - 1, 0))
                    return True
                else:
                    self.close()

            elif evtKey == Qt.Key_Home:
                if modifiers & Qt.ControlModifier:
                    self._view.setCurrentIndex(self.model().index(0, 0))
                    self._view.scrollToTop()
                    return True
                else:
                    self.close()

            elif evtKey == Qt.Key_Escape:
                self.close()
                return True

            elif evtKey == Qt.Key_F4:
                if modifiers == Qt.AltModifier:
                    self.close()
                    return False

            elif evtKey in (Qt.Key_Tab, Qt.Key_Backtab):
                if modifiers != Qt.NoModifier and modifiers != Qt.ShiftModifier:
                    return False
                isBack = evtKey == Qt.Key_Backtab
                if evtKey == Qt.Key_Tab and modifiers == Qt.ShiftModifier:
                    isBack = True
                ev = QKeyEvent(QKeyEvent.KeyPress, isBack and Qt.Key_Up
                               or Qt.Key_Down, Qt.NoModifier)
                QApplication.sendEvent(self.focusProxy(), ev)
                return True

            elif evtKey in (Qt.Key_Up, Qt.Key_PageUp):
                if modifiers != Qt.NoModifier:
                    return False
                step = evtKey == Qt.Key_PageUp and 5 or 1
                if not index.isValid() or index == visitSearchIndex:
                    rowCount = self.model().rowCount()
                    lastIndex = self.model().index(rowCount - 1, 0)
                    self._view.setCurrentIndex(lastIndex)
                elif index.row() == 0:
                    self._view.setCurrentIndex(QModelIndex())
                else:
                    row = max(0, index.row() - step)
                    self._view.setCurrentIndex(self.model().index(row, 0))
                return True

            elif evtKey in (Qt.Key_Down, Qt.Key_PageDown):
                if modifiers != Qt.NoModifier:
                    return False
                step = evtKey == Qt.Key_PageDown and 5 or 1
                if not index.isValid():
                    firstIndex = self.model().index(0, 0)
                    self._view.setCurrentIndex(firstIndex)
                elif index != visitSearchIndex and index.row(
                ) == self.model().rowCount() - 1:
                    self._view.setCurrentIndex(visitSearchIndex)
                    self._view.scrollToTop()
                else:
                    row = min(self.model().rowCount() - 1, index.row() + step)
                    self._view.setCurrentIndex(self.model().index(row, 0))
                return True

            elif evtKey == Qt.Key_Delete:
                if index != visitSearchIndex and self._view.viewport().rect(
                ).contains(self._view.visualRect(index)):
                    self.indexDeleteRequested.emit(index)
                    return True

            elif evtKey == Qt.Key_Shift:
                self._delegate.setForceVisitItem(True)
                self._view.viewport().update()

            # end of switch evtKey

            if self.focusProxy():
                self.focusProxy().event(keyEvent)

            return True

        elif evtType == QEvent.KeyRelease:
            if event.key() == Qt.Key_Shift:
                self._delegate.setForceVisitItem(False)
                self._view.viewport().update()
                return True

        elif evtType in (QEvent.Wheel, QEvent.MouseButtonPress):
            if not self.underMouse():
                self.close()
                return False

        elif evtType == QEvent.FocusOut:
            # QFocusEvent
            focusEvent = event
            reason = focusEvent.reason()
            if reason != Qt.PopupFocusReason and reason != Qt.MouseFocusReason:
                self.close()

        elif evtType in (QEvent.Move, QEvent.Resize):
            w = obj
            if isinstance(w, QWidget) and w.isWindow() and self.focusProxy(
            ) and w == self.focusProxy().window():
                self.close()

        # end of switch evtType
        return False

    # Q_SIGNALS
    closed = pyqtSignal()
    searchEnginesDialogRequested = pyqtSignal()
    loadRequested = pyqtSignal(LoadRequest)

    indexActivated = pyqtSignal(QModelIndex)
    indexCtrlActivated = pyqtSignal(QModelIndex)
    indexShiftActivated = pyqtSignal(QModelIndex)
    indexDeleteRequested = pyqtSignal(QModelIndex)

    # public Q_SLOTS:
    def close(self):
        self.hide()
        self._view.verticalScrollBar().setValue(0)
        self._delegate.setForceVisitItem(False)
        self._forceResize = True

        self.closed.emit()

    # private:
    def _setupSearchEngines(self):
        for idx in (range(self._searchEnginesLayout.count())):
            item = self._searchEnginesLayout.takeAt(0)
            item.deleteLater()

        engines = gVar.app.searchEnginesManager().allEngines()
        for engine in engines:
            button = ToolButton(self)
            button.setIcon(engine.icon)
            button.setToolTip(engine.name)
            button.setAutoRaise(True)
            button.setIconSize(QSize(16, 16))

            def func():
                text = self.model().index(0, 0).data(
                    LocationCompleterModel.SearchStringRole)
                self.loadRequested.emit(
                    gVar.app.searchEngineManager().searchResult(engine, text))

            button.clicked.connect(func)
            self._searchEnginesLayout.addWidget(button)
Exemple #47
0
class VistaListaManutenzioni(QWidget):
    def __init__(self, callback):
        super(VistaListaManutenzioni, self).__init__()

        # Funzione di richiamo della vista precedente
        self.callback = callback

        # Controller dell'attrezzatura importante per effettuare le varie funzioni
        self.controller_elenco_manutenzioni = ControllerElencoManutenzioni()

        # Layout usati per visualizzare e allineare l'intera vista
        self.layout_verticale = QVBoxLayout()
        self.layout_orizzontale = QHBoxLayout()

        # Lista manutenzioni
        self.vista_elenco = QListView()

        # Funzione standard che imposta uno sfondo immagine e un titolo nella attuale vista
        self.show_background("ELENCO MANUTENZIONI")

        # Spaziatura orizzontale
        self.layout_orizzontale.addSpacerItem(QSpacerItem(100, 0))

        # Creazione e allineamento lista delle manutenzioni aggiornata
        vista_lista_aggiornata = self.aggiorna()
        self.layout_orizzontale.addWidget(vista_lista_aggiornata)

        # Configurazione e allineamento dei pulsanti
        self.show_pulsantiera()
        self.layout_orizzontale.addSpacerItem(QSpacerItem(150, 0))

        # Configurazione finale del layout totale
        self.layout_verticale.addLayout(self.layout_orizzontale)
        self.layout_verticale.addSpacerItem(QSpacerItem(0, 400))
        self.setLayout(self.layout_verticale)
        self.setWindowTitle('Elenco Manutenzioni')

    # Resetta la lista delle manutenzioni aggiungendo le eventuali modifiche, e gestione dei colori
    def aggiorna(self):
        vista_lista_model = QStandardItemModel(self.vista_elenco)
        for manutenzione in self.controller_elenco_manutenzioni.get_elenco_manutenzioni(
        ):
            item = QStandardItem()
            oggi = date.today()
            scadenza = manutenzione.get_prossima_scadenza()
            nome = manutenzione.get_nome()
            stringa = str(nome)
            # Colore della label cambia a seconda dell'urgenza della manutenzione
            if oggi > scadenza:
                item.setForeground(QColor(255, 0, 0))
                stringa += " [URGENTE]"
            if scadenza == oggi:
                item.setForeground(QColor(255, 200, 0))
            elif scadenza > oggi:
                item.setForeground(QColor(0, 255, 0))
            item.setText(stringa)
            item.setEditable(False)
            item.setFont(QFont('Times New Roman', 25, 100))
            item.setTextAlignment(Qt.AlignCenter)
            vista_lista_model.appendRow(item)
        self.vista_elenco.setModel(vista_lista_model)
        self.vista_elenco.setStyleSheet("background-color: black")
        return self.vista_elenco

    # Metodo che permette, cliccando il bottone "indietro", di tornare alla vista precedente
    def indietro(self):
        self.callback()
        self.controller_elenco_manutenzioni.salva_dati()
        self.close()

    # Impostazione dello sfondo e del titolo
    def show_background(self, stringa):
        # Settaggio e ridimensionamento dell'immagine di sfondo dell'attuale vista
        self.setFixedWidth(QDesktopWidget().width())
        self.setFixedHeight(QDesktopWidget().height())
        back_img = QImage("Data/Immagini/VistaListaManutenzioni.jpg")
        img = back_img.scaled(self.width(), self.height())
        palette = QPalette()
        palette.setBrush(10, QBrush(img))
        self.setPalette(palette)

        # Settaggio e allineamento del titolo della vista
        titolo = QLabel(stringa)
        titolo.setStyleSheet("color: white")
        titolo.setAlignment(Qt.AlignCenter)
        titolo.setFont(QFont('Times New Roman', 60))
        self.layout_verticale.addSpacerItem(
            QSpacerItem(0, 50, QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.layout_verticale.addWidget(titolo)
        self.layout_verticale.addSpacerItem(
            QSpacerItem(0, 100, QSizePolicy.Fixed, QSizePolicy.Fixed))

    # Metodo per creazione, stile e funzionamento dei bottoni indietro e apri
    def show_pulsantiera(self):
        # Layout interni utilizzati per l'allineamento dei tre pulsanti
        layout_pulsanti = QVBoxLayout()

        # Configurazione del pulsante Apri
        pulsante_apri = self.pulsante("Apri", self.manutenzione_selezionata)
        layout_pulsanti.addWidget(pulsante_apri)

        # Configurazione del pulsante Indietro
        pulsante_indietro = self.pulsante("Indietro", self.indietro)
        layout_pulsanti.addWidget(pulsante_indietro)

        # Inserimento e allineamento dei tre pulsanti del layout globale
        layout_pulsanti.addSpacerItem(QSpacerItem(0, 50))
        self.layout_orizzontale.addLayout(layout_pulsanti)

    # Metodo interno per standardizzare e semplificare la creazione di un pulsante
    def pulsante(self, nome, call):
        pulsante = QPushButton(nome)
        pulsante.setFont(QFont('Times New Roman', 20, 100, True))
        pulsante.setStyleSheet(
            'QPushButton {background-color: orange; color: black;}')
        pulsante.setFixedSize(250, 100)
        pulsante.clicked.connect(call)
        return pulsante

    # Metodo che controlla che venga selezionata una manutenzione al click di "apri"
    def manutenzione_selezionata(self):
        try:
            selezionata = self.vista_elenco.selectedIndexes()[0].row()
            lista = self.controller_elenco_manutenzioni.get_elenco_manutenzioni(
            )
            manutenzione = lista[selezionata]
            self.vista_informazioni_manutenzione = VistaManutenzione(
                manutenzione, self.controller_elenco_manutenzioni.salva_dati,
                self.aggiorna)
            self.vista_informazioni_manutenzione.show()

        except IndexError:
            QMessageBox.information(
                self, 'Attenzione!',
                'Non hai selezionato nessuna manutenzione da visualizzare.',
                QMessageBox.Ok, QMessageBox.Ok)
        except:
            QMessageBox.critical(
                self, 'Errore!',
                'Qualcosa è andato storto, riprova più tardi.', QMessageBox.Ok,
                QMessageBox.Ok)
Exemple #48
0
class Player(QWidget):

    fullScreenChanged = pyqtSignal(bool)

    def __init__(self, playlist, parent=None):
        super(Player, self).__init__(parent)
        self.setStyleSheet(stylesheet(self))
        self.colorDialog = None
        self.trackInfo = ""
        self.statusInfo = ""
        self.duration = 0

        self.url = ""
        self. settings = QSettings("QAudioPlayer", "QAudioPlayer")

        self.player = QMediaPlayer()
        self.playlist = QMediaPlaylist()
        self.player.setPlaylist(self.playlist)

        self.player.durationChanged.connect(self.durationChanged)
        self.player.positionChanged.connect(self.positionChanged)
        self.player.metaDataChanged.connect(self.metaDataChanged)
        self.playlist.currentIndexChanged.connect(self.playlistPositionChanged)
        self.player.mediaStatusChanged.connect(self.statusChanged)
        self.player.bufferStatusChanged.connect(self.bufferingProgress)
        self.player.error.connect(self.displayErrorMessage)

        self.playlistModel = PlaylistModel()
        self.playlistModel.setPlaylist(self.playlist)

        self.playlistView = QListView()
#        self.playlistView.setSpacing(1)
        self.playlistView.setStyleSheet(stylesheet(self))
        self.playlistView.setModel(self.playlistModel)
        self.playlistView.setCurrentIndex(
                self.playlistModel.index(self.playlist.currentIndex(), 0))

        self.playlistView.activated.connect(self.jump)

        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0, self.player.duration() / 1000)
        self.slider.setStyleSheet(stylesheet(self))

        self.labelDuration = QLabel()
        self.slider.sliderMoved.connect(self.seek)

        openButton = QPushButton("Open", clicked=self.open)
        openButton.setIcon(openButton.style().standardIcon(QStyle.SP_DialogOpenButton))

        clearButton = QPushButton("", clicked=self.clearList)
        clearButton.setFixedWidth(36)
        clearButton.setIcon(QIcon.fromTheme("edit-delete"))
        clearButton.setToolTip("clear List")

        controls = PlayerControls()
        controls.setState(self.player.state())
        controls.setVolume(self.player.volume())
        controls.setMuted(controls.isMuted())

        controls.play.connect(self.player.play)
        controls.pause.connect(self.player.pause)
        controls.stop.connect(self.player.stop)
        controls.next.connect(self.playlist.next)
        controls.previous.connect(self.previousClicked)
        controls.changeVolume.connect(self.player.setVolume)
        controls.changeMuting.connect(self.player.setMuted)
        controls.changeRate.connect(self.player.setPlaybackRate)

        self.player.stateChanged.connect(controls.setState)
        self.player.volumeChanged.connect(controls.setVolume)
        self.player.mutedChanged.connect(controls.setMuted)

        displayLayout = QHBoxLayout()
        displayLayout.addWidget(self.playlistView)

        controlLayout = QHBoxLayout()
        controlLayout.setContentsMargins(0, 0, 0, 0)
        controlLayout.addWidget(openButton)
        controlLayout.addWidget(clearButton)
#        controlLayout.addStretch(1)
        controlLayout.addWidget(controls)
#        controlLayout.addStretch(1)

        layout = QVBoxLayout()
        layout.addLayout(displayLayout)
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.slider)
        hLayout.addWidget(self.labelDuration)
        layout.addLayout(hLayout)
        layout.addLayout(controlLayout)

        self.statusBar = QStatusBar()
        vlayout = QVBoxLayout()
        vlayout.addWidget(self.statusBar)
        layout.addLayout(vlayout)
        self.statusBar.showMessage("Welcome")
        self.setWindowTitle("QAudioPlayer")
        self.setMinimumSize(300, 200)
#        self.setBackgroundRole(QPalette.Window)
        self.setContentsMargins(0,0,0,0)
        self.setLayout(layout)
        self.readSettings()

        if not self.player.isAvailable():
            QMessageBox.warning(self, "Service not available",
                    "The QMediaPlayer object does not have a valid service.\n"
                    "Please check the media service plugins are installed.")

            controls.setEnabled(False)
            self.playlistView.setEnabled(False)
            openButton.setEnabled(False)
            self.colorButton.setEnabled(False)
            self.fullScreenButton.setEnabled(False)

        self.metaDataChanged()

        self.addToPlaylist(playlist)

    def readSettings(self):
        if self.settings.contains("url"):
            self.url = self.settings.value("url")
            self.addToPlaylist(self.url)

    def writeSettings(self):
        self.settings.setValue("url", self.url)

    def closeEvent(self, event):
        print("writing settings")
        self.writeSettings()
        print("goodbye ...")
        event.accept()

    def open(self):
        fileNames, _ = QFileDialog.getOpenFileNames(self, "Open Files", "/home", "Audio Files *.mp3 *.m4a *.ogg *.wav *.m3u")
        if fileNames:
            self.url = fileNames
            self.addToPlaylist(fileNames)
            print("added Files to playlist")

    def openOnStart(self, name):
        fileInfo = QFileInfo(name)
        if fileInfo.exists():
            url = QUrl.fromLocalFile(fileInfo.absoluteFilePath())
            if fileInfo.suffix().lower() == 'm3u':
                self.playlist.load(url)
            else:
                self.playlist.addMedia(QMediaContent(url))
        else:
            url = QUrl(name)
            if url.isValid():
                self.playlist.addMedia(QMediaContent(url))
        print("added Files to playlist")

    def clearList(self):
        self.playlist.clear()

    def addToPlaylist(self, fileNames):
        for name in fileNames:
            fileInfo = QFileInfo(name)
            if fileInfo.exists():
                url = QUrl.fromLocalFile(fileInfo.absoluteFilePath())
                if fileInfo.suffix().lower() == 'm3u':
                    self.playlist.load(url)
                else:
                    self.playlist.addMedia(QMediaContent(url))
            else:
                url = QUrl(name)
                if url.isValid():
                    self.playlist.addMedia(QMediaContent(url))

    def durationChanged(self, duration):
        duration /= 1000

        self.duration = duration
        self.slider.setMaximum(duration)

    def positionChanged(self, progress):
        progress /= 1000

        if not self.slider.isSliderDown():
            self.slider.setValue(progress)

        self.updateDurationInfo(progress)

    def metaDataChanged(self):
        if self.player.isMetaDataAvailable():
            self.setTrackInfo("%s - %s" % (
                    self.player.metaData(QMediaMetaData.AlbumArtist),
                    self.player.metaData(QMediaMetaData.Title)))

    def previousClicked(self):
        # Go to the previous track if we are within the first 5 seconds of
        # playback.  Otherwise, seek to the beginning.
        if self.player.position() <= 5000:
            self.playlist.previous()
        else:
            self.player.setPosition(0)

    def jump(self, index):
        if index.isValid():
            self.playlist.setCurrentIndex(index.row())
            self.player.play()

    def playlistPositionChanged(self, position):
        self.playlistView.setCurrentIndex(
                self.playlistModel.index(position, 0))

    def seek(self, seconds):
        self.player.setPosition(seconds * 1000)

    def statusChanged(self, status):
        self.handleCursor(status)

        if status == QMediaPlayer.LoadingMedia:
            self.setStatusInfo("Loading...")
        elif status == QMediaPlayer.StalledMedia:
            self.setStatusInfo("Media Stalled")
        elif status == QMediaPlayer.EndOfMedia:
            QApplication.alert(self)
        elif status == QMediaPlayer.InvalidMedia:
            self.displayErrorMessage()
        else:
            self.setStatusInfo("")

    def handleCursor(self, status):
        if status in (QMediaPlayer.LoadingMedia, QMediaPlayer.BufferingMedia, QMediaPlayer.StalledMedia):
            self.setCursor(Qt.BusyCursor)
        else:
            self.unsetCursor()

    def bufferingProgress(self, progress):
        self.setStatusInfo("Buffering %d%" % progress)

    def setTrackInfo(self, info):
        self.trackInfo = info

        if self.statusInfo != "":
             self.statusBar.showMessage("%s | %s" % (self.trackInfo, self.statusInfo))
        else:
            self.statusBar.showMessage(self.trackInfo)

    def setStatusInfo(self, info):
        self.statusInfo = info

        if self.statusInfo != "":
            self.statusBar.showMessage("%s | %s" % (self.trackInfo, self.statusInfo))
        else:
            self.statusBar.showMessage(self.trackInfo)

    def displayErrorMessage(self):
        self.setStatusInfo(self.player.errorString())

    def updateDurationInfo(self, currentInfo):
        duration = self.duration
        if currentInfo or duration:
            currentTime = QTime((currentInfo/3600)%60, (currentInfo/60)%60,
                    currentInfo%60, (currentInfo*1000)%1000)
            totalTime = QTime((duration/3600)%60, (duration/60)%60,
                    duration%60, (duration*1000)%1000);

            format = 'hh:mm:ss' if duration > 3600 else 'mm:ss'
            tStr = currentTime.toString(format) + " / " + totalTime.toString(format)
        else:
            tStr = ""

        self.labelDuration.setText(tStr)
Exemple #49
0
    def __init__(self):
        super().__init__(None)
        self._view = None  # QListView
        self._delegate = None  # LocationCompleterDelegate
        self._searchEnginesLayout = None  # QHBoxLayout
        self._resizeHeight = -1
        self._resizeTimer = None  # QTimer
        self._forceResize = True

        self.setAttribute(Qt.WA_ShowWithoutActivating)
        self.setAttribute(Qt.WA_X11NetWmWindowTypeCombo)

        if gVar.app.platformName() == 'xcb':
            self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint
                                | Qt.BypassWindowManagerHint)
        else:
            self.setWindowFlags(Qt.Popup)

        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        self._view = QListView(self)
        layout.addWidget(self._view)

        self._view.setUniformItemSizes(True)
        self._view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self._view.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
        self._view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self._view.setSelectionBehavior(QAbstractItemView.SelectRows)
        self._view.setSelectionMode(QAbstractItemView.SingleSelection)

        self._view.setMouseTracking(True)
        gVar.app.installEventFilter(self)

        self._delegate = LocationCompleterDelegate(self)
        self._view.setItemDelegate(self._delegate)

        searchFrame = QFrame(self)
        searchFrame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised)
        searchLayout = QHBoxLayout(searchFrame)
        searchLayout.setContentsMargins(10, 4, 4, 4)

        searchSettingsButton = ToolButton(self)
        searchSettingsButton.setIcon(IconProvider.settingsIcon())
        searchSettingsButton.setToolTip(_('Manage Search Engines'))
        searchSettingsButton.setAutoRaise(True)
        searchSettingsButton.setIconSize(QSize(16, 16))
        searchSettingsButton.clicked.connect(self.searchEnginesDialogRequested)

        searchLabel = QLabel(_('Search with:'))
        self._searchEnginesLayout = QHBoxLayout()

        self._setupSearchEngines()
        gVar.app.searchEnginesManager().enginesChanged.connect(
            self._setupSearchEngines)

        searchLayout.addWidget(searchLabel)
        searchLayout.addLayout(self._searchEnginesLayout)
        searchLayout.addStretch()
        searchLayout.addWidget(searchSettingsButton)

        layout.addWidget(searchFrame)
Exemple #50
0
        mainLayout = QHBoxLayout(self)
        LeftWidget = QWidget(self)
        RightWidget = QWidget(self)
        BottomWidget = QWidget(self)

        LeftWidget.setLayout(self.LeftLay)
        RightWidget.setLayout(self.RightLay)
        BottomWidget.setLayout(self.BottomLay)

        self.HSplitter = QSplitter(Qt.Horizontal)
        self.HSplitter.addWidget(LeftWidget)
        self.HSplitter.addWidget(RightWidget)

        self.VSplitter = QSplitter(Qt.Vertical)
        self.VSplitter.addWidget(self.HSplitter)
        self.VSplitter.addWidget(BottomWidget)
        #self.HSplitter.setSizes([300,300])
        #self.VSplitter.setSizes([300,500])
        mainLayout.addWidget(self.VSplitter)
        self.setLayout(mainLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWidget()
    ex.LeftLay.addWidget(QListView(ex))
    ex.RightLay.addWidget(QTableView(ex))
    ex.BottomLay.addWidget(QTableView(ex))
    ex.show()
    sys.exit(app.exec_())
    def __init__(self):
        super().__init__()

        self.spark_logo = "      ____              __     / __/__  ___ _____/ /__    _\ \/ _ \/ _ `/ __/  '_/   /__ / .__/\_,_/_/ /_/\_\   version {version}      /_/".format(
            version=self.sc.version)

        for s in self.libraryListSource:
            s.flags = 0

        self._cachedDocuments = {}

        self.infoBox = gui.widgetBox(self.controlArea, 'Info')
        gui.label(
                self.infoBox, self,
                "<p>Execute python script.</p><p>Input variables:<ul><li> " + \
                "<li>".join(t for t in dir(self.Inputs) if isinstance(getattr(self.Inputs, t), widget.Input)) + \
                "</ul></p><p>Output variables:<ul><li>" + \
                "<li>".join(t for t in dir(self.Outputs) if isinstance(getattr(self.Outputs, t), widget.Output)) + \
                "</ul></p>"
        )

        self.libraryList = itemmodels.PyListModel(
            [],
            self,
            flags=Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable)
        self.libraryList.wrap(self.libraryListSource)

        self.controlBox = gui.widgetBox(self.controlArea, 'Library')
        self.controlBox.layout().setSpacing(1)

        self.libraryView = QListView(
            editTriggers=QListView.DoubleClicked | QListView.EditKeyPressed,
            sizePolicy=QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Preferred))
        self.libraryView.setItemDelegate(ScriptItemDelegate(self))
        self.libraryView.setModel(self.libraryList)

        self.libraryView.selectionModel().selectionChanged.connect(
            self.onSelectedScriptChanged)
        self.controlBox.layout().addWidget(self.libraryView)

        w = itemmodels.ModelActionsWidget()

        self.addNewScriptAction = action = QAction("+", self)
        action.setToolTip("Add a new script to the library")
        action.triggered.connect(self.onAddScript)
        w.addAction(action)

        action = QAction(unicodedata.lookup("MINUS SIGN"), self)
        action.setToolTip("Remove script from library")
        action.triggered.connect(self.onRemoveScript)
        w.addAction(action)

        action = QAction("Update", self)
        action.setToolTip("Save changes in the editor to library")
        action.setShortcut(QKeySequence(QKeySequence.Save))
        action.triggered.connect(self.commitChangesToLibrary)
        w.addAction(action)

        action = QAction("More", self, toolTip="More actions")

        new_from_file = QAction("Import a script from a file", self)
        save_to_file = QAction("Save selected script to a file", self)
        save_to_file.setShortcut(QKeySequence(QKeySequence.SaveAs))

        new_from_file.triggered.connect(self.onAddScriptFromFile)
        save_to_file.triggered.connect(self.saveScript)

        menu = QMenu(w)
        menu.addAction(new_from_file)
        menu.addAction(save_to_file)
        action.setMenu(menu)
        button = w.addAction(action)
        button.setPopupMode(QToolButton.InstantPopup)

        w.layout().setSpacing(1)

        self.controlBox.layout().addWidget(w)

        gui.auto_commit(self.controlArea, self, "auto_execute", "Execute")

        self.splitCanvas = QSplitter(Qt.Vertical, self.mainArea)
        self.mainArea.layout().addWidget(self.splitCanvas)

        self.defaultFont = defaultFont = "Monaco" if sys.platform == "darwin" else "Courier"

        self.textBox = gui.widgetBox(self, 'Python script')
        self.splitCanvas.addWidget(self.textBox)
        self.text = PythonScriptEditor(self)
        self.textBox.layout().addWidget(self.text)

        self.textBox.setAlignment(Qt.AlignVCenter)
        self.text.setTabStopWidth(4)

        self.text.modificationChanged[bool].connect(self.onModificationChanged)

        self.saveAction = action = QAction("&Save", self.text)
        action.setToolTip("Save script to file")
        action.setShortcut(QKeySequence(QKeySequence.Save))
        action.setShortcutContext(Qt.WidgetWithChildrenShortcut)
        action.triggered.connect(self.saveScript)

        self.consoleBox = gui.widgetBox(self, 'Console')
        self.splitCanvas.addWidget(self.consoleBox)

        # self.console = PySparkConsole(self.__dict__, self, sc = self.sc)
        self.console = EmbedIPython(sc=self.sc,
                                    hc=self.hc,
                                    sqlContext=self.sqlContext,
                                    data=self.data,
                                    df=self.df,
                                    df1=self.df1,
                                    df2=self.df2,
                                    df3=self.df3,
                                    transformer=self.transformer,
                                    estimator=self.estimator,
                                    model=self.model)
        # self.console.shell.run_cell('%pylab qt')
        self.console.shell.run_cell(
            'print("{sparklogo}")'.format(sparklogo=self.spark_logo))

        self.consoleBox.layout().addWidget(self.console)
        self.consoleBox.setAlignment(Qt.AlignBottom)

        select_row(self.libraryView, self.currentScriptIndex)

        self.splitCanvas.setSizes([2, 1])
        # if self.splitterState is not None:
        #     self.splitCanvas.restoreState(QByteArray(self.splitterState))
        #
        # self.splitCanvas.splitterMoved[int, int].connect(self.onSpliterMoved)
        self.controlArea.layout().addStretch(1)
        self.resize(800, 600)
Exemple #52
0
    def setupLayout(self, wid):
        # Auth related widget
        authlay = QHBoxLayout()

        hostLabel = QLabel('Host:')
        portLabel = QLabel('Port:')
        usernameLabel = QLabel('Username:'******'Password:'******'Connect', self)
        if self.debug:
            self.connectBtn.setEnabled(False)
        # self.connectBtn.setIcon(QApplication.style().standardIcon(QStyle.SP_DirIcon))

        authlay.addWidget(hostLabel)
        authlay.addWidget(self.hostInput)
        authlay.addWidget(portLabel)
        authlay.addWidget(self.portInput)
        authlay.addWidget(usernameLabel)
        authlay.addWidget(self.usernameInput)
        authlay.addWidget(passwordLabel)
        authlay.addWidget(self.passwordInput)
        authlay.addWidget(self.connectBtn)

        # Show commands in this widget
        commandlay = QVBoxLayout()

        commandLabel = QLabel('Command Window')

        self.commandText = QTextEdit()

        commandlay.addWidget(commandLabel)
        commandlay.addWidget(self.commandText)

        # Show local file and remote file in this widget
        locallay = QVBoxLayout()
        localpathlay = QHBoxLayout()
        remotelay = QVBoxLayout()
        remotepathlay = QHBoxLayout()

        localfileLabel = QLabel('Local File')
        remotefileLabel = QLabel('Remote File')

        self.localfileLine = QLineEdit()
        self.remotefileLine = QLineEdit()
        self.localfileList = QListView()
        self.remotefileList = QListView()
        # self.localfileReload = QPushButton()
        # self.remotefileReload = QPushButton()
        # self.localfileReload.setIcon(QApplication.style().standardIcon(QStyle.SP_BrowserReload))
        # self.remotefileReload.setIcon(QApplication.style().standardIcon(QStyle.SP_BrowserReload))

        localpathlay.addWidget(localfileLabel)
        localpathlay.addWidget(self.localfileLine)
        # localpathlay.addWidget(self.localfileReload)
        remotepathlay.addWidget(remotefileLabel)
        remotepathlay.addWidget(self.remotefileLine)
        # remotepathlay.addWidget(self.remotefileReload)

        locallay.addLayout(localpathlay)
        locallay.addWidget(self.localfileList)
        remotelay.addLayout(remotepathlay)
        remotelay.addWidget(self.remotefileList)

        localframe = QFrame(self)
        localframe.setFrameShape(QFrame.StyledPanel)
        localframe.setLayout(locallay)
        remoteframe = QFrame(self)
        remoteframe.setFrameShape(QFrame.StyledPanel)
        remoteframe.setLayout(remotelay)

        filesplitter = QSplitter(Qt.Horizontal)
        filesplitter.addWidget(localframe)
        filesplitter.addWidget(remoteframe)

        self.tasklist = QListWidget(self)

        # Set overall layout
        vlay = QVBoxLayout()

        authframe = QFrame(self)
        authframe.setFrameShape(QFrame.StyledPanel)
        authframe.setLayout(authlay)
        commandframe = QFrame(self)
        commandframe.setFrameShape(QFrame.StyledPanel)
        commandframe.setLayout(commandlay)

        topsplitter = QSplitter(Qt.Vertical)
        topsplitter.addWidget(authframe)
        topsplitter.addWidget(commandframe)
        topsplitter.addWidget(filesplitter)
        topsplitter.addWidget(self.tasklist)

        vlay.addWidget(topsplitter)

        wid.setLayout(vlay)
Exemple #53
0
    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        pasteBox = QHBoxLayout()
        self.textLine = QLineEdit()
        self.textLine.setToolTip('Current Director/selected File')
        self.pasteButton = QToolButton()
        self.pasteButton.setEnabled(False)
        self.pasteButton.setText('Paste')
        self.pasteButton.setToolTip('Copy file from copy path to current directory/file')
        self.pasteButton.clicked.connect(self.paste)
        self.pasteButton.hide()
        pasteBox.addWidget(self.textLine)
        pasteBox.addWidget(self.pasteButton)

        self.copyBox = QFrame()
        hbox = QHBoxLayout()
        hbox.setContentsMargins(0,0,0,0)
        self.copyLine = QLineEdit()
        self.copyLine.setToolTip('File path to copy from, when pasting')
        self.copyButton = QToolButton()
        self.copyButton.setText('Copy')
        self.copyButton.setToolTip('Record current file as copy path')
        self.copyButton.clicked.connect(self.recordCopyPath)
        hbox.addWidget(self.copyButton)
        hbox.addWidget(self.copyLine)
        self.copyBox.setLayout(hbox)
        self.copyBox.hide()

        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.currentPath())
        self.model.setFilter(QDir.AllDirs | QDir.NoDot | QDir.Files)
        self.model.setNameFilterDisables(False)
        self.model.rootPathChanged.connect(self.folderChanged)

        self.list = QListView()
        self.list.setModel(self.model)
        self.list.resize(640, 480)
        self.list.clicked[QModelIndex].connect(self.listClicked)
        self.list.activated.connect(self._getPathActivated)
        self.list.setAlternatingRowColors(True)
        self.list.hide()

        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.resize(640, 480)
        self.table.clicked[QModelIndex].connect(self.listClicked)
        self.table.activated.connect(self._getPathActivated)
        self.table.setAlternatingRowColors(True)

        header = self.table.horizontalHeader()
        header.setSectionResizeMode(0, QHeaderView.Stretch)
        header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
        header.setSectionResizeMode(3, QHeaderView.ResizeToContents)
        header.swapSections(1,3)
        header.setSortIndicator(1,Qt.AscendingOrder)

        self.table.setSortingEnabled(True)
        self.table.setColumnHidden(2, True) # type
        self.table.verticalHeader().setVisible(False) # row count header

        self.cb = QComboBox()
        self.cb.currentIndexChanged.connect(self.filterChanged)
        self.fillCombobox(INFO.PROGRAM_FILTERS_EXTENSIONS)
        self.cb.setMinimumSize(200,30)
        self.cb.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))

        self.button2 = QToolButton()
        self.button2.setText('User')
        self.button2.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.button2.setMinimumSize(60, 30)
        self.button2.setToolTip('Jump to User directory.\nLong press for Options.')
        self.button2.clicked.connect(self.onJumpClicked)

        self.button3 = QToolButton()
        self.button3.setText('Add Jump')
        self.button3.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.button3.setMinimumSize(60, 30)
        self.button3.setToolTip('Add current directory to jump button list')
        self.button3.clicked.connect(self.onActionClicked)

        self.settingMenu = QMenu(self)
        self.button2.setMenu(self.settingMenu)

        hbox = QHBoxLayout()
        hbox.addWidget(self.button2)
        hbox.addWidget(self.button3)
        hbox.insertStretch (2, stretch = 0)
        hbox.addWidget(self.cb)

        windowLayout = QVBoxLayout()
        windowLayout.addLayout(pasteBox)
        windowLayout.addWidget(self.copyBox)
        windowLayout.addWidget(self.list)
        windowLayout.addWidget(self.table)
        windowLayout.addLayout(hbox)
        self.setLayout(windowLayout)
        self.show()
Exemple #54
0
    def __init__(self, playlist, parent=None):
        super(Player, self).__init__(parent)

        self.colorDialog = None
        self.trackInfo = ""
        self.statusInfo = ""
        self.duration = 0

        self.player = QMediaPlayer()
        self.playlist = QMediaPlaylist()
        self.player.setPlaylist(self.playlist)

        self.player.durationChanged.connect(self.durationChanged)
        self.player.positionChanged.connect(self.positionChanged)
        self.player.metaDataChanged.connect(self.metaDataChanged)
        self.playlist.currentIndexChanged.connect(self.playlistPositionChanged)
        self.player.mediaStatusChanged.connect(self.statusChanged)
        self.player.bufferStatusChanged.connect(self.bufferingProgress)
        self.player.videoAvailableChanged.connect(self.videoAvailableChanged)
        self.player.error.connect(self.displayErrorMessage)

        self.videoWidget = VideoWidget()
        self.player.setVideoOutput(self.videoWidget)

        self.playlistModel = PlaylistModel()
        self.playlistModel.setPlaylist(self.playlist)

        self.playlistView = QListView()
        self.playlistView.setModel(self.playlistModel)
        self.playlistView.setCurrentIndex(
                self.playlistModel.index(self.playlist.currentIndex(), 0))

        self.playlistView.activated.connect(self.jump)

        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0, self.player.duration() / 1000)

        self.labelDuration = QLabel()
        self.slider.sliderMoved.connect(self.seek)

        self.labelHistogram = QLabel()
        self.labelHistogram.setText("Histogram:")
        self.histogram = HistogramWidget()
        histogramLayout = QHBoxLayout()
        histogramLayout.addWidget(self.labelHistogram)
        histogramLayout.addWidget(self.histogram, 1)

        self.probe = QVideoProbe()
        self.probe.videoFrameProbed.connect(self.histogram.processFrame)
        self.probe.setSource(self.player)

        openButton = QPushButton("Open", clicked=self.open)

        controls = PlayerControls()
        controls.setState(self.player.state())
        controls.setVolume(self.player.volume())
        controls.setMuted(controls.isMuted())

        controls.play.connect(self.player.play)
        controls.pause.connect(self.player.pause)
        controls.stop.connect(self.player.stop)
        controls.next.connect(self.playlist.next)
        controls.previous.connect(self.previousClicked)
        controls.changeVolume.connect(self.player.setVolume)
        controls.changeMuting.connect(self.player.setMuted)
        controls.changeRate.connect(self.player.setPlaybackRate)
        controls.stop.connect(self.videoWidget.update)

        self.player.stateChanged.connect(controls.setState)
        self.player.volumeChanged.connect(controls.setVolume)
        self.player.mutedChanged.connect(controls.setMuted)

        self.fullScreenButton = QPushButton("FullScreen")
        self.fullScreenButton.setCheckable(True)

        self.colorButton = QPushButton("Color Options...")
        self.colorButton.setEnabled(False)
        self.colorButton.clicked.connect(self.showColorDialog)

        displayLayout = QHBoxLayout()
        displayLayout.addWidget(self.videoWidget, 2)
        displayLayout.addWidget(self.playlistView)

        controlLayout = QHBoxLayout()
        controlLayout.setContentsMargins(0, 0, 0, 0)
        controlLayout.addWidget(openButton)
        controlLayout.addStretch(1)
        controlLayout.addWidget(controls)
        controlLayout.addStretch(1)
        controlLayout.addWidget(self.fullScreenButton)
        controlLayout.addWidget(self.colorButton)

        layout = QVBoxLayout()
        layout.addLayout(displayLayout)
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.slider)
        hLayout.addWidget(self.labelDuration)
        layout.addLayout(hLayout)
        layout.addLayout(controlLayout)
        layout.addLayout(histogramLayout)

        self.setLayout(layout)

        if not self.player.isAvailable():
            QMessageBox.warning(self, "Service not available",
                    "The QMediaPlayer object does not have a valid service.\n"
                    "Please check the media service plugins are installed.")

            controls.setEnabled(False)
            self.playlistView.setEnabled(False)
            openButton.setEnabled(False)
            self.colorButton.setEnabled(False)
            self.fullScreenButton.setEnabled(False)

        self.metaDataChanged()

        self.addToPlaylist(playlist)
class OWPySparkScript(SparkEnvironment, widget.OWWidget):
    priority = 3
    name = "PySpark Script"
    description = "Write a PySpark script and run it on input"
    icon = "../icons/PythonScript.svg"

    class Inputs:
        df = widget.Input('df', pyspark.sql.DataFrame, default=True)
        df1 = widget.Input('df1', pyspark.sql.DataFrame)
        df2 = widget.Input('df2', pyspark.sql.DataFrame)
        df3 = widget.Input('df3', pyspark.sql.DataFrame)

        transformer = widget.Input('transformer', pyspark.ml.Transformer)
        estimator = widget.Input('transformer', pyspark.ml.Estimator)
        model = widget.Input('model', pyspark.ml.Model)

        data = widget.Input('data', object)

    class Outputs:
        df = widget.Output('df', pyspark.sql.DataFrame, default=True)
        df1 = widget.Output('df1', pyspark.sql.DataFrame)
        df2 = widget.Output('df2', pyspark.sql.DataFrame)
        df3 = widget.Output('df3', pyspark.sql.DataFrame)

        transformer = widget.Output('transformer', pyspark.ml.Transformer)
        estimator = widget.Output('transformer', pyspark.ml.Estimator)
        model = widget.Output('model', pyspark.ml.Model)

        data = widget.Output('data', object)

    # inputs = [("in_object", object, "setObject")]
    # outputs = [("out_object", object, widget.Dynamic)]

    df = None
    df1 = None
    df2 = None
    df3 = None
    transformer = None
    estimator = None
    model = None
    data = None

    libraryListSource = Setting(
        [Script("Hello world", "print('Hello world')\n")])
    currentScriptIndex = Setting(0)
    splitterState = Setting(None)
    auto_execute = Setting(False)
    _script = Setting("")

    @Inputs.data
    def set_data(self, obj):
        self.data = obj
        self.console.shell.push({'data': self.data})

    @Inputs.df
    def set_df(self, df):
        self.df = df
        self.console.shell.push({'df': self.df})

    @Inputs.df1
    def set_df1(self, df):
        self.df1 = df
        self.console.shell.push({'df1': self.df1})

    @Inputs.df2
    def set_df2(self, df):
        self.df2 = df
        self.console.shell.push({'df2': self.df2})

    @Inputs.df3
    def set_df3(self, df):
        self.df3 = df
        self.console.shell.push({'df3': self.df3})

    @Inputs.transformer
    def set_transformer(self, transformer):
        self.transformer = transformer
        self.console.shell.push({'transformer': self.transformer})

    @Inputs.estimator
    def set_estimator(self, estimator):
        self.estimator = estimator
        self.console.shell.push({'estimator': self.estimator})

    @Inputs.model
    def set_model(self, model):
        self.model = model
        self.console.shell.push({'model': self.model})

    def __init__(self):
        super().__init__()

        self.spark_logo = "      ____              __     / __/__  ___ _____/ /__    _\ \/ _ \/ _ `/ __/  '_/   /__ / .__/\_,_/_/ /_/\_\   version {version}      /_/".format(
            version=self.sc.version)

        for s in self.libraryListSource:
            s.flags = 0

        self._cachedDocuments = {}

        self.infoBox = gui.widgetBox(self.controlArea, 'Info')
        gui.label(
                self.infoBox, self,
                "<p>Execute python script.</p><p>Input variables:<ul><li> " + \
                "<li>".join(t for t in dir(self.Inputs) if isinstance(getattr(self.Inputs, t), widget.Input)) + \
                "</ul></p><p>Output variables:<ul><li>" + \
                "<li>".join(t for t in dir(self.Outputs) if isinstance(getattr(self.Outputs, t), widget.Output)) + \
                "</ul></p>"
        )

        self.libraryList = itemmodels.PyListModel(
            [],
            self,
            flags=Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable)
        self.libraryList.wrap(self.libraryListSource)

        self.controlBox = gui.widgetBox(self.controlArea, 'Library')
        self.controlBox.layout().setSpacing(1)

        self.libraryView = QListView(
            editTriggers=QListView.DoubleClicked | QListView.EditKeyPressed,
            sizePolicy=QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Preferred))
        self.libraryView.setItemDelegate(ScriptItemDelegate(self))
        self.libraryView.setModel(self.libraryList)

        self.libraryView.selectionModel().selectionChanged.connect(
            self.onSelectedScriptChanged)
        self.controlBox.layout().addWidget(self.libraryView)

        w = itemmodels.ModelActionsWidget()

        self.addNewScriptAction = action = QAction("+", self)
        action.setToolTip("Add a new script to the library")
        action.triggered.connect(self.onAddScript)
        w.addAction(action)

        action = QAction(unicodedata.lookup("MINUS SIGN"), self)
        action.setToolTip("Remove script from library")
        action.triggered.connect(self.onRemoveScript)
        w.addAction(action)

        action = QAction("Update", self)
        action.setToolTip("Save changes in the editor to library")
        action.setShortcut(QKeySequence(QKeySequence.Save))
        action.triggered.connect(self.commitChangesToLibrary)
        w.addAction(action)

        action = QAction("More", self, toolTip="More actions")

        new_from_file = QAction("Import a script from a file", self)
        save_to_file = QAction("Save selected script to a file", self)
        save_to_file.setShortcut(QKeySequence(QKeySequence.SaveAs))

        new_from_file.triggered.connect(self.onAddScriptFromFile)
        save_to_file.triggered.connect(self.saveScript)

        menu = QMenu(w)
        menu.addAction(new_from_file)
        menu.addAction(save_to_file)
        action.setMenu(menu)
        button = w.addAction(action)
        button.setPopupMode(QToolButton.InstantPopup)

        w.layout().setSpacing(1)

        self.controlBox.layout().addWidget(w)

        gui.auto_commit(self.controlArea, self, "auto_execute", "Execute")

        self.splitCanvas = QSplitter(Qt.Vertical, self.mainArea)
        self.mainArea.layout().addWidget(self.splitCanvas)

        self.defaultFont = defaultFont = "Monaco" if sys.platform == "darwin" else "Courier"

        self.textBox = gui.widgetBox(self, 'Python script')
        self.splitCanvas.addWidget(self.textBox)
        self.text = PythonScriptEditor(self)
        self.textBox.layout().addWidget(self.text)

        self.textBox.setAlignment(Qt.AlignVCenter)
        self.text.setTabStopWidth(4)

        self.text.modificationChanged[bool].connect(self.onModificationChanged)

        self.saveAction = action = QAction("&Save", self.text)
        action.setToolTip("Save script to file")
        action.setShortcut(QKeySequence(QKeySequence.Save))
        action.setShortcutContext(Qt.WidgetWithChildrenShortcut)
        action.triggered.connect(self.saveScript)

        self.consoleBox = gui.widgetBox(self, 'Console')
        self.splitCanvas.addWidget(self.consoleBox)

        # self.console = PySparkConsole(self.__dict__, self, sc = self.sc)
        self.console = EmbedIPython(sc=self.sc,
                                    hc=self.hc,
                                    sqlContext=self.sqlContext,
                                    data=self.data,
                                    df=self.df,
                                    df1=self.df1,
                                    df2=self.df2,
                                    df3=self.df3,
                                    transformer=self.transformer,
                                    estimator=self.estimator,
                                    model=self.model)
        # self.console.shell.run_cell('%pylab qt')
        self.console.shell.run_cell(
            'print("{sparklogo}")'.format(sparklogo=self.spark_logo))

        self.consoleBox.layout().addWidget(self.console)
        self.consoleBox.setAlignment(Qt.AlignBottom)

        select_row(self.libraryView, self.currentScriptIndex)

        self.splitCanvas.setSizes([2, 1])
        # if self.splitterState is not None:
        #     self.splitCanvas.restoreState(QByteArray(self.splitterState))
        #
        # self.splitCanvas.splitterMoved[int, int].connect(self.onSpliterMoved)
        self.controlArea.layout().addStretch(1)
        self.resize(800, 600)

    def handleNewSignals(self):
        self.unconditional_commit()

    def selectedScriptIndex(self):
        rows = self.libraryView.selectionModel().selectedRows()
        if rows:
            return [i.row() for i in rows][0]
        else:
            return None

    def setSelectedScript(self, index):
        select_row(self.libraryView, index)

    def onAddScript(self, *args):
        self.libraryList.append(Script("New script", "", 0))
        self.setSelectedScript(len(self.libraryList) - 1)

    def onAddScriptFromFile(self, *args):
        filename = QFileDialog.getOpenFileName(
            self, 'Open Python Script', os.path.expanduser("~/"),
            'Python files (*.py)\nAll files(*.*)')

        filename = str(filename[0])
        if filename:
            name = os.path.basename(filename)
            contents = open(
                filename, "rb",
                encoding="utf-8").read()  #.decode("utf-8", errors = "ignore")
            self.libraryList.append(Script(name, contents, 0, filename))
            self.setSelectedScript(len(self.libraryList) - 1)

    def onRemoveScript(self, *args):
        index = self.selectedScriptIndex()
        if index is not None:
            del self.libraryList[index]
            select_row(self.libraryView, max(index - 1, 0))

    def onSaveScriptToFile(self, *args):
        index = self.selectedScriptIndex()
        if index is not None:
            self.saveScript()

    def onSelectedScriptChanged(self, selected, deselected):
        index = [i.row() for i in selected.indexes()]
        if index:
            current = index[0]
            if current >= len(self.libraryList):
                self.addNewScriptAction.trigger()
                return

            self.text.setDocument(self.documentForScript(current))
            self.currentScriptIndex = current

    def documentForScript(self, script=0):
        if type(script) != Script:
            script = self.libraryList[script]

        if script not in self._cachedDocuments:
            doc = QtGui.QTextDocument(self)
            doc.setDocumentLayout(QtGui.QPlainTextDocumentLayout(doc))
            doc.setPlainText(script.script)
            doc.setDefaultFont(QFont(self.defaultFont))
            doc.highlighter = PythonSyntaxHighlighter(doc)
            doc.modificationChanged[bool].connect(self.onModificationChanged)
            doc.setModified(False)
            self._cachedDocuments[script] = doc
        return self._cachedDocuments[script]

    def commitChangesToLibrary(self, *args):
        index = self.selectedScriptIndex()
        if index is not None:
            self.libraryList[index].script = self.text.toPlainText()
            self.text.document().setModified(False)
            self.libraryList.emitDataChanged(index)

    def onModificationChanged(self, modified):
        index = self.selectedScriptIndex()
        if index is not None:
            self.libraryList[index].flags = Script.Modified if modified else 0
            self.libraryList.emitDataChanged(index)

    def onSpliterMoved(self, pos, ind):
        self.splitterState = str(self.splitCanvas.saveState())

    def updateSelecetdScriptState(self):
        index = self.selectedScriptIndex()
        if index is not None:
            script = self.libraryList[index]
            self.libraryList[index] = Script(script.name,
                                             self.text.toPlainText(), 0)

    def saveScript(self):
        index = self.selectedScriptIndex()
        if index is not None:
            script = self.libraryList[index]
            filename = script.filename
        else:
            filename = os.path.expanduser("~/")

        filename = QFileDialog.getSaveFileName(
            self, 'Save Python Script', filename,
            'Python files (*.py)\nAll files(*.*)')

        if filename:
            fn = ""
            head, tail = filename  #os.path.splitext(filename)
            if not tail:
                fn = head + ".py"
            else:
                fn = head

            f = open(fn, 'w', encoding='utf-8')
            f.write(self.text.toPlainText())
            f.close()

    def commit(self):
        self._script = str(self.text.toPlainText())
        inputs = [
            'data', 'df', 'df1', 'df2', 'df3', 'transformer', 'estimator',
            'model'
        ]
        self.console.shell.user_ns.update(
            {input: getattr(self, input)
             for input in inputs})
        self.console.execute(self._script)
        for input in inputs:
            getattr(self.Outputs,
                    input).send(self.console.shell.user_ns[input])
Exemple #56
-1
    def __init__(self, *args):
        # Invoke parent init
        QListView.__init__(self, *args)

        # Get a reference to the window object
        self.win = get_app().window

        # Get Model data
        self.files_model = FilesModel()
        self.setAcceptDrops(True)
        self.setDragEnabled(True)
        self.setDropIndicatorShown(True)
        self.selected = []
        self.ignore_image_sequence_paths = []

        # Setup header columns
        self.setModel(self.files_model.model)
        self.setIconSize(QSize(131, 108))
        self.setViewMode(QListView.IconMode)
        self.setResizeMode(QListView.Adjust)
        self.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.setUniformItemSizes(True)
        self.setWordWrap(True)
        self.setStyleSheet('QListView::item { padding-top: 2px; }')

        # Refresh view
        self.refresh_view()

        # setup filter events
        app = get_app()
        app.window.filesFilter.textChanged.connect(self.filter_changed)
        app.window.actionFilesClear.triggered.connect(self.clear_filter)
Exemple #57
-1
	def __init__(self, *args):
		# Invoke parent init
		QListView.__init__(self, *args)
		
		# Get a reference to the window object
		self.win = get_app().window
		
		# Get Model data
		self.effects_model = EffectsModel()
		
		# Keep track of mouse press start position to determine when to start drag
		self.setAcceptDrops(True)
		self.setDragEnabled(True)
		self.setDropIndicatorShown(True)

		# Setup header columns
		self.setModel(self.effects_model.model)
		self.setIconSize(QSize(131, 108))
		self.setViewMode(QListView.IconMode)
		self.setResizeMode(QListView.Adjust)
		self.setUniformItemSizes(True)
		self.setWordWrap(True)
		self.setStyleSheet('QListView::item { padding-top: 2px; }')
		
		# Refresh view
		self.refresh_view()

		# setup filter events
		app = get_app()
		app.window.effectsFilter.textChanged.connect(self.filter_changed)
		app.window.actionEffectsClear.triggered.connect(self.clear_filter)
    def __init__(self, commits, commit_url, *args):
        # Invoke parent init
        QListView.__init__(self, *args)

        # Get a reference to the window object
        self.win = get_app().window

        # Get Model data
        self.changelog_model = ChangelogModel(commits)
        self.selected = []

        # Setup header columns
        self.setModel(self.changelog_model.model)
        self.setIndentation(0)
        self.setSelectionBehavior(QTreeView.SelectRows)
        self.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.setWordWrap(True)
        self.setStyleSheet('QTreeView::item { padding-top: 2px; }')
        self.commit_url = commit_url

        # Refresh view
        self.refresh_view()

        # setup filter events
        app = get_app()
Exemple #59
-1
class AppletNoticeWindow(QWidget):

    def __init__(self, controller):
        super(AppletNoticeWindow, self).__init__()

        self.__controller = controller

        self.__pkglist = []

        # setup widgets
        self.__vbox_up = QVBoxLayout()
        self.__critical_label = QLabel()
        self.__critical_label.setWordWrap(True)
        self.__list_model = QStringListModel()
        self.__list_view = QListView()
        self.__list_view.setModel(self.__list_model)
        self.__vbox_up.addWidget(self.__critical_label)
        self.__vbox_up.addWidget(self.__list_view)

        # bottom buttons
        self.__vbox = QVBoxLayout()
        self.__vbox.addLayout(self.__vbox_up)

        self.__button_hbox = QHBoxLayout()
        self.__close_button = QPushButton(_("Close"))
        self.__launch_pm_button = QPushButton(_("Launch Application Browser"))
        self.__button_hbox.addWidget(self.__launch_pm_button)
        self.__button_hbox.addWidget(self.__close_button)

        self.__vbox.addLayout(self.__button_hbox)

        self.setLayout(self.__vbox)

        # set window settings
        self.resize(400, 200)
        self.setWindowTitle(_("Application updates"))

        self.__close_button.clicked.connect(self.on_close)
        self.__launch_pm_button.clicked.connect(self.on_pm)

    def closeEvent(self, event):
        """
        We don't want to kill the window, since the whole app will close
        otherwise.
        """
        event.ignore()
        self.on_close()

    def on_pm(self):
        self.__controller.launch_package_manager()

    def on_close(self):
        self.__controller.trigger_notice_window()

    def populate(self, pkg_data, critical_txt):
        self.__list_model.setStringList(pkg_data)
        self.__critical_label.setText(critical_txt)
        self.__list_view.update()
Exemple #60
-1
    def close(self):
        """Explicitly called destructor.
        Removes widget from the qpart
        """
        self._closeIfNotUpdatedTimer.stop()
        self._qpart.removeEventFilter(self)
        self._qpart.cursorPositionChanged.disconnect(self._onCursorPositionChanged)

        QListView.close(self)