Implemented context menu for file list

git-svn-id: http://comictagger.googlecode.com/svn/trunk@309 6c5673fe-1810-88d6-992b-cd32ca31540c
This commit is contained in:
beville 2013-01-17 06:19:06 +00:00
parent 41f730a558
commit 7a7adc1c3f
6 changed files with 147 additions and 40 deletions

View File

@ -58,6 +58,7 @@ class FileInfo( ):
class FileSelectionList(QWidget):
selectionChanged = pyqtSignal(QVariant)
listCleared = pyqtSignal()
def __init__(self, parent , settings ):
super(FileSelectionList, self).__init__(parent)
@ -71,7 +72,47 @@ class FileSelectionList(QWidget):
self.setAcceptDrops(True)
self.twList.itemSelectionChanged.connect( self.itemSelectionChangedCB )
self.setContextMenuPolicy(Qt.ActionsContextMenu)
selectAllAction = QAction("Select All", self)
invertSelectionAction = QAction("Invert Selection", self)
removeAction = QAction("Remove Selected Items", self)
selectAllAction.triggered.connect(self.selectAll)
removeAction.triggered.connect(self.removeSelection)
self.addAction(selectAllAction)
self.addAction(removeAction)
def selectAll( self ):
self.twList.setRangeSelected( QTableWidgetSelectionRange ( 0, 0, self.twList.rowCount()-1, 1 ), True )
def removeSelection( self ):
row_list = []
for item in self.twList.selectedItems():
if item.column() == 0:
row_list.append(item.row())
if len(row_list) == 0:
return
row_list.sort()
row_list.reverse()
self.twList.itemSelectionChanged.disconnect( self.itemSelectionChangedCB )
for i in row_list:
self.twList.removeRow(i)
self.twList.itemSelectionChanged.connect( self.itemSelectionChangedCB )
if self.twList.rowCount() > 0:
self.twList.selectRow(0)
else:
self.listCleared.emit()
def dragEnterEvent(self, event):
self.droppedFiles = None
if event.mimeData().hasUrls():

View File

@ -19,6 +19,9 @@
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>

View File

@ -82,8 +82,7 @@ class PageListEditor(QWidget):
self.pages_list = None
self.page_loader = None
self.current_pixmap = QPixmap(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/nocover.png' ))
self.setDisplayPixmap( 0, 0)
self.resetPage()
# Add the entries to the manga combobox
self.comboBox.addItem( "", "" )
@ -107,6 +106,10 @@ class PageListEditor(QWidget):
self.pre_move_row = -1
self.first_front_page = None
def resetPage( self ):
self.current_pixmap = QPixmap(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/nocover.png' ))
self.setDisplayPixmap( 0, 0)
def moveCurrentUp( self ):
row = self.listWidget.currentRow()
if row > 0:
@ -238,7 +241,9 @@ class PageListEditor(QWidget):
def setData( self, comic_archive, pages_list ):
self.comic_archive = comic_archive
self.pages_list = pages_list
self.listWidget.itemSelectionChanged.disconnect( self.changePage )
self.listWidget.clear()
for p in pages_list:
item = QListWidgetItem( self.listEntryText( p ) )
@ -246,8 +251,9 @@ class PageListEditor(QWidget):
item.setData(Qt.UserRole, (p, ))
self.listWidget.addItem( item )
self.listWidget.setCurrentRow ( 0 )
self.first_front_page = self.getFirstFrontCover()
self.listWidget.itemSelectionChanged.connect( self.changePage )
self.listWidget.setCurrentRow ( 0 )
def listEntryText(self, page_dict):
text = page_dict['Image']

View File

@ -105,10 +105,11 @@ class TaggerWindow( QtGui.QMainWindow):
gridlayout.addWidget( self.fileSelectionList )
self.fileSelectionList.selectionChanged.connect( self.fileListSelectionChanged )
self.fileSelectionList.listCleared.connect( self.fileListCleared )
# ATB: Disable the list for now...
self.splitter.setSizes([100,0])
self.splitter.setHandleWidth(0)
self.splitter.handle(1).setDisabled(True)
#self.splitter.setSizes([100,0])
#self.splitter.setHandleWidth(0)
#self.splitter.handle(1).setDisabled(True)
#---------------------------
@ -117,26 +118,15 @@ class TaggerWindow( QtGui.QMainWindow):
self.lblCover.setPixmap(QtGui.QPixmap(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/nocover.png' )))
#print platform.system(), platform.release()
self.dirtyFlag = False
self.data_style = settings.last_selected_data_style
#set up a default metadata object
self.metadata = GenericMetadata()
self.comic_archive = None
self.configMenus()
self.statusBar()
self.updateAppTitle()
self.setAcceptDrops(True)
self.updateMenus()
self.droppedFile = None
self.page_browser = None
self.page_loader = None
self.configMenus()
self.statusBar()
self.populateComboBoxes()
self.resetApp()
# set up some basic field validators
validator = QtGui.QIntValidator(1900, 2099, self)
self.lePubYear.setValidator(validator)
@ -197,6 +187,24 @@ class TaggerWindow( QtGui.QMainWindow):
# defer the actual close in the app loop thread
QtCore.QTimer.singleShot(200, self.close)
def resetApp( self ):
self.lblCover.setPixmap(QtGui.QPixmap(os.path.join(ComicTaggerSettings.baseDir(), 'graphics/nocover.png' )))
self.comic_archive = None
self.dirtyFlag = False
self.clearForm()
self.pageListEditor.resetPage()
self.updateAppTitle()
self.updateMenus()
self.updateInfoBox()
self.droppedFile = None
self.page_browser = None
self.page_loader = None
def updateAppTitle( self ):
if self.comic_archive is None:
@ -537,7 +545,14 @@ class TaggerWindow( QtGui.QMainWindow):
def updateInfoBox( self ):
ca = self.comic_archive
if ca is None:
self.lblFilename.setText( "" )
self.lblArchiveType.setText( "" )
self.lblTagList.setText( "" )
self.lblPageCount.setText( "" )
return
filename = os.path.basename( ca.path )
filename = os.path.splitext(filename)[0]
filename = FileNameParser().fixSpaces(filename)
@ -1430,3 +1445,6 @@ class TaggerWindow( QtGui.QMainWindow):
self.metadata = GenericMetadata()
self.loadCurrentArchive()
def fileListCleared( self ):
self.resetApp()

View File

@ -322,7 +322,11 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="leSeries"/>
<widget class="QLineEdit" name="leSeries">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
@ -332,7 +336,11 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="leTitle"/>
<widget class="QLineEdit" name="leTitle">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
@ -342,7 +350,11 @@
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lePublisher"/>
<widget class="QLineEdit" name="lePublisher">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
@ -352,7 +364,11 @@
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="leImprint"/>
<widget class="QLineEdit" name="leImprint">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
@ -368,7 +384,11 @@
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="leSeriesGroup"/>
<widget class="QLineEdit" name="leSeriesGroup">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_25">
@ -378,7 +398,11 @@
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="leStoryArc"/>
<widget class="QLineEdit" name="leStoryArc">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_24">
@ -388,7 +412,11 @@
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="leGenre"/>
<widget class="QLineEdit" name="leGenre">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_21">
@ -398,7 +426,11 @@
</widget>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="leAltSeries"/>
<widget class="QLineEdit" name="leAltSeries">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
<item row="7" column="1">
<spacer name="verticalSpacer_4">
@ -452,6 +484,9 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
@ -466,7 +501,11 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="leAltIssueCount"/>
<widget class="QLineEdit" name="leAltIssueCount">
<property name="acceptDrops">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
@ -1080,7 +1119,7 @@
<x>0</x>
<y>0</y>
<width>968</width>
<height>28</height>
<height>25</height>
</rect>
</property>
<widget class="QMenu" name="menuComicTagger">

View File

@ -5,7 +5,12 @@ Features
Multi-file:
Does the main UI need to have "View/Read Tag Style" and "Write Tag style" concept?
Edit functions on list: select, select all, delete,
Select first dropped Item into list
Turn off drop accept for edit lines/boxes
Drop on app goes to list and selects it
Accept multiple files on file open dialog
Warn on moving selection list away from modified form
ComicArchive: cache each metadata block? Need to make sure cache is cleared on file modify
Batch Functions:
Auto-Select
@ -18,14 +23,9 @@ Multi-file:
Copy Block
Verify overwrites
Turn off drop accept for edit lines/boxes
Drop on app goes to list and selects it
Accept multiple files on file open dialog
Warn on moving selection list away from modified form
Delete
ComicArchive: cache each metadata block? Need to make sure cache is cleared on file modify
-----------------------------------------------------
Bugs
-----------------------------------------------------