home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / hplip / ui4 / fabwindow.py < prev    next >
Encoding:
Python Source  |  2009-04-14  |  23.2 KB  |  600 lines

  1. # -*- coding: utf-8 -*-
  2. #
  3. # (c) Copyright 2003-2009 Hewlett-Packard Development Company, L.P.
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18. #
  19. # Author: Don Welch
  20. #
  21.  
  22. # StdLib
  23.  
  24. # Local
  25. from base.g import *
  26. from ui_utils import *
  27.  
  28. # Qt
  29. from PyQt4.QtCore import *
  30. from PyQt4.QtGui import *
  31.  
  32. # Main window
  33. from fabwindow_base import Ui_MainWindow
  34.  
  35. fax_avail = True
  36. try:
  37.     from fax import fax
  38. except ImportError:
  39.     # This can fail on Python < 2.3 due to the datetime module
  40.     log.error("Fax address book disabled - Python 2.3+ required.")
  41.     fax_avail = False
  42.  
  43.  
  44.  
  45. class FABWindow(QMainWindow,  Ui_MainWindow):
  46.     def __init__(self, parent):
  47.         QMainWindow.__init__(self, parent)
  48.         self.setupUi(self)
  49.         self.group = u'All' # current group
  50.         self.name = None # current name
  51.         self.updating_group = False
  52.         self.updating_name = False
  53.  
  54.         self.initDB()
  55.         self.initUi()
  56.  
  57.         QTimer.singleShot(0, self.updateUi)
  58.  
  59.  
  60.     def initDB(self):
  61.         self.db =  fax.FaxAddressBook()
  62.  
  63.         # Fixup data from old-style database
  64.         data = self.db.get_all_records()
  65.         for d in data:
  66.             if u'All' not in data[d]['groups']:
  67.                 data[d]['groups'].append(u'All')
  68.  
  69.         if not data:
  70.             self.db.set('__' + utils.gen_random_uuid(), '', '', '', '', [u'All'], '')
  71.  
  72.  
  73.     def initUi(self):
  74.         # Application icon
  75.         self.setWindowIcon(QIcon(load_pixmap('prog', '48x48')))
  76.  
  77.         self.NewGroupAction.setIcon(QIcon(load_pixmap('new_group', '24x24')))
  78.         self.NewGroupFromSelectionAction.setIcon(QIcon(load_pixmap('new_group_from_selection', '24x24')))
  79.         self.RenameGroupAction.setIcon(QIcon(load_pixmap('rename_group', '24x24')))
  80.         self.RemoveGroupAction.setIcon(QIcon(load_pixmap('remove_group', '24x24')))
  81.         self.NewNameAction.setIcon(QIcon(load_pixmap('new_user', '24x24')))
  82.         self.RemoveNameAction.setIcon(QIcon(load_pixmap('remove_user', '24x24')))
  83.         self.AddToGroupAction.setIcon(QIcon(load_pixmap('add_to_group', '24x24')))
  84.         self.RemoveFromGroupAction.setIcon(QIcon(load_pixmap('remove_from_group', '24x24')))
  85.  
  86.         self.connect(self.QuitAction, SIGNAL("triggered()"), self.close)
  87.         self.connect(self.NewGroupAction, SIGNAL("triggered()"), self.NewGroupAction_triggered)
  88.         self.connect(self.NewGroupFromSelectionAction, SIGNAL("triggered()"), self.NewGroupFromSelectionAction_triggered)
  89.         self.connect(self.RenameGroupAction, SIGNAL("triggered()"), self.RenameGroupAction_triggered)
  90.         self.connect(self.RemoveGroupAction, SIGNAL("triggered()"), self.RemoveGroupAction_triggered)
  91.         self.connect(self.NewNameAction, SIGNAL("triggered()"), self.NewNameAction_triggered)
  92.         self.connect(self.RemoveNameAction, SIGNAL("triggered()"), self.RemoveNameAction_triggered)
  93.         self.connect(self.ImportAction, SIGNAL("triggered()"), self.ImportAction_triggered)
  94.         self.connect(self.RemoveFromGroupAction, SIGNAL("triggered()"), self.RemoveFromGroupAction_triggered)
  95.         self.connect(self.AddToGroupAction, SIGNAL("triggered()"), self.AddToGroupAction_triggered)
  96.  
  97.         self.GroupTableWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
  98.         self.NameTableWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
  99.  
  100.         self.connect(self.Splitter, SIGNAL("splitterMoved(int, int)"), self.Splitter_splitterMoved)
  101.         self.Splitter.setChildrenCollapsible(False)
  102.         self.Splitter.setHandleWidth(self.Splitter.handleWidth()+2)
  103.  
  104.         self.GroupTableWidget.verticalHeader().hide()
  105.         self.GroupTableWidget.setShowGrid(False)
  106.         self.GroupTableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
  107.         self.NameTableWidget.verticalHeader().hide()
  108.         self.NameTableWidget.setShowGrid(False)
  109.  
  110.         self.NameTableWidget.setDragEnabled(True)
  111.         self.GroupTableWidget.setAcceptDrops(True)
  112.         self.GroupTableWidget.setDropIndicatorShown(True)
  113.  
  114.         self.connect(self.GroupTableWidget, SIGNAL("itemSelectionChanged()"),
  115.                      self.GroupTableWidget_itemSelectionChanged)
  116.         self.connect(self.NameTableWidget, SIGNAL("itemSelectionChanged()"),
  117.                      self.NameTableWidget_itemSelectionChanged)
  118.         self.connect(self.NameLineEdit, SIGNAL("editingFinished()"),
  119.                      self.NameLineEdit_editingFinished)
  120.         self.connect(self.FaxNumberLineEdit, SIGNAL("editingFinished()"),
  121.                      self.FaxNumberLineEdit_editingFinished)
  122.         self.connect(self.NotesTextEdit, SIGNAL("textChanged()"),
  123.                      self.NotesTextEdit_textChanged)
  124.         self.connect(self.NotesTextEdit, SIGNAL("editingFinished()"),
  125.                      self.NotesTextEdit_editingFinished)
  126.         self.connect(self.GroupTableWidget, SIGNAL("namesAddedToGroup"),
  127.                      self.GroupTableWidget_namesAddedToGroup)
  128.  
  129.         self.FaxNumberLineEdit.setValidator(PhoneNumValidator(self.FaxNumberLineEdit))
  130.         self.NameLineEdit.setValidator(AddressBookNameValidator(self.db, self.NameLineEdit))
  131.  
  132.         self.GroupTableWidget.setContextMenuPolicy(Qt.ActionsContextMenu)
  133.         self.GroupTableWidget.addAction(self.NewGroupAction)
  134.         self.GroupTableWidget.addAction(self.NewGroupFromSelectionAction)
  135.         self.GroupTableWidget.addAction(self.RenameGroupAction)
  136.         self.GroupTableWidget.addAction(self.RemoveGroupAction)
  137.  
  138.         self.NameTableWidget.setContextMenuPolicy(Qt.ActionsContextMenu)
  139.         self.NameTableWidget.addAction(self.NewNameAction)
  140.         self.NameTableWidget.addAction(self.AddToGroupAction)
  141.         self.NameTableWidget.addAction(self.RemoveFromGroupAction)
  142.         self.NameTableWidget.addAction(self.RemoveNameAction)
  143.         self.NameTableWidget.addAction(self.NewGroupFromSelectionAction)
  144.  
  145.         self.GroupTableWidget.setDatabase(self.db)
  146.  
  147.  
  148.     def updateUi(self):
  149.         if not fax_avail:
  150.             FailureUI(self, self.__tr("<b>Fax support disabled.</b><p>Fax support requires Python 2.3."))
  151.             self.close()
  152.             return
  153.  
  154.         self.updateGroupList()
  155.         self.updateNameList()
  156.         self.updateDetailsFrame()
  157.  
  158.  
  159.     def closeEvent(self, e):
  160.         #self.NameLineEdit.emit(SIGNAL("editingFinished()"))
  161.         self.FaxNumberLineEdit.emit(SIGNAL("editingFinished()"))
  162.         self.NotesTextEdit.emit(SIGNAL("editingFinished()"))
  163.         e.accept()
  164.  
  165.  
  166.     def Splitter_splitterMoved(self, pos, index):
  167.         self.GroupTableWidget.setColumnWidth(0, self.GroupTableWidget.width())
  168.         self.NameTableWidget.setColumnWidth(0, self.NameTableWidget.width())
  169.  
  170.  
  171.     def updateGroupList(self):
  172.         self.updating_group = True
  173.         all, k = None, None
  174.         try:
  175.             headerItem = QTableWidgetItem()
  176.             headerItem.setText(self.__tr("Group"))
  177.             self.GroupTableWidget.clear()
  178.             self.GroupTableWidget.setColumnCount(1)
  179.             self.GroupTableWidget.setHorizontalHeaderItem(0, headerItem)
  180.             self.GroupTableWidget.setColumnWidth(0, self.GroupTableWidget.width())
  181.  
  182.             groups = self.db.get_all_groups()
  183.             groups.sort()
  184.             self.GroupTableWidget.setRowCount(len(groups))
  185.  
  186.             # Force All group to top of table
  187.             all = QTableWidgetItem(self.__tr("All"))
  188.             all.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
  189.             self.GroupTableWidget.setItem(0, 0, all)
  190.  
  191.             j = 1
  192.             for g in groups:
  193.                 if g == u'All':
  194.                     continue
  195.  
  196.                 i = QTableWidgetItem(QString(g))
  197.  
  198.                 if g == self.group:
  199.                     k = i
  200.  
  201.                 i.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled)
  202.                 self.GroupTableWidget.setItem(j, 0, i)
  203.                 j += 1
  204.  
  205.  
  206.         finally:
  207.             self.updating_group = False
  208.  
  209.             if k is not None:
  210.                 k.setSelected(True)
  211.  
  212.             elif all is not None:
  213.                 all.setSelected(True)
  214.  
  215.  
  216.     def GroupTableWidget_itemSelectionChanged(self):
  217.         if not self.updating_group:
  218.             selected_items = self.GroupTableWidget.selectedItems()
  219.             if selected_items:
  220.                 self.group = unicode(selected_items[0].text())
  221.                 self.RemoveGroupAction.setEnabled(self.group != u'All')
  222.                 self.RenameGroupAction.setEnabled(self.group != u'All')
  223.             else: # shouldn't happen?!
  224.                 self.RemoveGroupAction.setEnabled(False)
  225.                 self.RenameGroupAction.setEnabled(False)
  226.                 self.group = None
  227.  
  228.             self.updateNameList()
  229.  
  230.  
  231.     def NameTableWidget_itemSelectionChanged(self):
  232.         if not self.updating_name:
  233.             selected_items = self.NameTableWidget.selectedItems()
  234.             num_selected_items = len(selected_items)
  235.  
  236.             if num_selected_items == 0:
  237.                 self.name = None
  238.                 self.RemoveNameAction.setEnabled(False)
  239.                 self.NewGroupFromSelectionAction.setEnabled(False)
  240.                 self.RemoveFromGroupAction.setEnabled(False)
  241.                 self.AddToGroupAction.setEnabled(False)
  242.  
  243.             elif num_selected_items == 1:
  244.                 self.name = unicode(selected_items[0].text())
  245.                 self.RemoveNameAction.setEnabled(True)
  246.                 self.NewGroupFromSelectionAction.setEnabled(True)
  247.  
  248.                 self.RemoveFromGroupAction.setEnabled(self.group != u'All')
  249.                 self.AddToGroupAction.setEnabled(True) #self.group != u'All')
  250.  
  251.             else: # > 1
  252.                 self.RemoveNameAction.setEnabled(True)
  253.                 self.NewGroupFromSelectionAction.setEnabled(True)
  254.                 self.RemoveFromGroupAction.setEnabled(self.group != u'All')
  255.                 self.AddToGroupAction.setEnabled(True) #self.group != u'All')
  256.                 self.name = None
  257.  
  258.             self.updateDetailsFrame()
  259.  
  260.  
  261.     def updateNameList(self):
  262.         self.updating_name = True
  263.         m, k = None, None
  264.         try:
  265.             headerItem = QTableWidgetItem()
  266.             headerItem.setText(self.__tr("Name"))
  267.             self.NameTableWidget.clear()
  268.             self.NameTableWidget.setColumnCount(1)
  269.             self.NameTableWidget.setHorizontalHeaderItem(0,headerItem)
  270.             self.NameTableWidget.setColumnWidth(0, self.NameTableWidget.width())
  271.  
  272.             names = self.db.group_members(self.group)
  273.             filtered_names = [n for n in names if not n.startswith('__')]
  274.             filtered_names.sort()
  275.             self.NameTableWidget.setRowCount(len(filtered_names))
  276.  
  277.             for j, n in enumerate(filtered_names):
  278.                 i = QTableWidgetItem(QString(n))
  279.                 i.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
  280.                 self.NameTableWidget.setItem(j, 0, i)
  281.  
  282.                 if n == self.name:
  283.                     m = i
  284.  
  285.                 if j == 0:
  286.                     k = i
  287.  
  288.         finally:
  289.             self.updating_name = False
  290.  
  291.             if m is not None:
  292.                 m.setSelected(True)
  293.  
  294.             elif k is not None:
  295.                 k.setSelected(True)
  296.  
  297.             else: # no names, disable name frame and name actions
  298.                 self.name = None
  299.                 self.RemoveNameAction.setEnabled(False)
  300.                 self.NewGroupFromSelectionAction.setEnabled(False)
  301.                 self.RemoveFromGroupAction.setEnabled(False)
  302.                 self.AddToGroupAction.setEnabled(False)
  303.                 self.updateDetailsFrame()
  304.  
  305.  
  306.     def selectByName(self, name):
  307.         rows = self.NameTableWidget.rowCount()
  308.         for r in range(rows):
  309.             i = self.NameTableWidget.item(r, 0)
  310.             i.setSelected(name == unicode(i.text()))
  311.  
  312.  
  313.     def updateDetailsFrame(self):
  314.         if self.name is None:
  315.             self.NameFrame.setEnabled(False)
  316.             self.NameLineEdit.setText(QString())
  317.             self.FaxNumberLineEdit.setText(QString())
  318.             self.NotesTextEdit.setText(QString())
  319.  
  320.         else:
  321.             self.NameFrame.setEnabled(True)
  322.             data = self.db.get(self.name)
  323.             self.NameLineEdit.setText(self.name)
  324.             self.FaxNumberLineEdit.setText(data['fax'])
  325.             self.NotesTextEdit.setText(data['notes'])
  326.  
  327.  
  328.     def NameLineEdit_editingFinished(self):
  329.         if self.name is not None:
  330.             new_name = unicode(self.NameLineEdit.text())
  331.             if new_name != self.name:
  332.                 if QMessageBox.question(self, self.__tr("Rename?"), self.__tr("Rename '%1' to '%2'?").arg(self.name).arg(new_name), \
  333.                                         QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
  334.  
  335.                     self.db.rename(self.name, new_name)
  336.                     log.debug("Rename %s to %s" % (self.name, new_name))
  337.                     self.emit(SIGNAL("databaseChanged"), FAB_NAME_RENAME, self.name, new_name)
  338.                     self.updateNameList()
  339.                 else:
  340.                     self.NameLineEdit.setText(self.name)
  341.  
  342.  
  343.     def FaxNumberLineEdit_editingFinished(self):
  344.         if self.name is not None:
  345.             self.db.set_key_value(self.name, 'fax', unicode(self.FaxNumberLineEdit.text()))
  346.             self.emit(SIGNAL("databaseChanged"), FAB_NAME_DETAILS_CHANGED, self.name)
  347.  
  348.  
  349.     def NotesTextEdit_textChanged(self):
  350.         if self.name is not None:
  351.             self.db.set_key_value(self.name, 'notes', unicode(self.NotesTextEdit.document().toPlainText()))
  352.  
  353.  
  354.     def NotesTextEdit_editingFinished(self):
  355.         if self.name is not None:
  356.             self.emit(SIGNAL("databaseChanged"), FAB_NAME_DETAILS_CHANGED, self.name)
  357.  
  358.  
  359.     def NewGroupAction_triggered(self):
  360.         ok = False
  361.         g, ok = QInputDialog.getText(self, self.__tr("Enter New Group Name"), self.__tr("Name for New Group:"))
  362.         g = unicode(g)
  363.  
  364.         if g == u'All':
  365.             FailureUI(self, self.__tr("<b>Sorry, the group name cannot be 'All'.</b><p>Please choose a different name."))
  366.             ok = False
  367.  
  368.         if ok:
  369.             self.db.set('__' + utils.gen_random_uuid(), '', '', '', '', [u'All', g], '')
  370.             self.group = g
  371.             log.debug("New empty group %s" % self.group)
  372.             self.emit(SIGNAL("databaseChanged"), FAB_GROUP_ADD, self.group)
  373.             self.updateGroupList()
  374.  
  375.  
  376.     def NewGroupFromSelectionAction_triggered(self):
  377.         selected_names = [unicode(n.text()) for n in self.NameTableWidget.selectedItems()]
  378.         if selected_names:
  379.             ok = False
  380.             g, ok = QInputDialog.getText(self, self.__tr("Enter New Group Name"), self.__tr("Name for New Group:"))
  381.             g = unicode(g)
  382.  
  383.             groups = self.db.get_all_groups()
  384.  
  385.             if g in groups:
  386.                 FailureUI(self, self.__tr("<b>Sorry, the group name cannot be the same as an existing group (or 'All').</b><p>Please choose a different name."))
  387.                 ok = False
  388.  
  389.             if ok:
  390.                 self.db.update_groups(g, selected_names)
  391.                 self.group = g
  392.                 log.debug("New group %s with names %s" % (self.group, ','.join(selected_names)))
  393.                 self.emit(SIGNAL("databaseChanged"), FAB_GROUP_ADD, self.group)
  394.                 self.updateGroupList()
  395.  
  396.  
  397.     def RenameGroupAction_triggered(self):
  398.         selected_items = self.GroupTableWidget.selectedItems()
  399.         if selected_items:
  400.             old_group = unicode(selected_items[0].text())
  401.             ok = False
  402.             new_group, ok = QInputDialog.getText(self, self.__tr("Rename Group"), self.__tr("New Name for Group '%1':").arg(old_group))
  403.             new_group = unicode(new_group)
  404.             groups = self.db.get_all_groups()
  405.  
  406.             if new_group in groups:
  407.                 FailureUI(self, self.__tr("<b>Sorry, the group name cannot be the same as an existing group (or 'All').</b><p>Please choose a different name."))
  408.                 ok = False
  409.  
  410.             if ok:
  411.                 self.db.rename_group(old_group, new_group)
  412.                 log.debug("Rename group %s to %s" % (old_group, new_group))
  413.                 self.emit(SIGNAL("databaseChanged"), FAB_GROUP_RENAME, old_group, new_group)
  414.                 self.group = new_group
  415.                 self.updateGroupList()
  416.  
  417.  
  418.     def RemoveGroupAction_triggered(self):
  419.         self.db.delete_group(self.group)
  420.         log.debug("Remove group %s" % self.group)
  421.         self.emit(SIGNAL("databaseChanged"), FAB_GROUP_REMOVE, self.group)
  422.         self.group = None
  423.         self.updateGroupList()
  424.  
  425.  
  426.     def NewNameAction_triggered(self):
  427.         ok = False
  428.         t, ok = QInputDialog.getText(self, self.__tr("Enter New Name"), self.__tr("New Name:"))
  429.         if ok:
  430.             t = unicode(t)
  431.             self.addName(t)
  432.  
  433.  
  434.     def addName(self, name, fax=''):
  435.         if self.group == u'All':
  436.             g = [u'All']
  437.         else:
  438.             g = [u'All', self.group]
  439.  
  440.         self.db.set(name, '', '', '', fax, g, '')
  441.         self.name = name
  442.         log.debug("New name %s" % self.name)
  443.         self.emit(SIGNAL("databaseChanged"), FAB_NAME_ADD, self.name)
  444.         self.updateNameList()
  445.  
  446.  
  447.     def RemoveNameAction_triggered(self):
  448.         selected_names = [unicode(n.text()) for n in self.NameTableWidget.selectedItems()]
  449.         if selected_names:
  450.             for n in selected_names:
  451.                 self.db.delete(n)
  452.                 log.debug("Removing name %s" % n)
  453.                 self.emit(SIGNAL("databaseChanged"), FAB_NAME_REMOVE, n)
  454.  
  455.             self.name = None
  456.             self.updateNameList()
  457.  
  458.  
  459.     def RemoveFromGroupAction_triggered(self):
  460.         selected_names = [unicode(n.text()) for n in self.NameTableWidget.selectedItems()]
  461.         if selected_names:
  462.             log.debug("%s leaving group %s" % (','.join(selected_names), self.group))
  463.             self.db.remove_from_group(self.group, selected_names)
  464.             self.emit(SIGNAL("databaseChanged"), FAB_GROUP_MEMBERSHIP_CHANGED, self.group)
  465.             self.name = None
  466.             self.updateGroupList()
  467.  
  468.  
  469.     def GroupTableWidget_namesAddedToGroup(self, row, items): # drag n' drop handler
  470.         self.group = unicode(self.GroupTableWidget.item(row, 0).text())
  471.         self.db.add_to_group(self.group, items)
  472.         log.debug("Adding %s to group %s" % (','.join(items), self.group))
  473.         self.emit(SIGNAL("databaseChanged"), FAB_GROUP_MEMBERSHIP_CHANGED, self.group)
  474.         self.updateGroupList()
  475.  
  476.  
  477.     def AddToGroupAction_triggered(self):
  478.         selected_names = [unicode(n.text()) for n in self.NameTableWidget.selectedItems()]
  479.         if selected_names:
  480.             ok = False
  481.             all_groups = self.db.get_all_groups()
  482.  
  483.             if all_groups:
  484.                 all_groups = [g for g in all_groups if g != u'All']
  485.                 all_groups.sort()
  486.  
  487.                 dlg = JoinDialog(self, all_groups)
  488.  
  489.                 if dlg.exec_() == QDialog.Accepted:
  490.                     group = dlg.group
  491.                     if group:
  492.                         self.db.add_to_group(group, selected_names)
  493.                         self.group = group
  494.                         log.debug("Adding %s to group %s" % (','.join(selected_names), self.group))
  495.                         self.emit(SIGNAL("databaseChanged"), FAB_GROUP_MEMBERSHIP_CHANGED, self.group)
  496.                         self.updateGroupList()
  497.  
  498.             else:
  499.                 FailureUI(self, self.__tr("<b>There are no groups to join.</b><p>Use <i>New Group from Selection</i> to create a new group using these name(s)."))
  500.  
  501.  
  502.     def ImportAction_triggered(self):
  503.         result = unicode(QFileDialog.getOpenFileName(self,
  504.                          self.__tr("Import fax addresses from LDIF or vCard"),
  505.                          user_conf.workingDirectory(), "vCard (*.vcf);;LDIF (*.ldif *.ldi)"))
  506.  
  507.         if result:
  508.             working_directory = unicode(os.path.dirname(result))
  509.             log.debug("result: %s" % result)
  510.             user_conf.setWorkingDirectory(working_directory)
  511.  
  512.             if result:
  513.                 if result.endswith('.vcf'):
  514.                     ok, error_str = self.db.import_vcard(result)
  515.                 else:
  516.                     ok, error_str = self.db.import_ldif(result)
  517.  
  518.                 if not ok:
  519.                     FailureUI(self, error_str)
  520.  
  521.                 else:
  522.                     self.updateUi()
  523.  
  524.  
  525.     def __tr(self,s,c = None):
  526.         return qApp.translate("FABWindow",s,c)
  527.  
  528.  
  529.  
  530.  
  531. class JoinDialog(QDialog):
  532.     def __init__(self, parent, groups):
  533.         QDialog.__init__(self, parent)
  534.         self.group = ''
  535.         self.setupUi(groups)
  536.  
  537.  
  538.     def setupUi(self, groups):
  539.         self.setObjectName("Dialog")
  540.         self.resize(QSize(QRect(0,0,271,107).size()).expandedTo(self.minimumSizeHint()))
  541.  
  542.         self.gridlayout = QGridLayout(self)
  543.         self.gridlayout.setObjectName("gridlayout")
  544.  
  545.         self.hboxlayout = QHBoxLayout()
  546.         self.hboxlayout.setObjectName("hboxlayout")
  547.  
  548.         self.label = QLabel(self)
  549.         self.label.setObjectName("label")
  550.         self.hboxlayout.addWidget(self.label)
  551.  
  552.         self.GroupJoinComboBox = QComboBox(self)
  553.  
  554.         sizePolicy = QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Fixed)
  555.         sizePolicy.setHorizontalStretch(0)
  556.         sizePolicy.setVerticalStretch(0)
  557.         sizePolicy.setHeightForWidth(self.GroupJoinComboBox.sizePolicy().hasHeightForWidth())
  558.         self.GroupJoinComboBox.setSizePolicy(sizePolicy)
  559.         self.GroupJoinComboBox.setObjectName("comboBox")
  560.         self.hboxlayout.addWidget(self.GroupJoinComboBox)
  561.         self.gridlayout.addLayout(self.hboxlayout,0,0,1,3)
  562.  
  563.         spacerItem = QSpacerItem(20,40,QSizePolicy.Minimum,QSizePolicy.Expanding)
  564.         self.gridlayout.addItem(spacerItem,1,0,1,1)
  565.  
  566.         spacerItem1 = QSpacerItem(231,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
  567.         self.gridlayout.addItem(spacerItem1,2,0,1,1)
  568.  
  569.         self.JoinButton = QPushButton(self)
  570.         self.JoinButton.setObjectName("pushButton_2")
  571.         self.gridlayout.addWidget(self.JoinButton,2,1,1,1)
  572.  
  573.         self.CancelButton = QPushButton(self)
  574.         self.CancelButton.setObjectName("pushButton")
  575.         self.gridlayout.addWidget(self.CancelButton,2,2,1,1)
  576.  
  577.         self.connect(self.GroupJoinComboBox, SIGNAL("currentIndexChanged(int)"),
  578.             self.GroupJoinComboBox_currentIndexChanged)
  579.  
  580.         for i, g in enumerate(groups):
  581.             if i == 0:
  582.                 self.group = g
  583.             self.GroupJoinComboBox.insertItem(i, g)
  584.  
  585.         self.connect(self.JoinButton, SIGNAL("clicked()"), self.accept)
  586.         self.connect(self.CancelButton, SIGNAL("clicked()"), self.reject)
  587.  
  588.         self.retranslateUi()
  589.  
  590.  
  591.     def GroupJoinComboBox_currentIndexChanged(self, i):
  592.         self.group = unicode(self.GroupJoinComboBox.currentText())
  593.  
  594.  
  595.     def retranslateUi(self):
  596.         self.setWindowTitle(QApplication.translate("Dialog", "Join Group", None, QApplication.UnicodeUTF8))
  597.         self.label.setText(QApplication.translate("Dialog", "Group to Join:", None, QApplication.UnicodeUTF8))
  598.         self.JoinButton.setText(QApplication.translate("Dialog", "Join", None, QApplication.UnicodeUTF8))
  599.         self.CancelButton.setText(QApplication.translate("Dialog", "Cancel", None, QApplication.UnicodeUTF8))
  600.