X-Git-Url: https://jfr.im/git/irc/weechat/qweechat.git/blobdiff_plain/7dcf23b19547e37dbadd98aaed99ce4656471dbe..773ee7bb73814319ee9b8fdf8bc43af716b85961:/src/qweechat/buffer.py diff --git a/src/qweechat/buffer.py b/src/qweechat/buffer.py index 2da1d2a..fc12d09 100644 --- a/src/qweechat/buffer.py +++ b/src/qweechat/buffer.py @@ -30,30 +30,47 @@ from chat import ChatTextEdit from input import InputLineEdit -class BufferListWidget(QtGui.QListWidget): - """Widget with list of buffers.""" +class GenericListWidget(QtGui.QListWidget): + """Generic QListWidget with dynamic size.""" def __init__(self, *args): - apply(QtGui.QListWidget.__init__, (self,) + args) + QtGui.QListWidget.__init__(*(self,) + args) + self.setMaximumWidth(100) + self.setTextElideMode(QtCore.Qt.ElideNone) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.setMinimumWidth(120) - self.setMaximumWidth(200) - # TODO: do a dynamic size for widget - #self.setMinimumWidth(self.sizeHintForColumn(0)) - #self.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) - #self.setResizeMode(QtGui.QListView.Adjust) self.setFocusPolicy(QtCore.Qt.NoFocus) pal = self.palette() pal.setColor(QtGui.QPalette.Highlight, QtGui.QColor('#ddddff')) pal.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor('black')) self.setPalette(pal) - # TODO: do a dynamic size for widget - def sizeHint(self): - s = QtCore.QSize() - s.setHeight(super(BufferListWidget,self).sizeHint().height()) - s.setWidth(self.sizeHintForColumn(0)) - return s + def auto_resize(self): + size = self.sizeHintForColumn(0) + if size > 0: + size += 4 + self.setMaximumWidth(size) + + def clear(self, *args): + """Re-implement clear to set dynamic size after clear.""" + QtGui.QListWidget.clear(*(self,) + args) + self.auto_resize() + + def addItem(self, *args): + """Re-implement addItem to set dynamic size after add.""" + QtGui.QListWidget.addItem(*(self,) + args) + self.auto_resize() + + def insertItem(self, *args): + """Re-implement insertItem to set dynamic size after insert.""" + QtGui.QListWidget.insertItem(*(self,) + args) + self.auto_resize() + + +class BufferListWidget(GenericListWidget): + """Widget with list of buffers.""" + + def __init__(self, *args): + GenericListWidget.__init__(*(self,) + args) def switch_prev_buffer(self): if self.currentRow() > 0: @@ -76,31 +93,26 @@ class BufferWidget(QtGui.QWidget): # title self.title = QtGui.QLineEdit() + self.title.setFocusPolicy(QtCore.Qt.NoFocus) # splitter with chat + nicklist self.chat_nicklist = QtGui.QSplitter() self.chat_nicklist.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) - self.chat = ChatTextEdit() + self.chat = ChatTextEdit(debug=False) self.chat_nicklist.addWidget(self.chat) - self.nicklist = QtGui.QListWidget() - self.nicklist.setMaximumWidth(100) - self.nicklist.setFocusPolicy(QtCore.Qt.NoFocus) + self.nicklist = GenericListWidget() if not display_nicklist: self.nicklist.setVisible(False) self.chat_nicklist.addWidget(self.nicklist) # prompt + input - hbox_edit = QtGui.QHBoxLayout() - hbox_edit.setContentsMargins(0, 0, 0, 0) - hbox_edit.setSpacing(0) - self.prompt = QtGui.QLabel('FlashCode') - self.prompt.setContentsMargins(0, 0, 5, 0) - hbox_edit.addWidget(self.prompt) + self.hbox_edit = QtGui.QHBoxLayout() + self.hbox_edit.setContentsMargins(0, 0, 0, 0) + self.hbox_edit.setSpacing(0) self.input = InputLineEdit(self.chat) - hbox_edit.addWidget(self.input) + self.hbox_edit.addWidget(self.input) prompt_input = QtGui.QWidget() - prompt_input.setLayout(hbox_edit) - prompt_input.setContentsMargins(0, 0, 0, 0) + prompt_input.setLayout(self.hbox_edit) # vbox with title + chat/nicklist + prompt/input vbox = QtGui.QVBoxLayout() @@ -118,6 +130,15 @@ class BufferWidget(QtGui.QWidget): if not title is None: self.title.setText(title) + def set_prompt(self, prompt): + """Set prompt.""" + if self.hbox_edit.count() > 1: + self.hbox_edit.takeAt(0) + if not prompt is None: + label = QtGui.QLabel(prompt) + label.setContentsMargins(0, 0, 5, 0) + self.hbox_edit.insertWidget(0, label) + class Buffer(QtCore.QObject): """A WeeChat buffer.""" @@ -127,15 +148,30 @@ class Buffer(QtCore.QObject): def __init__(self, data={}): QtCore.QObject.__init__(self) self.data = data + self.nicklist = [] self.widget = BufferWidget(display_nicklist=self.data.get('nicklist', 0)) - if self.data and self.data['title']: - self.widget.set_title(self.data['title']) + self.update_title() + self.update_prompt() self.widget.input.textSent.connect(self.input_text_sent) def pointer(self): """Return pointer on buffer.""" return self.data.get('__path', [''])[0] + def update_title(self): + """Update title.""" + try: + self.widget.set_title(self.data['title']) + except: + self.widget.set_title(None) + + def update_prompt(self): + """Update prompt.""" + try: + self.widget.set_prompt(self.data['local_variables']['nick']) + except: + self.widget.set_prompt(None) + def input_text_sent(self, text): """Called when text has to be sent to buffer.""" if self.data: @@ -143,4 +179,21 @@ class Buffer(QtCore.QObject): def add_nick(self, prefix, nick): """Add a nick to nicklist.""" - self.widget.nicklist.addItem('%s%s' % (prefix, nick)) + prefix_color = { '': '', ' ': '', '+': 'yellow' } + self.nicklist.append((prefix, nick)) + color = prefix_color.get(prefix, 'green') + if color: + icon = QtGui.QIcon('data/icons/bullet_%s_8x8.png' % color) + else: + pixmap = QtGui.QPixmap(8, 8) + pixmap.fill() + icon = QtGui.QIcon(pixmap) + item = QtGui.QListWidgetItem(icon, nick) + #item.setFont('monospace') + self.widget.nicklist.addItem(item) + self.widget.nicklist.setVisible(True) + + def remove_all_nicks(self): + """Remove all nicks from nicklist.""" + self.nicklist = [] + self.widget.nicklist.clear()