예제 #1
0
    def __init__(self, maxResults=200):
        #qt.QWidget.__init__(self, None, qc.Qt.Tool)## FIXME
        qt.QDialog.__init__(self, None, qc.Qt.Tool)## FIXME
        self.maxResults = maxResults
        self.vbox = qt.QVBoxLayout()
        self.vbox.setMargin(0)
        self.setLayout(self.vbox)
        ###############
        hbox = HBox()
        hbox.addWidget(qt.QLabel(_('Search Cities:')))
        entry = qt.QLineEdit()
        hbox.addWidget(entry)
        entry.changeEvent = self.entryChanged
        self.vbox.addWidget(hbox)
        ######################
        treev = qt.QTreeWidget()
        treev.setColumnCount(2)
        treev.setHeaderLabels([_('Index'), _('City'),])
        treev.hideColumn(0)
        #treev.set_headers_clickable(False)
        #treev.set_headers_visible(False)
        self.vbox.addWidget(treev)
        self.treev = treev
        treev.selectionChanged = self.treevSelectionChanged
        #treev.set_search_column(1)
        #########
        lines = file(dataDir+'/locations.txt').read().split('\n')
        cityData = []
        country = ''
        for l in lines:
            p = l.split('\t')
            if len(p)<2:
                #print p
                continue
            if p[0]=='':
                if p[1]=='':
                    city, lat, lng = p[2:5]
                    #if country=='Iran':
                    #    print city
                    if len(p)>4:
                        cityData.append((
                            country + '/' + city,
                            _(country) + '/' + _(city),
                            float(lat),
                            float(lng)
                        ))
                    else:
                        print country, p
                else:
                    country = p[1]

        self.cityData = cityData
        self.updateList()
        ###########
        gbox = qt.QGroupBox(_('Edit Manually'))
        gboxLay = qt.QVBoxLayout()
        gboxLay.setMargin(0)## FIXME
        gbox.setLayout(gboxLay)
        gbox.setCheckable(True)
        self.connect(gbox, qc.SIGNAL('toggled (bool)'), self.editCheckbToggled)
        self.gboxEdit = gbox
        vbox = VBox()
        #group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
        #####
        hbox = HBox()
        label = qt.QLabel(_('Name:'))
        hbox.addWidget(label)
        #group.add_widget(label)
        #label.set_alignment(0, 0.5)
        entry = qt.QLineEdit()
        hbox.addWidget(entry)
        vbox.addWidget(hbox)
        self.entry_edit_name = entry
        ####
        hbox = HBox()
        label = qt.QLabel(_('Latitude:'))
        hbox.addWidget(label)
        #group.add_widget(label)
        #label.set_alignment(0, 0.5)
        ####
        spin = qt.QDoubleSpinBox()
        spin.setSingleStep(1)
        spin.setRange(-180, 180)
        spin.setDecimals(3)
        spin.setLayoutDirection(qc.Qt.LeftToRight)
        hbox.addWidget(spin)
        vbox.addWidget(hbox)
        self.spin_lat = spin
        ####
        hbox = HBox()
        label = qt.QLabel(_('Longitude:'))
        hbox.addWidget(label)
        #group.add_widget(label)
        spin = qt.QDoubleSpinBox()
        spin.setSingleStep(1)
        spin.setRange(-180, 180)
        spin.setDecimals(3)
        spin.setLayoutDirection(qc.Qt.LeftToRight)
        hbox.addWidget(spin)
        vbox.addWidget(hbox)
        self.spin_lng = spin
        ####
        hbox = HBox()
        self.lowerLabel = qt.QLabel('')
        # self.lowerLabel.setSizePolicy Expandig ## FIXME
        hbox.addWidget(self.lowerLabel)
        #self.lowerLabel.set_alignment(0, 0.5)
        button = qt.QPushButton(_('Calculate Nearest City'))
        self.connect(button, qc.SIGNAL('clicked ()'), self.calcClicked)
        hbox.addWidget(button)
        vbox.addWidget(hbox)
        ####
        vbox.setEnabled(False)
        gboxLay.addWidget(vbox)
        self.vbox_edit = vbox
        self.vbox.addWidget(gbox)
        #######
        bbox = qt.QDialogButtonBox(qc.Qt.Horizontal)
        cancelB = bbox.addButton(qt.QDialogButtonBox.Cancel)
        okB = bbox.addButton(qt.QDialogButtonBox.Ok)
        if autoLocale:
            cancelB.setText(_('_Cancel'))
            #cancelB.setIcon(qt.QIcon('cancel.png'))
            okB.setText(_('_OK'))
            #okB.setIcon(qt.QIcon('ok.png'))
            #okB.grab_default()#?????????
            #okB.grab_focus()#?????????
        ## ???????????????
        self.connect(bbox, qc.SIGNAL('rejected()'), lambda: self.reject())
        self.connect(bbox, qc.SIGNAL('accepted()'), lambda: self.accept())
        #self.connect(cancelB, qc.SIGNAL('clicked()'), self.reject)
        #self.connect(okB, qc.SIGNAL('clicked()'), self.accept)
        '''
        cancelB = self.add_button(gtk.STOCK_CANCEL, self.EXIT_CANCEL)
        okB = self.add_button(gtk.STOCK_OK, self.EXIT_OK)
        #if autoLocale:
        cancelB.setText(_('_Cancel'))
        cancelB.set_image(gtk.image_new_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_BUTTON))
        okB.setText(_('_OK'))
        okB.set_image(gtk.image_new_from_stock(gtk.STOCK_OK, gtk.ICON_SIZE_BUTTON))
        '''
        self.vbox.addWidget(bbox)
예제 #2
0
class CustomizeDialog(qt.QWidget):## QDialog
    def __init__(self, items=[], mainWin=None):
        qt.QDialog.__init__(self)
        self.setWindowTitle(_('Customize'))
        self.vbox = qt.QVBoxLayout()
        self.vbox.setMargin(0)
        self.setLayout(self.vbox)## FIXME
        self.optionBox = qt.QStackedLayout()
        self.optionBox.setMargin(0)
        #self.optionBox.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Minimum)
        self.nullWidget = qt.QLabel('')
        self.optionBox.addWidget(self.nullWidget)
        #if rtl:
        #    self.setLayoutDirection(qt.QBoxLayout.RightToLeft)
        ###
        self.items = items
        self.mainWin = mainWin
        ###
        self.tree = qt.QTreeWidget(self)
        #self.tree.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding)
        self.tree.setHeaderHidden(True)
        self.tree.setItemsExpandable(True)
        self.tree.setSelectionMode(qt.QAbstractItemView.SingleSelection)
        self.tree.setColumnCount(2)
        self.connect(self.tree, qc.SIGNAL('itemChanged (QTreeWidgetItem *,int)'), self.itemChanged)
        for item in items:
            qItem = qt.QTreeWidgetItem(['', item.desc])
            qItem.setCheckState(0, qc.Qt.Checked if item.enable else qc.Qt.Unchecked)
            if item.optionsWidget:
                self.optionBox.addWidget(item.optionsWidget)
                #item.optionsWidget.setSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Minimum)
            for child in item.items:
                child.qItem = qt.QTreeWidgetItem(['', child.desc])
                child.qItem.setCheckState(0, qc.Qt.Checked if child.enable else qc.Qt.Unchecked)
                qItem.addChild(child.qItem)
                if child.optionsWidget:
                    self.optionBox.addWidget(child.optionsWidget)
            self.tree.addTopLevelItem(qItem)
            item.qItem = qItem
        #####
        hbox = qt.QHBoxLayout()
        hbox.setMargin(0)
        vbox_l = qt.QVBoxLayout()
        vbox_l.setMargin(0)
        vbox_l.addWidget(self.tree)
        hbox.addLayout(vbox_l)
        #####
        toolbar = qt.QToolBar(self)
        toolbar.setOrientation(qc.Qt.Vertical)
        ###
        action = qt.QAction(qt.QIcon(qpixDir+'/go-up.png'), '', self)
        action.connect(action, qc.SIGNAL('triggered()'), self.upClicked)
        action.setToolTip(_('Move up'))
        toolbar.addAction(action)
        ###
        action = qt.QAction(qt.QIcon(qpixDir+'/go-down.png'), '', self)
        action.connect(action, qc.SIGNAL('triggered()'), self.downClicked)
        action.setToolTip(_('Move down'))
        toolbar.addAction(action)
        ###
        hbox.addWidget(toolbar)
        self.vbox.addLayout(hbox)
        self.vbox_l = vbox_l
        ########
        self.widget = VBox()
        for item in items:
            try:
                self.widget.addWidget(item.widget)
            except TypeError:
                print '\nERROR: the widget for item %s has wrong type %s'%(item._name, type(item.widget))
        self.widget.setVisible(True)
        for item in items:
            if item.enable:
                for chItem in item.items:
                    if not chItem.enable:
                        chItem.widget.setVisible(False)
            else:
                item.widget.setVisible(False)
        ########
        self.tree.selectionChanged = self.treevCursorChanged
        ###
        self.vbox.addLayout(self.optionBox)
        ########
        bbox = qt.QDialogButtonBox(self)
        closeB = bbox.addButton(qt.QDialogButtonBox.Close)
        if ui.autoLocale:
            closeB.setText(_('_Close'))
        ## ???????????????
        self.connect(closeB, qc.SIGNAL('clicked()'), self.closeEvent)
        self.vbox.addWidget(bbox)
    def itemChanged(self, qItem, column_index):## enableCellToggled
        (index, parentIndex) = self.getSelectedIndex()
        item = self.getItemByIndex(index, parentIndex)
        item.enable = (qItem.checkState(0)==qc.Qt.Checked)
        item.widget.setVisible(item.enable)
        if item.enable:
            item.onDateChange()
            try:
                item.widget.repaint()
            except:
                pass
        elif self.mainWin:
            self.mainWin.setMinHeightLater()
    def getItemByIndex(self, index, parentIndex=-1):
        if parentIndex==-1:
            return self.items[index]
        else:
            return self.items[parentIndex].items[index]
    def getSelectedIndex(self):
        qIndexes = self.tree.selectedIndexes()
        if not qIndexes:
            return (-1, -1)
        qIndex = qIndexes[0]
        return (qIndex.row(), qIndex.parent().row())
    def treevCursorChanged(self, selected, deselected):
        (index, parentIndex) = self.getSelectedIndex()
        if index==-1:
            return
        #print 'treevCursorChanged', index, parentIndex
        item = self.getItemByIndex(index, parentIndex)
        if item.optionsWidget:
            self.optionBox.setCurrentWidget(item.optionsWidget)
            pass
        else:
            self.optionBox.setCurrentWidget(self.nullWidget)
    def upClicked(self):
        (index, parentIndex) = self.getSelectedIndex()
        if index==-1:
            return
        #print 'upClicked', index, parentIndex
        #item = self.getItemByIndex(index, parentIndex)
        if index<=0:
            qt.QApplication.beep()
            return
        if parentIndex==-1:
            self.moveItemUp(index)
            qItem = self.tree.takeTopLevelItem(index)
            self.tree.insertTopLevelItem(index-1, qItem)
            self.tree.setCurrentItem(qItem)
        else:
            root = self.items[parentIndex]
            root.moveItemUp(index)
            qRootItem = self.tree.topLevelItem(parentIndex)
            qItem = qRootItem.takeChild(index)
            qRootItem.insertChild(index-1, qItem)
            self.tree.setCurrentItem(qItem)
    def downClicked(self):
        (index, parentIndex) = self.getSelectedIndex()
        if index==-1:
            return
        #print 'upClicked', index, parentIndex
        #item = self.getItemByIndex(index, parentIndex)
        if parentIndex==-1:
            if index>=len(self.items)-1:
                qt.QApplication.beep()
                return
            self.moveItemUp(index+1)
            qItem = self.tree.takeTopLevelItem(index+1)
            self.tree.insertTopLevelItem(index, qItem)
            self.tree.setCurrentItem(self.tree.topLevelItem(index+1))
        else:
            root = self.items[parentIndex]
            if index>=len(root.items)-1:
                qt.QApplication.beep()
                return
            root.moveItemUp(index+1)
            qRootItem = self.tree.topLevelItem(parentIndex)
            qItem = qRootItem.takeChild(index+1)
            qRootItem.insertChild(index, qItem)
            self.tree.setCurrentItem(qRootItem.child(index+1))
    def moveItemUp(self, i):
        self.widget.removeWidget(self.items[i].widget)
        self.widget.insertWidget(i-1, self.items[i].widget)## QBoxLayout.insertWidget
        self.items.insert(i-1, self.items.pop(i))
    #def confStr(self):## FIXME
    def closeEvent(self, event=None):
        text = ''
        mainWinItems = []
        for item in self.items:
            item.updateVars()
            text += item.confStr()
            mainWinItems.append((item._name, item.enable))
        text += 'ui.mainWinItems=%r\n'%mainWinItems
        open(preferences.customizeConfPath, 'w').write(text) # FIXME
        self.hide()
        if event:
            event.ignore()
예제 #3
0
class ExportDialog(qt.QFileDialog):
    def __init__(self, mainWin):
        self.mainWin = mainWin
        self.mcal = mainWin.mcal
        qt.QFileDialog.__init__(self)
        self.setAcceptMode(qt.QFileDialog.AcceptSave)
        self.setFileMode(qt.QFileDialog.AnyFile)## FIXME
        self.setOption(qt.QFileDialog.HideNameFilterDetails)
        self.setWindowTitle(_('Export to %s')%'HTML')
        self.vbox = VBox()
        ########
        hbox = HBox()
        hbox.addWidget(qt.QLabel(_('Month Range')))
        combo = qt.QComboBox()
        for t in ('Current Month', 'Whole Current Year', 'Custom'):
            combo.addItem(_(t))
        hbox.addWidget(combo)
        hbox.addWidget(qt.QLabel(''))
        self.combo = combo
        ###
        hbox2 = HBox()
        hbox2.addWidget(qt.QLabel(_('from month')))
        self.ymBox0 = YearMonthBox()
        hbox2.addWidget(self.ymBox0)
        hbox2.addWidget(qt.QLabel(''))
        hbox2.addWidget(qt.QLabel(_('to month')))
        self.ymBox1 = YearMonthBox()
        hbox2.addWidget(self.ymBox1)
        hbox.addWidget(hbox2)
        self.hbox2 = hbox2
        combo.setCurrentIndex(0)
        self.vbox.addWidget(hbox)
        ########
        self.layout().addWidget(self.vbox, 4, 0, 5, 2)## between rows 4 and 5, between columns 0 and 2 (before buttons)
        ########
        self.connect(combo, qc.SIGNAL('currentIndexChanged (int)'), self.comboChanged)
        self.connect(self, qc.SIGNAL('fileSelected (const QString&)'), self.save)
        try:
            self.setDirectory(deskDir)
        except:## FIXME
            pass
    def comboChanged(self, index=None, ym=None):
        if index is None:
            index = self.combo.currentIndex()
        if ym==None:
            ym = (ui.cell.year, ui.cell.month)
        if index==0:
            filename = 'calendar-%.4d-%.2d.html'%ym
            self.hbox2.hide()
        elif index==1:
            #self.fcw.set_current_name('calendar-%.4d.html'%ym[0])
            filename = 'calendar-%.4d.html'%ym[0]
            self.hbox2.hide()
        else:#elif index==2
            filename = 'calendar.html'
            self.hbox2.show()
        #self.fcw.set_current_name(filename)
        self.selectFile(filename)## FIXME
        ## select_region(0, -4) ## FIXME
    def closeEvent(self, event):
        self.hide()
        event.ignore()
    def done(self, i):
        self.hide()
    def save(self, path):
        print 'save', path
        self.setCursor(qc.Qt.WaitCursor)
        #while gtk.events_pending():## FIXME
        #    gtk.main_iteration_do(False)
        if path in (None, ''):
            return
        print 'Exporting to html file "%s"'%path
        i = self.combo.currentIndex()
        months = []
        module = core.modules[core.primaryMode]
        if i==0:
            s = getCurrentMonthStatus()
            months = [s]
            title = '%s %s'%(core.getMonthName(core.primaryMode, s.month, s.year), _(s.year))
        elif i==1:
            for i in xrange(1, 13):
                months.append(getMonthStatus(ui.cell.year, i))
            title = '%s %s'%(_('Calendar'), _(ui.cell.year))
        elif i==2:
            y0, m0 = self.ymBox0.getYM()
            y1, m1 = self.ymBox1.getYM()
            for ym in xrange(y0*12+m0-1, y1*12+m1):
                y, m = divmod(ym, 12)
                m += 1
                months.append(getMonthStatus(y, m))
            title = _('Calendar')
        exportToHtml(path, months, title)
        self.setCursor(qc.Qt.ArrowCursor)
        self.hide()
    def showDialog(self, year, month):
        self.comboChanged(ym=(year, month))
        self.ymBox0.setYM(year, month)
        self.ymBox1.setYM(year, month)
        self.resize(700, 400)
        self.show()## raise_()