/tortoisehg/hgqt/logcolumns.py

https://bitbucket.org/tortoisehg/hgtk/ · Python · 89 lines · 67 code · 13 blank · 9 comment · 11 complexity · 8726b5890fdd6925a82443df655e0017 MD5 · raw file

  1. # logcolumns.py - select and reorder columns in log model
  2. #
  3. # Copyright 2010 Steve Borho <steve@borho.org>
  4. #
  5. # This software may be used and distributed according to the terms of the
  6. # GNU General Public License version 2, incorporated herein by reference.
  7. import os
  8. from tortoisehg.hgqt import qtlib
  9. from tortoisehg.util import hglib
  10. from tortoisehg.hgqt.i18n import _
  11. from tortoisehg.hgqt import repomodel
  12. from PyQt4.QtCore import *
  13. from PyQt4.QtGui import *
  14. class ColumnSelectDialog(QDialog):
  15. def __init__(self, all, curcolumns=None, parent=None):
  16. QDialog.__init__(self, parent)
  17. self.setWindowTitle(_('Workbench Log Columns'))
  18. self.setWindowFlags(self.windowFlags() & \
  19. ~Qt.WindowContextHelpButtonHint)
  20. self.setMinimumSize(250, 265)
  21. self.curcolumns = curcolumns
  22. if not self.curcolumns:
  23. s = QSettings()
  24. cols = s.value('workbench/columns').toStringList()
  25. if cols:
  26. self.curcolumns = [c for c in cols if c in all]
  27. else:
  28. self.curcolumns = all
  29. self.disabled = [c for c in all if c not in self.curcolumns]
  30. layout = QVBoxLayout()
  31. layout.setMargin(0)
  32. self.setLayout(layout)
  33. list = QListWidget()
  34. # enabled cols are listed in sorted order
  35. for c in self.curcolumns:
  36. item = QListWidgetItem(c)
  37. item.setFlags(Qt.ItemIsSelectable |
  38. Qt.ItemIsEnabled |
  39. Qt.ItemIsDragEnabled |
  40. Qt.ItemIsUserCheckable)
  41. item.setCheckState(Qt.Checked)
  42. list.addItem(item)
  43. # disabled cols are listed last
  44. for c in self.disabled:
  45. item = QListWidgetItem(c)
  46. item.setFlags(Qt.ItemIsSelectable |
  47. Qt.ItemIsEnabled |
  48. Qt.ItemIsDragEnabled |
  49. Qt.ItemIsUserCheckable)
  50. item.setCheckState(Qt.Unchecked)
  51. list.addItem(item)
  52. list.setDragDropMode(QListView.InternalMove)
  53. layout.addWidget(list)
  54. self.list = list
  55. layout.addWidget(QLabel(_('Drag to change order')))
  56. # dialog buttons
  57. BB = QDialogButtonBox
  58. bb = QDialogButtonBox(BB.Ok|BB.Cancel)
  59. self.apply_button = bb.button(BB.Apply)
  60. bb.accepted.connect(self.accept)
  61. bb.rejected.connect(self.reject)
  62. bb.button(BB.Ok).setDefault(True)
  63. layout.addWidget(bb)
  64. def accept(self):
  65. s = QSettings()
  66. cols = []
  67. for i in xrange(self.list.count()):
  68. item = self.list.item(i)
  69. if item.checkState() == Qt.Checked:
  70. cols.append(str(item.text()))
  71. s.setValue('workbench/columns', cols)
  72. QDialog.accept(self)
  73. def reject(self):
  74. QDialog.reject(self)
  75. def run(ui, *pats, **opts):
  76. return ColumnSelectDialog(repomodel.ALLCOLUMNS)