Commit b4a5ae73 authored by Dan Pascu's avatar Dan Pascu

Added session model and view

parent 5c444b69
...@@ -13,6 +13,7 @@ from sipsimple.account import AccountManager ...@@ -13,6 +13,7 @@ from sipsimple.account import AccountManager
from blink.accounts import AccountModel, ActiveAccountModel from blink.accounts import AccountModel, ActiveAccountModel
from blink.contacts import Contact, ContactGroup, ContactEditorDialog, ContactModel, ContactSearchModel from blink.contacts import Contact, ContactGroup, ContactEditorDialog, ContactModel, ContactSearchModel
from blink.sessions import SessionModel
from blink.resources import Resources from blink.resources import Resources
...@@ -47,10 +48,14 @@ class MainWindow(base_class, ui_class): ...@@ -47,10 +48,14 @@ class MainWindow(base_class, ui_class):
self.contact_editor = ContactEditorDialog(self.contact_model, self) self.contact_editor = ContactEditorDialog(self.contact_model, self)
self.session_model = SessionModel(self)
self.session_list.setModel(self.session_model)
self.session_model.test()
self.contacts_panel.sibling_panel = self.sessions_panel self.contacts_panel.sibling_panel = self.sessions_panel
self.contacts_panel.sibling_name = u'Sessions' self.contacts_panel.sibling_name = u'Switch to Calls'
self.sessions_panel.sibling_panel = self.contacts_panel self.sessions_panel.sibling_panel = self.contacts_panel
self.sessions_panel.sibling_name = u'Contacts' self.sessions_panel.sibling_name = u'Switch to Contacts'
self.main_view.setCurrentWidget(self.contacts_panel) self.main_view.setCurrentWidget(self.contacts_panel)
self.contacts_view.setCurrentWidget(self.contact_list_panel) self.contacts_view.setCurrentWidget(self.contact_list_panel)
...@@ -113,7 +118,7 @@ class MainWindow(base_class, ui_class): ...@@ -113,7 +118,7 @@ class MainWindow(base_class, ui_class):
def search_box_text_changed(self, text): def search_box_text_changed(self, text):
if text: if text:
self.main_view.setCurrentWidget(self.contacts_panel) self.main_view.setCurrentWidget(self.contacts_panel)
self.switch_view_button.setText(u"Sessions") self.switch_view_button.setText(self.contacts_panel.sibling_name)
self.enable_call_buttons(True) self.enable_call_buttons(True)
else: else:
selected_items = self.contact_list.selectionModel().selectedIndexes() selected_items = self.contact_list.selectionModel().selectedIndexes()
......
This diff is collapsed.
# Copyright (c) 2010 AG Projects. See LICENSE for details. # Copyright (c) 2010 AG Projects. See LICENSE for details.
# #
__all__ = ['ToolButton'] __all__ = ['ToolButton', 'SegmentButton', 'SingleSegment', 'LeftSegment', 'MiddleSegment', 'RightSegment']
from PyQt4.QtCore import pyqtSignal
from PyQt4.QtGui import QStyle, QStyleOptionToolButton, QStylePainter, QToolButton from PyQt4.QtGui import QStyle, QStyleOptionToolButton, QStylePainter, QToolButton
...@@ -16,3 +17,113 @@ class ToolButton(QToolButton): ...@@ -16,3 +17,113 @@ class ToolButton(QToolButton):
painter.drawComplexControl(QStyle.CC_ToolButton, option) painter.drawComplexControl(QStyle.CC_ToolButton, option)
class SegmentTypeMeta(type):
def __repr__(cls):
return cls.__name__
class SegmentType(object):
__metaclass__ = SegmentTypeMeta
style_sheet = ''
class SingleSegment(SegmentType):
style_sheet = """
QToolButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fafafa, stop:1 #bababa);
border-color: #545454;
border-radius: 4px;
border-width: 1px;
border-style: solid;
}
QToolButton:pressed {
background: qradialgradient(cx:0.5, cy:0.5, radius:1, fx:0.5, fy:0.5, stop:0 #dddddd, stop:1 #777777);
border-style: inset;
}
"""
class LeftSegment(SegmentType):
style_sheet = """
QToolButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fafafa, stop:1 #bababa);
border-color: #545454;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
border-width: 1px;
border-style: solid;
}
QToolButton:pressed {
background: qradialgradient(cx:0.5, cy:0.5, radius:1, fx:0.5, fy:0.5, stop:0 #dddddd, stop:1 #777777);
border-style: inset;
}
"""
class MiddleSegment(SegmentType):
style_sheet = """
QToolButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fafafa, stop:1 #bababa);
border-color: #545454;
border-width: 1px;
border-left-width: 0px;
border-style: solid;
}
QToolButton:pressed {
background: qradialgradient(cx:0.5, cy:0.5, radius:1, fx:0.5, fy:0.5, stop:0 #dddddd, stop:1 #777777);
border-style: inset;
}
"""
class RightSegment(SegmentType):
style_sheet = """
QToolButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fafafa, stop:1 #bababa);
border-color: #545454;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-width: 1px;
border-left-width: 0px;
border-style: solid;
}
QToolButton:pressed {
background: qradialgradient(cx:0.5, cy:0.5, radius:1, fx:0.5, fy:0.5, stop:0 #dddddd, stop:1 #777777);
border-style: inset;
}
"""
class SegmentButton(QToolButton):
SingleSegment = SingleSegment
LeftSegment = LeftSegment
MiddleSegment = MiddleSegment
RightSegment = RightSegment
hidden = pyqtSignal()
shown = pyqtSignal()
def __init__(self, parent=None):
super(SegmentButton, self).__init__()
self.type = SingleSegment
def _get_type(self):
return self.__dict__['type']
def _set_type(self, value):
if not issubclass(value, SegmentType):
raise ValueError("Invalid type: %r" % value)
self.__dict__['type'] = value
self.setStyleSheet(value.style_sheet)
type = property(_get_type, _set_type)
del _get_type, _set_type
def hide(self):
super(SegmentButton, self).hide()
self.hidden.emit()
def show(self):
super(SegmentButton, self).show()
self.shown.emit()
...@@ -241,7 +241,7 @@ ...@@ -241,7 +241,7 @@
<enum>Qt::TabFocus</enum> <enum>Qt::TabFocus</enum>
</property> </property>
<property name="text"> <property name="text">
<string>Sessions</string> <string>Switch to Calls</string>
</property> </property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
<item> <item>
<widget class="QStackedWidget" name="main_view"> <widget class="QStackedWidget" name="main_view">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="contacts_panel"> <widget class="QWidget" name="contacts_panel">
<layout class="QVBoxLayout" name="verticalLayout_8"> <layout class="QVBoxLayout" name="verticalLayout_8">
...@@ -267,7 +267,7 @@ ...@@ -267,7 +267,7 @@
<item> <item>
<widget class="QStackedWidget" name="contacts_view"> <widget class="QStackedWidget" name="contacts_view">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="contact_list_panel"> <widget class="QWidget" name="contact_list_panel">
<layout class="QVBoxLayout" name="verticalLayout_7"> <layout class="QVBoxLayout" name="verticalLayout_7">
...@@ -670,7 +670,17 @@ buttons below.</string> ...@@ -670,7 +670,17 @@ buttons below.</string>
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QListView" name="session_list"/> <widget class="SessionListView" name="session_list">
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
</widget>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="session_buttons_layout"> <layout class="QHBoxLayout" name="session_buttons_layout">
...@@ -841,6 +851,11 @@ buttons below.</string> ...@@ -841,6 +851,11 @@ buttons below.</string>
<extends>QToolButton</extends> <extends>QToolButton</extends>
<header>blink.widgets.buttons</header> <header>blink.widgets.buttons</header>
</customwidget> </customwidget>
<customwidget>
<class>SessionListView</class>
<extends>QListView</extends>
<header>blink.sessions</header>
</customwidget>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>search_box</tabstop> <tabstop>search_box</tabstop>
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment