def makeWidget(obj): """ obj is an instance of Event, EventRule, EventNotifier or EventGroup """ cls = obj.__class__ try: WidgetClass = cls.WidgetClass except AttributeError: try: module = __import__( ".".join([ modPrefix, cls.tname, cls.name, ]), fromlist=["WidgetClass"], ) WidgetClass = cls.WidgetClass = module.WidgetClass except: myRaise() return widget = WidgetClass(obj) try: widget.show_all() except AttributeError: widget.show() widget.updateWidget() ## FIXME return widget
def add(self, t0, t1, eid, debug=False): if debug: from time import strftime, localtime f = "%F, %T" print("EventSearchTree.add: %s\t%s\t%s" % ( eid, strftime(f, localtime(t0)), strftime(f, localtime(t1)), )) ### if t0 == t1: t1 += epsTm ## needed? FIXME mt = (t0 + t1) / 2.0 dt = (t1 - t0) / 2.0 ### try: self.root = self.addStep( self.root, t0, t1, mt, dt, eid, ) except: myRaise() hp = self.byId.get(eid) if hp is None: hp = self.byId[eid] = MaxHeap() hp.push(mt, dt) ## FIXME
def statusIconUpdateIcon(self, ddate):## FIXME from scal3.utils import toBytes imagePath = ui.statusIconImageHoli if ui.todayCell.holiday else ui.statusIconImage ext = os.path.splitext(imagePath)[1][1:].lower() loader = GdkPixbuf.PixbufLoader.new_with_type(ext) if ui.statusIconFixedSizeEnable: try: width, height = ui.statusIconFixedSizeWH loader.set_size(width, height) except: myRaise() data = open(imagePath, 'rb').read() if ext == 'svg': dayNum = locale_man.numEncode( ddate[2], mode=calTypes.primary, # FIXME ) if ui.statusIconFontFamilyEnable: if ui.statusIconFontFamily: family = ui.statusIconFontFamily else: family = ui.getFont()[0] dayNum = '<tspan style="font-family:%s">%s</tspan>'%(family, dayNum) data = data.replace( b'TX', toBytes(dayNum), ) loader.write(data) loader.close() pixbuf = loader.get_pixbuf() self.sicon.set_from_pixbuf(pixbuf)
def add(self, t0, t1, eid, debug=False): if debug: from time import strftime, localtime f = "%F, %T" print("EventSearchTree.add: %s\t%s\t%s" % ( eid, strftime(f, localtime(t0)), strftime(f, localtime(t1)), )) ### if t0 == t1: t1 += epsTm ## needed? FIXME mt = (t0 + t1) / 2.0 dt = (t1 - t0) / 2.0 ### try: self.root = self.addStep( self.root, t0, t1, mt, dt, eid, ) except: myRaise() hp = self.byId.get(eid) if hp is None: hp = self.byId[eid] = MaxHeap() hp.push(mt, dt)## FIXME
def statusIconUpdateIcon(self, ddate):## FIXME from scal3.utils import toBytes imagePath = ui.statusIconImageHoli if ui.todayCell.holiday else ui.statusIconImage ext = os.path.splitext(imagePath)[1][1:].lower() loader = GdkPixbuf.PixbufLoader.new_with_type(ext) if ui.statusIconFixedSizeEnable: try: width, height = ui.statusIconFixedSizeWH loader.set_size(width, height) except: myRaise() data = open(imagePath).read() if ext == 'svg': dayNum = _(ddate[2]) if ui.statusIconFontFamilyEnable: if ui.statusIconFontFamily: family = ui.statusIconFontFamily else: family = ui.getFont()[0] dayNum = '<tspan style="font-family:%s">%s</tspan>'%(family, dayNum) data = data.replace( 'TX', dayNum, ) data = toBytes(data) loader.write(data) loader.close() pixbuf = loader.get_pixbuf() self.sicon.set_from_pixbuf(pixbuf)
def makeWidget(obj): """ obj is an instance of Event, EventRule, EventNotifier or EventGroup """ cls = obj.__class__ try: WidgetClass = cls.WidgetClass except AttributeError: try: module = __import__( ".".join([ modPrefix, cls.tname, cls.name, ]), fromlist=["WidgetClass"], ) WidgetClass = cls.WidgetClass = module.WidgetClass except: myRaise() return widget = WidgetClass(obj) try: widget.show_all() except AttributeError: widget.show() widget.updateWidget()## FIXME return widget
def cleanup(self): for fname in os.listdir(tmpDir): if not fname.startswith(self.imNamePrefix): continue try: os.remove(join(tmpDir, fname)) except: myRaise()
def set_tooltip(widget, text): try: widget.set_tooltip_text(text) ## PyGTK 2.12 or above except AttributeError: try: widget.set_tooltip(gtk.Tooltips(), text) except: myRaise(__file__)
def setText(self, text): try: num = float(textNumDecode(text)) except: myRaise() self.setDefault() else: self.setValue(num)
def set_tooltip(widget, text): try: widget.set_tooltip_text(text)## PyGTK 2.12 or above except AttributeError: try: widget.set_tooltip(gtk.Tooltips(), text) except: myRaise(__file__)
def imageFromFile(path): ## the file must exist if not isabs(path): path = join(pixDir, path) im = gtk.Image() try: im.set_from_file(path) except: myRaise() return im
def imageFromFile(path):## the file must exist if not isabs(path): path = join(pixDir, path) im = gtk.Image() try: im.set_from_file(path) except: myRaise() return im
def pixbufFromFile(path): ## the file may not exist if not path: return None if not isabs(path): path = join(pixDir, path) try: return GdkPixbuf.Pixbuf.new_from_file(path) except: myRaise() return None
def pixbufFromFile(path):## the file may not exist if not path: return None if not isabs(path): path = join(pixDir, path) try: return GdkPixbuf.Pixbuf.new_from_file(path) except: myRaise() return None
def checkAndSaveJsonLockFile(fpath): locked = False if isfile(fpath): try: text = open(fpath).read() except: myRaise() locked = True else: try: data = jsonToData(text) except: print('lock file %s is not valid' % fpath) else: try: pid = data['pid'] cmd = data['cmd'] except: print('lock file %s is not valid' % fpath) else: try: proc = psutil.Process(pid) except psutil.NoSuchProcess: print('lock file %s: pid %s does not exist' % (fpath, pid)) else: if get_cmdline(proc) == cmd: locked = True else: print('lock file %s: cmd does match: %s != %s' % (fpath, get_cmdline(proc), cmd)) elif exists(fpath): ## what to do? FIXME pass ###### if not locked: my_pid = os.getpid() my_proc = psutil.Process(my_pid) my_cmd = get_cmdline(my_proc) my_text = dataToPrettyJson( OrderedDict([ ('pid', my_pid), ('cmd', my_cmd), ('time', now()), ])) try: open(fpath, 'w').write(my_text) except Exception as e: print('failed to write lock file %s: %s' % (fpath, e)) else: atexit.register(os.remove, fpath) ###### return locked
def quit(self, widget=None, event=None): try: ui.saveLiveConf() except: myRaise() if self.statusIconMode>1 and self.sicon: self.sicon.set_visible(False) ## needed for windows ## before or after main_quit ? self.destroy() ###### core.stopRunningThreads() ###### return gtk.main_quit()
def setText(self, text): if text == "": self.setDefault() return try: num = int(float(textNumDecode(text))) except: print("IntField: invalid text = %r" % text) myRaise() self.setDefault() else: self.setValue(num)
def getLoadedObj(self): try: module = __import__( self.moduleName, fromlist=["CalObj"], ) CalObj = module.CalObj except: myRaise() return obj = CalObj() obj.enable = self.enable return obj
def getLoadedObj(self): try: module = __import__( self.moduleName, fromlist=['CalObj'], ) CalObj = module.CalObj except: myRaise() return obj = CalObj() obj.enable = self.enable return obj
def doAction(self): container = self._container if self.iconRadio.get_active(): chType = self.iconChangeCombo.get_active() if chType != 0: icon = self.iconSelect.get_filename() for event in container: if not (chType == 2 and event.icon): event.icon = icon event.afterModify() event.save() elif self.timeZoneRadio.get_active(): chType = self.timeZoneChangeCombo.get_active() timeZone = self.timeZoneInput.get_text() if chType != 0: try: natz.timezone(timeZone) except: myRaise('Invalid Time Zone "%s"' % timeZone) else: for event in container: if not (chType == 2 and event.timeZone): event.timeZone = timeZone event.afterModify() event.save() else: chType = self.textChangeCombo.get_active() if chType != 0: text1 = self.textInput1.get_text() text2 = self.textInput2.get_text() if self.summaryRadio.get_active(): for event in container: if chType == 1: event.summary = text1 + event.summary elif chType == 2: event.summary = event.summary + text1 elif chType == 3: event.summary = event.summary.replace(text1, text2) event.afterModify() event.save() elif self.descriptionRadio.get_active(): for event in container: if chType == 1: event.description = text1 + event.description elif chType == 2: event.description = event.description + text1 elif chType == 3: event.description = event.description.replace( text1, text2) event.afterModify() event.save()
def parseDroppedDate(text): part = text.split("/") if len(part) == 3: try: part[0] = numDecode(part[0]) part[1] = numDecode(part[1]) part[2] = numDecode(part[2]) except: myRaise(__file__) return None maxPart = max(part) if maxPart > 999: minMax = ( (1000, 2100), (1, 12), (1, 31), ) formats = ( [0, 1, 2], [1, 2, 0], [2, 1, 0], ) for format in formats: for i in range(3): valid = True f = format[i] if not (minMax[f][0] <= part[i] <= minMax[f][1]): valid = False break if valid: # "format" must be list because we use method "index" year = part[format.index(0)] month = part[format.index(1)] day = part[format.index(2)] break else: valid = 0 <= part[0] <= 99 and \ 1 <= part[1] <= 12 and \ 1 <= part[2] <= 31 ### year = 2000 + part[0] # FIXME month = part[1] day = part[2] if not valid: return None else: return None # FIXME: when drag from a persian GtkCalendar with format %y/%m/%d #if year < 100: # year += 2000 return (year, month, day)
def doAction(self): container = self._container if self.iconRadio.get_active(): chType = self.iconChangeCombo.get_active() if chType != 0: icon = self.iconSelect.get_filename() for event in container: if not (chType == 2 and event.icon): event.icon = icon event.afterModify() event.save() elif self.timeZoneRadio.get_active(): chType = self.timeZoneChangeCombo.get_active() timeZone = self.timeZoneInput.get_text() if chType != 0: try: natz.gettz(timeZone) except: myRaise("Invalid Time Zone \"%s\"" % timeZone) else: for event in container: if not (chType == 2 and event.timeZone): event.timeZone = timeZone event.afterModify() event.save() else: chType = self.textChangeCombo.get_active() if chType != 0: text1 = self.textInput1.get_text() text2 = self.textInput2.get_text() if self.summaryRadio.get_active(): for event in container: if chType == 1: event.summary = text1 + event.summary elif chType == 2: event.summary = event.summary + text1 elif chType == 3: event.summary = event.summary.replace(text1, text2) event.afterModify() event.save() elif self.descriptionRadio.get_active(): for event in container: if chType == 1: event.description = text1 + event.description elif chType == 2: event.description = event.description + text1 elif chType == 3: event.description = event.description.replace(text1, text2) event.afterModify() event.save()
def checkAndSaveJsonLockFile(fpath): locked = False if isfile(fpath): try: text = open(fpath).read() except: myRaise() locked = True else: try: data = jsonToData(text) except: print('lock file %s is not valid'%fpath) else: try: pid = data['pid'] cmd = data['cmd'] except: print('lock file %s is not valid'%fpath) else: try: proc = psutil.Process(pid) except psutil.NoSuchProcess: print('lock file %s: pid %s does not exist'%(fpath, pid)) else: if get_cmdline(proc) == cmd: locked = True else: print('lock file %s: cmd does match: %s != %s'%(fpath, get_cmdline(proc), cmd)) elif exists(fpath): ## what to do? FIXME pass ###### if not locked: my_pid = os.getpid() my_proc = psutil.Process(my_pid) my_cmd = get_cmdline(my_proc) my_text = dataToPrettyJson(OrderedDict([ ('pid', my_pid), ('cmd', my_cmd), ('time', now()), ])) try: open(fpath, 'w').write(my_text) except Exception as e: print('failed to write lock file %s: %s'%(fpath, e)) else: atexit.register(os.remove, fpath) ###### return locked
def delete(self, eid): hp = self.byId.get(eid) if hp is None: return 0 else: n = 0 for mt, dt in hp.getAll(): try: self.root = self.deleteStep(self.root, mt, dt, eid) except: myRaise() else: n += 1 del self.byId[eid] return n
def delete(self, eid): try: hp = self.byId[eid] except KeyError: return 0 else: n = 0 for mt, dt in hp.getAll(): try: self.root = self.deleteStep(self.root, mt, dt, eid) except: myRaise() else: n += 1 del self.byId[eid] return n
def treevCursorChanged(self, selection): if self.activeOptionsWidget: try: self.vbox_l.remove(self.activeOptionsWidget) except: myRaise(__file__) self.activeOptionsWidget = None index_list = self.treev.get_cursor()[0] if not index_list: return item = self.getItemByPath(index_list) item.optionsWidgetCreate() if item.optionsWidget: item.optionsWidget.set_sensitive(item.enable) self.activeOptionsWidget = item.optionsWidget pack(self.vbox_l, item.optionsWidget) item.optionsWidget.show()
def decodeRemoteEvent(remoteEventFull, accountId, group): """ remoteEventFull is dict return (event, error) where event is instance of event_lib.Event, or None and error is string or None """ try: eventType = remoteEventFull["eventType"] except KeyError: return None, "bad remoteEventFull: missing \"eventType\"" try: remoteEvent = remoteEventFull["data"] except KeyError: return None, "bad remoteEventFull: missing \"data\"" try: decoder = remoteEventTypeDecoders[eventType] except KeyError: return None, "bad remoteEventFull: unkown type \"%s\"" % eventType eventData = { "summary": remoteEvent["summary"], "description": remoteEvent["description"], "calType": remoteEvent["calType"], "icon": remoteEvent["icon"], "timeZone": remoteEvent["timeZone"], "timeZoneEnable": remoteEvent["timeZoneEnable"], } try: eventTypeData = decoder(remoteEvent) except Exception as e: myRaise() return None, "bad remoteEvent: %s" % e eventData.update(eventTypeData) event = event_lib.classes.event.byName[eventType]() event.setData(eventData) event.remoteIds = ( accountId, remoteEventFull["groupId"], # remoteGroupId, remoteEventFull["eventId"], remoteEventFull["sha1"], ) return event, None
def onExposeEvent(self, widget=None, event=None): cr = self.getContext() self.drawBg(cr) ### w = self.get_allocation().width h = self.get_allocation().height ### rowH = h/7.0 itemW = w - ui.wcalPadding for i in range(7): c = self.wcal.status[i] iconList = c.getWeekEventIcons() if not iconList: continue n = len(iconList) scaleFact = min( 1.0, h / self.maxPixH, w / (n * self.maxPixW), ) x0 = (w/scaleFact - (n-1)*self.maxPixW) / 2.0 y0 = (2*i + 1) * h / (14.0*scaleFact) if rtl: iconList.reverse()## FIXME for iconIndex, icon in enumerate(iconList): try: pix = GdkPixbuf.Pixbuf.new_from_file(icon) except: myRaise(__file__) continue pix_w = pix.get_width() pix_h = pix.get_height() x1 = x0 + iconIndex*self.maxPixW - pix_w/2.0 y1 = y0 - pix_h/2.0 cr.scale(scaleFact, scaleFact) gdk.cairo_set_source_pixbuf(cr, pix, x1, y1) cr.rectangle(x1, y1, pix_w, pix_h) cr.fill() cr.scale(1.0/scaleFact, 1.0/scaleFact)
def onExposeEvent(self, widget=None, event=None): cr = self.getContext() self.drawBg(cr) ### w = self.get_allocation().width h = self.get_allocation().height ### rowH = h / 7 itemW = w - ui.wcalPadding for i in range(7): c = self.wcal.status[i] iconList = c.getWeekEventIcons() if not iconList: continue n = len(iconList) scaleFact = min( 1.0, h / self.maxPixH, w / (n * self.maxPixW), ) x0 = (w / scaleFact - (n - 1) * self.maxPixW) / 2 y0 = (2 * i + 1) * h / (14 * scaleFact) if rtl: iconList.reverse()## FIXME for iconIndex, icon in enumerate(iconList): try: pix = GdkPixbuf.Pixbuf.new_from_file(icon) except: myRaise(__file__) continue pix_w = pix.get_width() pix_h = pix.get_height() x1 = x0 + iconIndex * self.maxPixW - pix_w / 2 y1 = y0 - pix_h / 2 cr.scale(scaleFact, scaleFact) gdk.cairo_set_source_pixbuf(cr, pix, x1, y1) cr.rectangle(x1, y1, pix_w, pix_h) cr.fill() cr.scale(1 / scaleFact, 1 / scaleFact)
def setActionFuncs(obj): """ obj is an instance of EventGroup """ cls = obj.__class__ try: module = __import__( ".".join([ modPrefix, cls.tname, cls.name, ]), fromlist=["WidgetClass"], ) except: myRaise() return else: for actionName, actionFuncName in cls.actions: actionFunc = getattr(module, actionFuncName, None) if actionFunc is not None: print("setting %s.%s" % (cls.__name__, actionFuncName)) setattr(cls, actionFuncName, actionFunc)
def statusIconUpdateIcon(self, ddate): # FIXME from scal3.utils import toBytes imagePath = ( ui.statusIconImageHoli if ui.todayCell.holiday else ui.statusIconImage ) ext = os.path.splitext(imagePath)[1][1:].lower() loader = GdkPixbuf.PixbufLoader.new_with_type(ext) if ui.statusIconFixedSizeEnable: try: width, height = ui.statusIconFixedSizeWH loader.set_size(width, height) except: myRaise() data = open(imagePath, "rb").read() if ext == "svg": dayNum = locale_man.numEncode( ddate[2], mode=calTypes.primary, # FIXME ) if ui.statusIconFontFamilyEnable: if ui.statusIconFontFamily: family = ui.statusIconFontFamily else: family = ui.getFont()[0] dayNum = "<tspan style=\"font-family:%s\">%s</tspan>" % ( family, dayNum, ) data = data.replace( b"TX", toBytes(dayNum), ) loader.write(data) loader.close() pixbuf = loader.get_pixbuf() self.sicon.set_from_pixbuf(pixbuf)
def setData(self, data): for (name, enable) in data['items']: try: item = self.defaultItemsDict[name] except KeyError: myRaise() else: item.enable = enable self.setupItemSignals(item) self.appendItem(item) ### iconSize = data['iconSize'] for (i, item) in enumerate(ud.iconSizeList): if item[0]==iconSize: self.iconSizeCombo.set_active(i) self.setIconSizeName(iconSize) ### styleNum = self.styleList.index(data['style']) self.styleCombo.set_active(styleNum) self.set_style(styleNum) ### bb = data.get('buttonsBorder', 0) self.buttonsBorderSpin.set_value(bb) self.setButtonsBorder(bb)
def __init__(self, statusIconMode, **kwargs): gtk.Dialog.__init__(self, **kwargs) self.set_title(_("Preferences")) self.connect("delete-event", self.onDelete) #self.set_has_separator(False) #self.set_skip_taskbar_hint(True) ### dialog_add_button( self, gtk.STOCK_CANCEL, _("_Cancel"), 1, self.cancel, ) dialog_add_button( self, gtk.STOCK_APPLY, _("_Apply"), 2, self.apply, ) okB = dialog_add_button( self, gtk.STOCK_OK, _("_OK"), 3, self.ok, tooltip=_("Apply and Close"), ) okB.grab_default() # FIXME #okB.grab_focus() # FIXME ############################################## self.localePrefItems = [] self.corePrefItems = [] self.uiPrefItems = [] self.gtkPrefItems = [] # FIXME ##### self.prefPages = [] ################################ Tab 1 (General) ##################### vbox = gtk.VBox() vbox.label = _("_General") vbox.icon = "preferences-other.png" self.prefPages.append(vbox) hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("Language"))) itemLang = LangPrefItem() self.localePrefItems.append(itemLang) ### pack(hbox, itemLang.getWidget()) if langSh != "en": pack(hbox, gtk.Label("Language")) pack(vbox, hbox) ########################## hbox = gtk.HBox() frame = gtk.Frame() frame.set_label(_("Calendar Types")) itemCals = AICalsPrefItem() self.corePrefItems.append(itemCals) frame.add(itemCals.getWidget()) pack(hbox, frame) pack(hbox, gtk.Label(""), 1, 1) hbox.set_border_width(5) #frame.set_border_width(5) pack(vbox, hbox, 1, 1) ########################## if statusIconMode != 1: hbox = gtk.HBox(spacing=3) item = CheckStartupPrefItem() self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ######################## item = CheckPrefItem( ui, "showMain", _("Show main window on start"), ) self.uiPrefItems.append(item) pack(vbox, item.getWidget()) ########################## item = CheckPrefItem( ui, "winTaskbar", _("Window in Taskbar"), ) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ########### pack(vbox, hbox) ########################## try: import scal3.ui_gtk.starcal_appindicator except (ImportError, ValueError): pass else: item = CheckPrefItem( ui, "useAppIndicator", _("Use AppIndicator"), ) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ########################## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("Show Digital Clock:"))) pack(hbox, gtk.Label(""), 1, 1) #item = CheckPrefItem( # ui, # "showDigClockTb", # _("On Toolbar"), #) # FIXME #self.uiPrefItems.append(item) #pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) if statusIconMode == 1: item = CheckPrefItem( ui, "showDigClockTr", _("On Applet"), "Panel Applet", ) else: item = CheckPrefItem( ui, "showDigClockTr", _("On Status Icon"), "Notification Area", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ################################ Tab 2 (Appearance) ################## vbox = gtk.VBox() # A is for Apply, P is for Plugins, R is for Regional, C is for Cancel, only "n" is left! vbox.label = _("Appeara_nce") vbox.icon = "preferences-desktop-theme.png" self.prefPages.append(vbox) ######## hbox = gtk.HBox(spacing=2) ### customCheckItem = CheckPrefItem( ui, "fontCustomEnable", _("Application Font"), ) self.uiPrefItems.append(customCheckItem) pack(hbox, customCheckItem.getWidget()) ### customItem = FontPrefItem(ui, "fontCustom", self) self.uiPrefItems.append(customItem) pack(hbox, customItem.getWidget()) pack(hbox, gtk.Label(""), 1, 1) customCheckItem.syncSensitive(customItem.getWidget()) pack(vbox, hbox) ########################### Theme ##################### #hbox = gtk.HBox(spacing=3) #item = CheckPrefItem(ui, 'bgUseDesk', _('Use Desktop Background')) #self.uiPrefItems.append(item) #pack(hbox, item.getWidget()) #pack(hbox, gtk.Label(''), 1, 1) #pack(vbox, hbox) ##################### hbox = gtk.HBox(spacing=3) lab = gtk.Label("<b>%s:</b> " % _("Colors")) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Background"))) item = ColorPrefItem(ui, "bgColor", True) self.uiPrefItems.append(item) self.colorbBg = item.getWidget() ## FIXME pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Border"))) item = ColorPrefItem(ui, "borderColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Cursor"))) item = ColorPrefItem(ui, "cursorOutColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Cursor BG"))) item = ColorPrefItem(ui, "cursorBgColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Today"))) item = ColorPrefItem(ui, "todayCellColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(vbox, hbox) #################### hbox = gtk.HBox(spacing=3) lab = gtk.Label("<b>%s:</b> " % _("Font Colors")) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(""), 1, 1) #### pack(hbox, gtk.Label(_("Normal"))) item = ColorPrefItem(ui, "textColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Holiday"))) item = ColorPrefItem(ui, "holidayColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Inactive Day"))) item = ColorPrefItem(ui, "inactiveColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) #### pack(hbox, gtk.Label(_("Border"))) item = ColorPrefItem(ui, "borderTextColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) #### pack(vbox, hbox) ################### hbox = gtk.HBox(spacing=1) label = gtk.Label("<b>%s</b>:" % _("Cursor")) label.set_use_markup(True) pack(hbox, label) pack(hbox, gtk.Label(""), 1, 1) pack(hbox, gtk.Label(_("Diameter Factor"))) item = SpinPrefItem(ui, "cursorDiaFactor", 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) ### pack(hbox, gtk.Label(""), 1, 1) pack(hbox, gtk.Label(_("Rounding Factor"))) item = SpinPrefItem(ui, "cursorRoundingFactor", 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(vbox, hbox) ################### # the header label of gtk.Expander in gtk3 is always on the left (even in RTL mode) # that's why we use gtk.Frame instead exp = gtk.Frame() exp.set_border_width(5) label = gtk.Label("<b>%s</b>" % _("Status Icon")) label.set_use_markup(True) exp.set_label_widget(label) expVbox = gtk.VBox(spacing=1) expVbox.set_border_width(5) exp.add(expVbox) sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) label = gtk.Label(_("Normal Days")) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, "statusIconImage", title=_("Select Icon"), currentFolder=pixDir, defaultVarName="statusIconImageDefault", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) label = gtk.Label(_("Holidays")) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, "statusIconImageHoli", title=_("Select Icon"), currentFolder=pixDir, defaultVarName="statusIconImageHoliDefault", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) checkItem = CheckPrefItem( ui, "statusIconFontFamilyEnable", label=_("Change font family to"), #tooltip=_("In SVG files"), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem.getWidget()) pack(hbox, checkItem.getWidget()) item = FontFamilyPrefItem( ui, "statusIconFontFamily", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) checkItem = CheckPrefItem( ui, "statusIconFixedSizeEnable", label=_("Fixed Size"), #tooltip=_(""), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem.getWidget()) pack(hbox, checkItem.getWidget()) pack(hbox, gtk.Label(" ")) item = WidthHeightPrefItem( ui, "statusIconFixedSizeWH", 999, ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) ######## checkItem.syncSensitive(item.getWidget(), reverse=False) #### pack(vbox, exp) ################################ Tab 3 (Regional) ################### vbox = gtk.VBox() vbox.label = _("_Regional") vbox.icon = "preferences-desktop-locale.png" self.prefPages.append(vbox) ###### sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_("Date Format")) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) #pack(hbox, gtk.Label(""), 1, 1) item = ComboEntryTextPrefItem(ud, "dateFormat", ( "%Y/%m/%d", "%Y-%m-%d", "%y/%m/%d", "%y-%m-%d", "%OY/%Om/%Od", "%OY-%Om-%Od", "%m/%d", "%m/%d/%Y", )) self.gtkPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ######## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("First day of week"))) ##item = ComboTextPrefItem( ## FIXME self.comboFirstWD = gtk.ComboBoxText() for item in core.weekDayName: self.comboFirstWD.append_text(item) self.comboFirstWD.append_text(_("Automatic")) self.comboFirstWD.connect("changed", self.comboFirstWDChanged) pack(hbox, self.comboFirstWD) pack(vbox, hbox) ######### hbox0 = gtk.HBox(spacing=0) pack(hbox0, gtk.Label(_("Holidays") + " ")) item = WeekDayCheckListPrefItem(core, "holidayWeekDays") self.corePrefItems.append(item) self.holiWDItem = item ## Holiday Week Days Item pack(hbox0, item.getWidget(), 1, 1) pack(vbox, hbox0) ######### hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("First week of year containts"))) combo = gtk.ComboBoxText() texts = [ _("First %s of year") % name for name in core.weekDayName ] + [ _("First day of year"), ] texts[4] += " (ISO 8601)" ## FIXME for text in texts: combo.append_text(text) #combo.append_text(_("Automatic"))## (as Locale) # FIXME pack(hbox, combo) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) self.comboWeekYear = combo ######### hbox = gtk.HBox(spacing=3) item = CheckPrefItem( locale_man, "enableNumLocale", _("Numbers Localization"), ) self.localePrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ################################################## ################################ options = [] for mod in calTypes: for opt in mod.options: if opt[0] == "button": try: optl = ModuleOptionButton(opt[1:]) except: myRaise() continue else: optl = ModuleOptionItem(mod, opt) options.append(optl) pack(vbox, optl.getWidget()) self.moduleOptions = options ################################ Tab 4 (Advanced) ################### vbox = gtk.VBox() vbox.label = _("A_dvanced") vbox.icon = "applications-system.png" self.prefPages.append(vbox) ###### hbox = gtk.HBox(spacing=5) #pack(hbox, gtk.Label(""), 1, 1) label = gtk.Label(_("Digital Clock Format")) label.set_alignment(0, 0.5) pack(hbox, label) #sgroup.add_widget(label) item = ComboEntryTextPrefItem(ud, "clockFormat", ( "%T", "%X", "%Y/%m/%d - %T", "%OY/%Om/%Od - %X", "<i>%Y/%m/%d</i> - %T", "<b>%T</b>", "<b>%X</b>", "%H:%M", "<b>%H:%M</b>", "<span size=\"smaller\">%OY/%Om/%Od</span>,%X" "%OY/%Om/%Od,<span color=\"#ff0000\">%X</span>", "<span font=\"bold\">%X</span>", "%OH:%OM", "<b>%OH:%OM</b>", )) self.gtkPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_("Days maximum cache size")) label.set_alignment(0, 0.5) pack(hbox, label) ##sgroup.add_widget(label) item = SpinPrefItem(ui, "maxDayCacheSize", 100, 9999, 0) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(vbox, hbox) ################################ Tab 5 (Plugins) #################### vbox = gtk.VBox() vbox.label = _("_Plugins") vbox.icon = "preferences-plugin.png" self.prefPages.append(vbox) ##### ##pluginsTextStatusIcon: hbox = gtk.HBox() if statusIconMode == 1: item = CheckPrefItem( ui, "pluginsTextStatusIcon", _("Show in applet (for today)"), ) else: item = CheckPrefItem( ui, "pluginsTextStatusIcon", _("Show in Status Icon (for today)"), ) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore( int, # index bool, # enable bool, # show_date str, # title ) treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.enable_model_drag_dest( [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.connect("drag_data_received", self.plugTreevDragReceived) treev.get_selection().connect("changed", self.plugTreevCursorChanged) treev.connect("row-activated", self.plugTreevRActivate) treev.connect("button-press-event", self.plugTreevButtonPress) ### #treev.drag_source_set_icon_stock(gtk.STOCK_CLOSE) #treev.drag_source_add_text_targets() #treev.drag_source_add_uri_targets() #treev.drag_source_unset() ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy( gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC, ) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.plugTreeviewCellToggled) col = gtk.TreeViewColumn(_("Enable"), cell) col.add_attribute(cell, "active", 1) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.plugTreeviewCellToggled2) col = gtk.TreeViewColumn(_("Show Date"), cell) col.add_attribute(cell, "active", 2) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### #cell = gtk.CellRendererText() #col = gtk.TreeViewColumn(_("File Name"), cell, text=2) #col.set_resizable(True) #treev.append_column(col) #treev.set_search_column(1) ###### cell = gtk.CellRendererText() #cell.set_property("wrap-mode", gtk.WrapMode.WORD) #cell.set_property("editable", True) #cell.set_property("wrap-width", 200) col = gtk.TreeViewColumn(_("Title"), cell, text=3) #treev.connect("draw", self.plugTreevExpose) #self.plugTitleCell = cell #self.plugTitleCol = col #col.set_resizable(True)## No need! col.set_property("expand", True) treev.append_column(col) ###### #for i in xrange(len(core.plugIndex)): # x = core.plugIndex[i] # trees.append([x[0], x[1], x[2], core.allPlugList[x[0]].title]) ###### self.plugTreeview = treev self.plugTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### hboxBut = gtk.HBox() ### button = gtk.Button(_("_About Plugin")) button.set_use_underline(True) button.set_image(gtk.Image.new_from_stock( gtk.STOCK_ABOUT, gtk.IconSize.BUTTON, )) button.set_sensitive(False) button.connect("clicked", self.plugAboutClicked) self.plugButtonAbout = button pack(hboxBut, button) pack(hboxBut, gtk.Label(""), 1, 1) ### button = gtk.Button(_("C_onfigure Plugin")) button.set_use_underline(True) button.set_image(gtk.Image.new_from_stock( gtk.STOCK_PREFERENCES, gtk.IconSize.BUTTON, )) button.set_sensitive(False) button.connect("clicked", self.plugConfClicked) self.plugButtonConf = button pack(hboxBut, button) pack(hboxBut, gtk.Label(""), 1, 1) ### pack(vboxPlug, hboxBut) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try: # DeprecationWarning, FIXME # toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) # # no different (argument to set_icon_size has no effect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR # no different # argument 2 to image_new_from_stock has no affect FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_GOTO_TOP, size) set_tooltip(tb, _("Move to top")) tb.connect("clicked", self.plugTreeviewTop) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _("Move up")) tb.connect("clicked", self.plugTreeviewUp) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _("Move down")) tb.connect("clicked", self.plugTreeviewDown) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GOTO_BOTTOM, size) set_tooltip(tb, _("Move to bottom")) tb.connect("clicked", self.plugTreeviewBottom) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _("Add")) #tb.connect("clicked", lambda obj: self.plugAddDialog.run()) tb.connect("clicked", self.plugAddClicked) #if len(self.plugAddItems) == 0: # tb.set_sensitive(False) toolbar.insert(tb, -1) self.plugButtonAdd = tb ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _("Delete")) tb.connect("clicked", self.plugTreeviewDel) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) ##### """ vpan = gtk.VPaned() vpan.add1(hbox) vbox2 = gtk.VBox() pack(vbox2, gtk.Label("Test Label")) vpan.add2(vbox2) vpan.set_position(100) pack(vbox, vpan) """ pack(vbox, hbox, 1, 1) ########################## d = gtk.Dialog(parent=self) d.set_transient_for(self) # dialog.set_transient_for(parent) makes the window on top of parent # and at the center point of parent # but if you call dialog.show() or dialog.present(), the parent is # still active(clickabel widgets) before closing child "dialog" # you may call dialog.run() to realy make it transient for parent #d.set_has_separator(False) d.connect("delete-event", self.plugAddDialogClose) d.set_title(_("Add Plugin")) ### dialog_add_button( d, gtk.STOCK_CANCEL, _("_Cancel"), 1, self.plugAddDialogClose, ) dialog_add_button( d, gtk.STOCK_OK, _("_OK"), 2, self.plugAddDialogOK, ) ### treev = gtk.TreeView() trees = gtk.ListStore(str) treev.set_model(trees) #treev.enable_model_drag_source( # gdk.ModifierType.BUTTON1_MASK, # [("", 0, 0, 0)], # gdk.DragAction.MOVE, #) # FIXME #treev.enable_model_drag_dest( # [("", 0, 0, 0)], # gdk.DragAction.MOVE, #) # FIXME treev.connect("drag_data_received", self.plugTreevDragReceived) treev.connect("row-activated", self.plugAddTreevRActivate) #### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_("Title"), cell, text=0) #col.set_resizable(True)# no need when have only one column! treev.append_column(col) #### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) pack(d.vbox, swin, 1, 1) d.vbox.show_all() self.plugAddDialog = d self.plugAddTreeview = treev self.plugAddTreestore = trees ############# ##treev.set_resize_mode(gtk.RESIZE_IMMEDIATE) ##self.plugAddItems = [] ####################################### Tab 6 (Accounts) vbox = gtk.VBox() vbox.label = _("Accounts") vbox.icon = "web-settings.png" self.prefPages.append(vbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, str)## id (hidden), enable, title treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.enable_model_drag_dest( [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.connect("row-activated", self.accountsTreevRActivate) treev.connect("button-press-event", self.accountsTreevButtonPress) ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.accountsTreeviewCellToggled) col = gtk.TreeViewColumn(_("Enable"), cell) col.add_attribute(cell, "active", 1) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_("Title"), cell, text=2) #col.set_resizable(True)## No need! col.set_property("expand", True) treev.append_column(col) ###### self.accountsTreeview = treev self.accountsTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try: # DeprecationWarning, FIXME # #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) # # no different, argument to set_icon_size has no affect FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR # argument 2 to image_new_from_stock has no effect FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromFile("starcal-24.png") set_tooltip(tb, _("Register at StarCalendar.net")) tb.connect("clicked", self.accountsRegisterClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _("Add")) tb.connect("clicked", self.accountsAddClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_EDIT, size) set_tooltip(tb, _("Edit")) tb.connect("clicked", self.accountsEditClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _("Delete")) tb.connect("clicked", self.accountsDelClicked) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _("Move up")) tb.connect("clicked", self.accountsUpClicked) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _("Move down")) tb.connect("clicked", self.accountsDownClicked) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) pack(vbox, hbox, 1, 1) #################################################################### notebook = gtk.Notebook() self.notebook = notebook ##################################### for vbox in self.prefPages: l = gtk.Label(vbox.label) l.set_use_underline(True) vb = gtk.VBox(spacing=3) pack(vb, imageFromFile(vbox.icon)) pack(vb, l) vb.show_all() notebook.append_page(vbox, vb) try: notebook.set_tab_reorderable(vbox, True) except AttributeError: pass ####################### #notebook.set_property("homogeneous", True)## not in gtk3 FIXME #notebook.set_property("tab-border", 5)## not in gtk3 FIXME #notebook.set_property("tab-hborder", 15)## not in gtk3 FIXME pack(self.vbox, notebook) self.vbox.show_all() for i in ui.prefPagesOrder: try: j = ui.prefPagesOrder[i] except IndexError: continue notebook.reorder_child(self.prefPages[i], j)
def checkAndSaveJsonLockFile(fpath): locked = False my_pid = os.getpid() if isfile(fpath): try: text = open(fpath).read() except: myRaise() locked = True else: try: data = jsonToData(text) except: print("lock file %s is not valid" % fpath) else: try: pid = data["pid"] cmd = data["cmd"] except: print("lock file %s is not valid" % fpath) else: try: proc = psutil.Process(pid) except psutil.NoSuchProcess: print("lock file %s: pid %s does not exist" % (fpath, pid)) else: if pid == my_pid: print("lock file %s: pid == my_pid == %s" % ( fpath, pid, )) elif get_cmdline(proc) != cmd: print("lock file %s: cmd does match: %s != %s" % ( fpath, get_cmdline(proc), cmd, )) else: locked = True elif exists(fpath): ## what to do? FIXME pass ###### if not locked: my_proc = psutil.Process(my_pid) my_cmd = get_cmdline(my_proc) my_text = dataToPrettyJson( OrderedDict([ ("pid", my_pid), ("cmd", my_cmd), ("time", now()), ])) try: open(fpath, "w").write(my_text) except Exception as e: print("failed to write lock file %s: %s" % (fpath, e)) else: atexit.register(os.remove, fpath) ###### return locked
def drawAll(self, widget=None, cr=None, cursor=True): #gevent = gtk.get_current_event() #?????? Must enhance (only draw few cells, not all cells) self.calcCoord() w = self.get_allocation().width h = self.get_allocation().height if not cr: cr = self.get_window().cairo_create() #cr.set_line_width(0)#?????????????? #cr.scale(0.5, 0.5) wx = ui.winX wy = ui.winY #if ui.bgUseDesk: # FIXME: should be re-implemented # from scal3.ui_gtk import desktop # from scal3.ui_gtk import wallpaper cr.rectangle(0, 0, w, h) fillColor(cr, ui.bgColor) status = getCurrentMonthStatus() #################################### Drawing Border if ui.mcalTopMargin > 0: ##### Drawing border top background ##menuBgColor == borderColor ##??????????????? cr.rectangle(0, 0, w, ui.mcalTopMargin) fillColor(cr, ui.borderColor) ######## Drawing weekDays names setColor(cr, ui.borderTextColor) dx = 0 wdayAb = (self.wdaysWidth > w) for i in range(7): wday = newTextLayout(self, core.getWeekDayAuto(i, wdayAb)) try: fontw, fonth = wday.get_pixel_size() except: myRaise(__file__) fontw, fonth = wday.get_pixel_size() cr.move_to( self.cx[i] - fontw / 2, (ui.mcalTopMargin - fonth) / 2 - 1, ) show_layout(cr, wday) ######## Drawing "Menu" label setColor(cr, ui.menuTextColor) text = newTextLayout(self, _("Menu")) fontw, fonth = text.get_pixel_size() if rtl: cr.move_to( w - (ui.mcalLeftMargin + fontw) / 2 - 3, (ui.mcalTopMargin - fonth) / 2 - 1, ) else: cr.move_to( (ui.mcalLeftMargin - fontw) / 2, (ui.mcalTopMargin - fonth) / 2 - 1, ) show_layout(cr, text) if ui.mcalLeftMargin > 0: ##### Drawing border left background if rtl: cr.rectangle( w - ui.mcalLeftMargin, ui.mcalTopMargin, ui.mcalLeftMargin, h - ui.mcalTopMargin, ) else: cr.rectangle( 0, ui.mcalTopMargin, ui.mcalLeftMargin, h - ui.mcalTopMargin, ) fillColor(cr, ui.borderColor) ##### Drawing week numbers setColor(cr, ui.borderTextColor) for i in range(6): lay = newTextLayout(self, _(status.weekNum[i])) fontw, fonth = lay.get_pixel_size() if rtl: cr.move_to( w - (ui.mcalLeftMargin + fontw) / 2, self.cy[i] - fonth / 2 + 2, ) else: cr.move_to( (ui.mcalLeftMargin - fontw) / 2, self.cy[i] - fonth / 2 + 2, ) show_layout(cr, lay) selectedCellPos = ui.cell.monthPos if ui.todayCell.inSameMonth(ui.cell): tx, ty = ui.todayCell.monthPos ## today x and y x0 = self.cx[tx] - self.dx / 2 y0 = self.cy[ty] - self.dy / 2 cr.rectangle(x0, y0, self.dx, self.dy) fillColor(cr, ui.todayCellColor) for yPos in range(6): for xPos in range(7): c = status[yPos][xPos] x0 = self.cx[xPos] y0 = self.cy[yPos] cellInactive = (c.month != ui.cell.month) cellHasCursor = (cursor and (xPos, yPos) == selectedCellPos) if cellHasCursor: ##### Drawing Cursor cx0 = x0 - self.dx / 2 + 1 cy0 = y0 - self.dy / 2 + 1 cw = self.dx - 1 ch = self.dy - 1 ######### Circular Rounded drawCursorBg(cr, cx0, cy0, cw, ch) fillColor(cr, ui.cursorBgColor) ######## end of Drawing Cursor if not cellInactive: iconList = c.getMonthEventIcons() if iconList: iconsN = len(iconList) scaleFact = 1 / sqrt(iconsN) fromRight = 0 for index, icon in enumerate(iconList): ## if len(iconList) > 1 ## FIXME try: pix = GdkPixbuf.Pixbuf.new_from_file(icon) except: myRaise(__file__) continue pix_w = pix.get_width() pix_h = pix.get_height() # right buttom corner ??? # right side: x1 = (x0 + self.dx / 2) / scaleFact - fromRight - pix_w # buttom side: y1 = (y0 + self.dy / 2) / scaleFact - pix_h cr.scale(scaleFact, scaleFact) gdk.cairo_set_source_pixbuf(cr, pix, x1, y1) cr.rectangle(x1, y1, pix_w, pix_h) cr.fill() cr.scale(1 / scaleFact, 1 / scaleFact) fromRight += pix_w #### Drawing numbers inside every cell #cr.rectangle( # x0-self.dx / 2+1, # y0-self.dy / 2+1, # self.dx-1, # self.dy-1, #) mode = calTypes.primary params = ui.mcalTypeParams[0] daynum = newTextLayout( self, _(c.dates[mode][2], mode), params["font"], ) fontw, fonth = daynum.get_pixel_size() if cellInactive: setColor(cr, ui.inactiveColor) elif c.holiday: setColor(cr, ui.holidayColor) else: setColor(cr, params["color"]) cr.move_to( x0 - fontw / 2 + params["pos"][0], y0 - fonth / 2 + params["pos"][1], ) show_layout(cr, daynum) if not cellInactive: for mode, params in ui.getActiveMonthCalParams()[1:]: daynum = newTextLayout( self, _(c.dates[mode][2], mode), params["font"], ) fontw, fonth = daynum.get_pixel_size() setColor(cr, params["color"]) cr.move_to( x0 - fontw / 2 + params["pos"][0], y0 - fonth / 2 + params["pos"][1], ) show_layout(cr, daynum) if cellHasCursor: ##### Drawing Cursor Outline cx0 = x0 - self.dx / 2 + 1 cy0 = y0 - self.dy / 2 + 1 cw = self.dx - 1 ch = self.dy - 1 ######### Circular Rounded drawCursorOutline(cr, cx0, cy0, cw, ch) fillColor(cr, ui.cursorOutColor) ##### end of Drawing Cursor Outline ################ end of drawing cells ##### drawGrid if ui.mcalGrid: setColor(cr, ui.mcalGridColor) for i in range(7): cr.rectangle( self.cx[i] + rtlSgn() * self.dx / 2, 0, 1, h, ) cr.fill() for i in range(6): cr.rectangle( 0, self.cy[i] - self.dy / 2, w, 1, ) cr.fill() return False
def __init__(self, statusIconMode=2): #from gi.repository import Gio #self.app = gtk.Application(application_id="apps.starcal") #self.app.register(Gio.Cancellable.new()) #gtk.ApplicationWindow.__init__(self, application=self.app) gtk.Window.__init__(self) self.add_events(gdk.EventMask.ALL_EVENTS_MASK) self.initVars() ud.windowList.appendItem(self) ui.mainWin = self ################## ## statusIconMode: ## ('none', 'none') ## ('statusIcon', 'normal') ## ('applet', 'gnome') ## ('applet', 'kde') ## ## 0: none (simple window) ## 1: applet ## 2: standard status icon self.statusIconMode = statusIconMode ### #ui.eventManDialog = None #ui.timeLineWin = None ### #ui.weekCalWin = WeekCalWindow() #ud.windowList.appendItem(ui.weekCalWin) ### self.dayInfoDialog = None #print('windowList.items', [item._name for item in ud.windowList.items]) ########### ##self.connect('window-state-event', selfStateEvent) self.set_title('%s %s'%(core.APP_DESC, core.VERSION)) #self.connect('main-show', lambda arg: self.present()) #self.connect('main-hide', lambda arg: self.hide()) self.set_decorated(False) self.set_property('skip-taskbar-hint', not ui.winTaskbar) ## self.set_skip_taskbar_hint ## FIXME self.set_role('starcal') #self.set_focus_on_map(True)#???????? #self.set_type_hint(gdk.WindowTypeHint.NORMAL) #self.connect('realize', self.onRealize) self.set_default_size(ui.winWidth, 1) try: self.move(ui.winX, ui.winY) except: pass ############################################################# self.connect('focus-in-event', self.focusIn, 'Main') self.connect('focus-out-event', self.focusOut, 'Main') self.connect('button-press-event', self.buttonPress) self.connect('key-press-event', self.keyPress) self.connect('configure-event', self.configureEvent) self.connect('destroy', self.quit) ############################################################# """ #self.add_events(gdk.EventMask.VISIBILITY_NOTIFY_MASK) #self.connect('frame-event', show_event) ## Compiz does not send configure-event(or any event) when MOVING window(sends in last point, ## when moving completed) #self.connect('drag-motion', show_event) ud.rootWindow.set_events(... ud.rootWindow.add_filter(self.onRootWinEvent) #self.realize() #gdk.flush() #self.configureEvent(None, None) #self.connect('drag-motion', show_event) ###################### ## ???????????????????????????????????????????????? ## when button is down(before button-release-event), motion-notify-event does not recived! """ ################################################################## self.focus = False #self.focusOutTime = 0 #self.clockTr = None ############################################################################ self.winCon = None ############ self.vbox = MainWinVbox() ui.checkMainWinItems() itemsPkg = 'scal3.ui_gtk.mainwin_items' for (name, enable) in ui.mainWinItems: #print(name, enable) if enable: try: module = __import__( '.'.join([ itemsPkg, name, ]), fromlist=['CalObj'], ) CalObj = module.CalObj except: myRaise() continue item = CalObj() item.enable = enable item.connect('size-allocate', self.childSizeAllocate) #modify_bg_all(item, gtk.StateType.NORMAL, rgbToGdkColor(*ui.bgColor)) else: desc = mainWinItemsDesc[name] item = DummyCalObj(name, desc, itemsPkg, True) self.vbox.appendItem(item) self.appendItem(self.vbox) self.vbox.show() self.customizeDialog = None ####### self.add(self.vbox) #################### self.isMaximized = False #################### #ui.prefDialog = None self.exportDialog = None self.selectDateDialog = None ############### Building About Dialog self.aboutDialog = None ############### self.menuMain = None ##### check = gtk.CheckMenuItem(label=_('_On Top')) check.set_use_underline(True) check.connect('activate', self.keepAboveClicked) check.set_active(ui.winKeepAbove) self.set_keep_above(ui.winKeepAbove) self.checkAbove = check ##### check = gtk.CheckMenuItem(label=_('_Sticky')) check.set_use_underline(True) check.connect('activate', self.stickyClicked) check.set_active(ui.winSticky) if ui.winSticky: self.stick() self.checkSticky = check ############################################################ self.statusIconInit() listener.dateChange.add(self) #if self.statusIconMode!=1: # gobject.timeout_add_seconds(self.timeout, self.statusIconUpdate) ######### self.connect('delete-event', self.onDeleteEvent) ######################################### for plug in core.allPlugList: if plug.external: try: plug.set_dialog(self) except AttributeError: pass ########################### self.onConfigChange()
def drawAll(self, widget=None, cr=None, cursor=True): #gevent = gtk.get_current_event() w = self.get_allocation().width h = self.get_allocation().height if not cr: cr = self.get_window().cairo_create() #cr.set_line_width(0)#?????????????? #cr.scale(0.5, 0.5) cr.rectangle(0, 0, w, h) fillColor(cr, ui.bgColor) ##### c = ui.cell x0 = 0 y0 = 0 dx = w dy = h ######## iconList = c.getDayEventIcons() if iconList: iconsN = len(iconList) scaleFact = 3.0 / sqrt(iconsN) fromRight = 0 for index, icon in enumerate(iconList): ## if len(iconList) > 1 ## FIXME try: pix = GdkPixbuf.Pixbuf.new_from_file(icon) except: myRaise(__file__) continue pix_w = pix.get_width() pix_h = pix.get_height() ## right buttom corner ????????????????????? x1 = (x0 + dx) / scaleFact - fromRight - pix_w # right side y1 = (y0 + dy / 2) / scaleFact - pix_h / 2 # middle cr.scale(scaleFact, scaleFact) gdk.cairo_set_source_pixbuf(cr, pix, x1, y1) cr.rectangle(x1, y1, pix_w, pix_h) cr.fill() cr.scale(1 / scaleFact, 1 / scaleFact) fromRight += pix_w #### Drawing numbers inside every cell #cr.rectangle( # x0-dx/2.0+1, # y0-self.dy/2.0+1, # dx-1, # dy-1, #) mode = calTypes.primary params = ui.dcalTypeParams[0] daynum = newTextLayout( self, _(c.dates[mode][2], mode), params["font"], ) fontw, fonth = daynum.get_pixel_size() if c.holiday: setColor(cr, ui.holidayColor) else: setColor(cr, params["color"]) cr.move_to( x0 + dx / 2 - fontw / 2 + params["pos"][0], y0 + dy / 2 - fonth / 2 + params["pos"][1], ) show_layout(cr, daynum) #### for mode, params in ui.getActiveDayCalParams()[1:]: daynum = newTextLayout(self, _(c.dates[mode][2], mode), params["font"]) fontw, fonth = daynum.get_pixel_size() setColor(cr, params["color"]) cr.move_to( x0 + dx / 2 - fontw / 2 + params["pos"][0], y0 + dy / 2 - fonth / 2 + params["pos"][1], ) show_layout(cr, daynum)
def __init__(self, statusIconMode, **kwargs): gtk.Dialog.__init__(self, **kwargs) self.set_title(_("Preferences")) self.connect("delete-event", self.onDelete) #self.set_has_separator(False) #self.set_skip_taskbar_hint(True) ### dialog_add_button( self, gtk.STOCK_CANCEL, _("_Cancel"), 1, self.cancel, ) dialog_add_button( self, gtk.STOCK_APPLY, _("_Apply"), 2, self.apply, ) okB = dialog_add_button( self, gtk.STOCK_OK, _("_OK"), 3, self.ok, tooltip=_("Apply and Close"), ) okB.grab_default() # FIXME #okB.grab_focus() # FIXME ############################################## self.localePrefItems = [] self.corePrefItems = [] self.uiPrefItems = [] self.gtkPrefItems = [] # FIXME ##### self.prefPages = [] ################################ Tab 1 (General) ##################### vbox = gtk.VBox() vbox.label = _("_General") vbox.icon = "preferences-other.png" self.prefPages.append(vbox) hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("Language"))) itemLang = LangPrefItem() self.localePrefItems.append(itemLang) ### pack(hbox, itemLang.getWidget()) if langSh != "en": pack(hbox, gtk.Label("Language")) pack(vbox, hbox) ########################## hbox = gtk.HBox() frame = gtk.Frame() frame.set_label(_("Calendar Types")) itemCals = AICalsPrefItem() self.corePrefItems.append(itemCals) frame.add(itemCals.getWidget()) pack(hbox, frame) pack(hbox, gtk.Label(""), 1, 1) hbox.set_border_width(5) #frame.set_border_width(5) pack(vbox, hbox, 1, 1) ########################## if statusIconMode != 1: hbox = gtk.HBox(spacing=3) item = CheckStartupPrefItem() self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ######################## item = CheckPrefItem( ui, "showMain", _("Show main window on start"), ) self.uiPrefItems.append(item) pack(vbox, item.getWidget()) ########################## item = CheckPrefItem( ui, "winTaskbar", _("Window in Taskbar"), ) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ########### pack(vbox, hbox) ########################## try: import scal3.ui_gtk.starcal_appindicator except (ImportError, ValueError): pass else: item = CheckPrefItem( ui, "useAppIndicator", _("Use AppIndicator"), ) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ########################## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("Show Digital Clock:"))) pack(hbox, gtk.Label(""), 1, 1) #item = CheckPrefItem( # ui, # "showDigClockTb", # _("On Toolbar"), #) # FIXME #self.uiPrefItems.append(item) #pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) if statusIconMode == 1: item = CheckPrefItem( ui, "showDigClockTr", _("On Applet"), "Panel Applet", ) else: item = CheckPrefItem( ui, "showDigClockTr", _("On Status Icon"), "Notification Area", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ################################ Tab 2 (Appearance) ################## vbox = gtk.VBox() # A is for Apply, P is for Plugins, R is for Regional, C is for Cancel, only "n" is left! vbox.label = _("Appeara_nce") vbox.icon = "preferences-desktop-theme.png" self.prefPages.append(vbox) ######## hbox = gtk.HBox(spacing=2) ### customCheckItem = CheckPrefItem( ui, "fontCustomEnable", _("Application Font"), ) self.uiPrefItems.append(customCheckItem) pack(hbox, customCheckItem.getWidget()) ### customItem = FontPrefItem(ui, "fontCustom", self) self.uiPrefItems.append(customItem) pack(hbox, customItem.getWidget()) pack(hbox, gtk.Label(""), 1, 1) customCheckItem.syncSensitive(customItem.getWidget()) pack(vbox, hbox) ########################### Theme ##################### #hbox = gtk.HBox(spacing=3) #item = CheckPrefItem(ui, 'bgUseDesk', _('Use Desktop Background')) #self.uiPrefItems.append(item) #pack(hbox, item.getWidget()) #pack(hbox, gtk.Label(''), 1, 1) #pack(vbox, hbox) ##################### hbox = gtk.HBox(spacing=3) lab = gtk.Label("<b>%s:</b> " % _("Colors")) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Background"))) item = ColorPrefItem(ui, "bgColor", True) self.uiPrefItems.append(item) self.colorbBg = item.getWidget() ## FIXME pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Border"))) item = ColorPrefItem(ui, "borderColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Cursor"))) item = ColorPrefItem(ui, "cursorOutColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Cursor BG"))) item = ColorPrefItem(ui, "cursorBgColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Today"))) item = ColorPrefItem(ui, "todayCellColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(vbox, hbox) #################### hbox = gtk.HBox(spacing=3) lab = gtk.Label("<b>%s:</b> " % _("Font Colors")) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(""), 1, 1) #### pack(hbox, gtk.Label(_("Normal"))) item = ColorPrefItem(ui, "textColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Holiday"))) item = ColorPrefItem(ui, "holidayColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(hbox, gtk.Label(_("Inactive Day"))) item = ColorPrefItem(ui, "inactiveColor", True) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) #### pack(hbox, gtk.Label(_("Border"))) item = ColorPrefItem(ui, "borderTextColor", False) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) #### pack(vbox, hbox) ################### hbox = gtk.HBox(spacing=1) label = gtk.Label("<b>%s</b>:" % _("Cursor")) label.set_use_markup(True) pack(hbox, label) pack(hbox, gtk.Label(""), 1, 1) pack(hbox, gtk.Label(_("Diameter Factor"))) item = SpinPrefItem(ui, "cursorDiaFactor", 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) ### pack(hbox, gtk.Label(""), 1, 1) pack(hbox, gtk.Label(_("Rounding Factor"))) item = SpinPrefItem(ui, "cursorRoundingFactor", 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) ### pack(vbox, hbox) ################### # the header label of gtk.Expander in gtk3 is always on the left (even in RTL mode) # that's why we use gtk.Frame instead exp = gtk.Frame() exp.set_border_width(5) label = gtk.Label("<b>%s</b>" % _("Status Icon")) label.set_use_markup(True) exp.set_label_widget(label) expVbox = gtk.VBox(spacing=1) expVbox.set_border_width(5) exp.add(expVbox) sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) label = gtk.Label(_("Normal Days")) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, "statusIconImage", title=_("Select Icon"), currentFolder=pixDir, defaultVarName="statusIconImageDefault", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) label = gtk.Label(_("Holidays")) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, "statusIconImageHoli", title=_("Select Icon"), currentFolder=pixDir, defaultVarName="statusIconImageHoliDefault", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) checkItem = CheckPrefItem( ui, "statusIconFontFamilyEnable", label=_("Change font family to"), #tooltip=_("In SVG files"), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem.getWidget()) pack(hbox, checkItem.getWidget()) item = FontFamilyPrefItem( ui, "statusIconFontFamily", ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(" ")) checkItem = CheckPrefItem( ui, "statusIconFixedSizeEnable", label=_("Fixed Size"), #tooltip=_(""), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem.getWidget()) pack(hbox, checkItem.getWidget()) pack(hbox, gtk.Label(" ")) item = WidthHeightPrefItem( ui, "statusIconFixedSizeWH", 999, ) self.uiPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(expVbox, hbox) ######## checkItem.syncSensitive(item.getWidget(), reverse=False) #### pack(vbox, exp) ################################ Tab 3 (Regional) ################### vbox = gtk.VBox() vbox.label = _("_Regional") vbox.icon = "preferences-desktop-locale.png" self.prefPages.append(vbox) ###### sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_("Date Format")) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) #pack(hbox, gtk.Label(""), 1, 1) item = ComboEntryTextPrefItem(ud, "dateFormat", ( "%Y/%m/%d", "%Y-%m-%d", "%y/%m/%d", "%y-%m-%d", "%OY/%Om/%Od", "%OY-%Om-%Od", "%m/%d", "%m/%d/%Y", )) self.gtkPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ######## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("First day of week"))) ##item = ComboTextPrefItem( ## FIXME self.comboFirstWD = gtk.ComboBoxText() for item in core.weekDayName: self.comboFirstWD.append_text(item) self.comboFirstWD.append_text(_("Automatic")) self.comboFirstWD.connect("changed", self.comboFirstWDChanged) pack(hbox, self.comboFirstWD) pack(vbox, hbox) ######### hbox0 = gtk.HBox(spacing=0) pack(hbox0, gtk.Label(_("Holidays") + " ")) item = WeekDayCheckListPrefItem(core, "holidayWeekDays") self.corePrefItems.append(item) self.holiWDItem = item ## Holiday Week Days Item pack(hbox0, item.getWidget(), 1, 1) pack(vbox, hbox0) ######### hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_("First week of year containts"))) combo = gtk.ComboBoxText() texts = [_("First %s of year") % name for name in core.weekDayName] + [ _("First day of year"), ] texts[4] += " (ISO 8601)" ## FIXME for text in texts: combo.append_text(text) #combo.append_text(_("Automatic"))## (as Locale) # FIXME pack(hbox, combo) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) self.comboWeekYear = combo ######### hbox = gtk.HBox(spacing=3) item = CheckPrefItem( locale_man, "enableNumLocale", _("Numbers Localization"), ) self.localePrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ################################################## ################################ options = [] for mod in calTypes: for opt in mod.options: if opt[0] == "button": try: optl = ModuleOptionButton(opt[1:]) except: myRaise() continue else: optl = ModuleOptionItem(mod, opt) options.append(optl) pack(vbox, optl.getWidget()) self.moduleOptions = options ################################ Tab 4 (Advanced) ################### vbox = gtk.VBox() vbox.label = _("A_dvanced") vbox.icon = "applications-system.png" self.prefPages.append(vbox) ###### hbox = gtk.HBox(spacing=5) #pack(hbox, gtk.Label(""), 1, 1) label = gtk.Label(_("Digital Clock Format")) label.set_alignment(0, 0.5) pack(hbox, label) #sgroup.add_widget(label) item = ComboEntryTextPrefItem(ud, "clockFormat", ( "%T", "%X", "%Y/%m/%d - %T", "%OY/%Om/%Od - %X", "<i>%Y/%m/%d</i> - %T", "<b>%T</b>", "<b>%X</b>", "%H:%M", "<b>%H:%M</b>", "<span size=\"smaller\">%OY/%Om/%Od</span>,%X" "%OY/%Om/%Od,<span color=\"#ff0000\">%X</span>", "<span font=\"bold\">%X</span>", "%OH:%OM", "<b>%OH:%OM</b>", )) self.gtkPrefItems.append(item) pack(hbox, item.getWidget(), 1, 1) pack(vbox, hbox) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_("Days maximum cache size")) label.set_alignment(0, 0.5) pack(hbox, label) ##sgroup.add_widget(label) item = SpinPrefItem(ui, "maxDayCacheSize", 100, 9999, 0) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(vbox, hbox) ################################ Tab 5 (Plugins) #################### vbox = gtk.VBox() vbox.label = _("_Plugins") vbox.icon = "preferences-plugin.png" self.prefPages.append(vbox) ##### ##pluginsTextStatusIcon: hbox = gtk.HBox() if statusIconMode == 1: item = CheckPrefItem( ui, "pluginsTextStatusIcon", _("Show in applet (for today)"), ) else: item = CheckPrefItem( ui, "pluginsTextStatusIcon", _("Show in Status Icon (for today)"), ) self.uiPrefItems.append(item) pack(hbox, item.getWidget()) pack(hbox, gtk.Label(""), 1, 1) pack(vbox, hbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore( int, # index bool, # enable bool, # show_date str, # title ) treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.enable_model_drag_dest( [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.connect("drag_data_received", self.plugTreevDragReceived) treev.get_selection().connect("changed", self.plugTreevCursorChanged) treev.connect("row-activated", self.plugTreevRActivate) treev.connect("button-press-event", self.plugTreevButtonPress) ### #treev.drag_source_set_icon_stock(gtk.STOCK_CLOSE) #treev.drag_source_add_text_targets() #treev.drag_source_add_uri_targets() #treev.drag_source_unset() ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy( gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC, ) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.plugTreeviewCellToggled) col = gtk.TreeViewColumn(_("Enable"), cell) col.add_attribute(cell, "active", 1) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.plugTreeviewCellToggled2) col = gtk.TreeViewColumn(_("Show Date"), cell) col.add_attribute(cell, "active", 2) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### #cell = gtk.CellRendererText() #col = gtk.TreeViewColumn(_("File Name"), cell, text=2) #col.set_resizable(True) #treev.append_column(col) #treev.set_search_column(1) ###### cell = gtk.CellRendererText() #cell.set_property("wrap-mode", gtk.WrapMode.WORD) #cell.set_property("editable", True) #cell.set_property("wrap-width", 200) col = gtk.TreeViewColumn(_("Title"), cell, text=3) #treev.connect("draw", self.plugTreevExpose) #self.plugTitleCell = cell #self.plugTitleCol = col #col.set_resizable(True)## No need! col.set_property("expand", True) treev.append_column(col) ###### #for i in xrange(len(core.plugIndex)): # x = core.plugIndex[i] # trees.append([x[0], x[1], x[2], core.allPlugList[x[0]].title]) ###### self.plugTreeview = treev self.plugTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### hboxBut = gtk.HBox() ### button = gtk.Button(_("_About Plugin")) button.set_use_underline(True) button.set_image( gtk.Image.new_from_stock( gtk.STOCK_ABOUT, gtk.IconSize.BUTTON, )) button.set_sensitive(False) button.connect("clicked", self.plugAboutClicked) self.plugButtonAbout = button pack(hboxBut, button) pack(hboxBut, gtk.Label(""), 1, 1) ### button = gtk.Button(_("C_onfigure Plugin")) button.set_use_underline(True) button.set_image( gtk.Image.new_from_stock( gtk.STOCK_PREFERENCES, gtk.IconSize.BUTTON, )) button.set_sensitive(False) button.connect("clicked", self.plugConfClicked) self.plugButtonConf = button pack(hboxBut, button) pack(hboxBut, gtk.Label(""), 1, 1) ### pack(vboxPlug, hboxBut) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try: # DeprecationWarning, FIXME # toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) # # no different (argument to set_icon_size has no effect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR # no different # argument 2 to image_new_from_stock has no affect FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_GOTO_TOP, size) set_tooltip(tb, _("Move to top")) tb.connect("clicked", self.plugTreeviewTop) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _("Move up")) tb.connect("clicked", self.plugTreeviewUp) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _("Move down")) tb.connect("clicked", self.plugTreeviewDown) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GOTO_BOTTOM, size) set_tooltip(tb, _("Move to bottom")) tb.connect("clicked", self.plugTreeviewBottom) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _("Add")) #tb.connect("clicked", lambda obj: self.plugAddDialog.run()) tb.connect("clicked", self.plugAddClicked) #if len(self.plugAddItems) == 0: # tb.set_sensitive(False) toolbar.insert(tb, -1) self.plugButtonAdd = tb ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _("Delete")) tb.connect("clicked", self.plugTreeviewDel) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) ##### """ vpan = gtk.VPaned() vpan.add1(hbox) vbox2 = gtk.VBox() pack(vbox2, gtk.Label("Test Label")) vpan.add2(vbox2) vpan.set_position(100) pack(vbox, vpan) """ pack(vbox, hbox, 1, 1) ########################## d = gtk.Dialog(parent=self) d.set_transient_for(self) # dialog.set_transient_for(parent) makes the window on top of parent # and at the center point of parent # but if you call dialog.show() or dialog.present(), the parent is # still active(clickabel widgets) before closing child "dialog" # you may call dialog.run() to realy make it transient for parent #d.set_has_separator(False) d.connect("delete-event", self.plugAddDialogClose) d.set_title(_("Add Plugin")) ### dialog_add_button( d, gtk.STOCK_CANCEL, _("_Cancel"), 1, self.plugAddDialogClose, ) dialog_add_button( d, gtk.STOCK_OK, _("_OK"), 2, self.plugAddDialogOK, ) ### treev = gtk.TreeView() trees = gtk.ListStore(str) treev.set_model(trees) #treev.enable_model_drag_source( # gdk.ModifierType.BUTTON1_MASK, # [("", 0, 0, 0)], # gdk.DragAction.MOVE, #) # FIXME #treev.enable_model_drag_dest( # [("", 0, 0, 0)], # gdk.DragAction.MOVE, #) # FIXME treev.connect("drag_data_received", self.plugTreevDragReceived) treev.connect("row-activated", self.plugAddTreevRActivate) #### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_("Title"), cell, text=0) #col.set_resizable(True)# no need when have only one column! treev.append_column(col) #### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) pack(d.vbox, swin, 1, 1) d.vbox.show_all() self.plugAddDialog = d self.plugAddTreeview = treev self.plugAddTreestore = trees ############# ##treev.set_resize_mode(gtk.RESIZE_IMMEDIATE) ##self.plugAddItems = [] ####################################### Tab 6 (Accounts) vbox = gtk.VBox() vbox.label = _("Accounts") vbox.icon = "web-settings.png" self.prefPages.append(vbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, str) ## id (hidden), enable, title treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.enable_model_drag_dest( [ ("row", gtk.TargetFlags.SAME_WIDGET, 0), ], gdk.DragAction.MOVE, ) treev.connect("row-activated", self.accountsTreevRActivate) treev.connect("button-press-event", self.accountsTreevButtonPress) ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property("activatable", True) cell.connect("toggled", self.accountsTreeviewCellToggled) col = gtk.TreeViewColumn(_("Enable"), cell) col.add_attribute(cell, "active", 1) #cell.set_active(False) col.set_resizable(True) col.set_property("expand", False) treev.append_column(col) ###### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_("Title"), cell, text=2) #col.set_resizable(True)## No need! col.set_property("expand", True) treev.append_column(col) ###### self.accountsTreeview = treev self.accountsTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try: # DeprecationWarning, FIXME # #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) # # no different, argument to set_icon_size has no affect FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR # argument 2 to image_new_from_stock has no effect FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromFile("starcal-24.png") set_tooltip(tb, _("Register at StarCalendar.net")) tb.connect("clicked", self.accountsRegisterClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _("Add")) tb.connect("clicked", self.accountsAddClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_EDIT, size) set_tooltip(tb, _("Edit")) tb.connect("clicked", self.accountsEditClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _("Delete")) tb.connect("clicked", self.accountsDelClicked) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _("Move up")) tb.connect("clicked", self.accountsUpClicked) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _("Move down")) tb.connect("clicked", self.accountsDownClicked) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) pack(vbox, hbox, 1, 1) #################################################################### notebook = gtk.Notebook() self.notebook = notebook ##################################### for vbox in self.prefPages: l = gtk.Label(vbox.label) l.set_use_underline(True) vb = gtk.VBox(spacing=3) pack(vb, imageFromFile(vbox.icon)) pack(vb, l) vb.show_all() notebook.append_page(vbox, vb) try: notebook.set_tab_reorderable(vbox, True) except AttributeError: pass ####################### #notebook.set_property("homogeneous", True)## not in gtk3 FIXME #notebook.set_property("tab-border", 5)## not in gtk3 FIXME #notebook.set_property("tab-hborder", 15)## not in gtk3 FIXME pack(self.vbox, notebook) self.vbox.show_all() for i in ui.prefPagesOrder: try: j = ui.prefPagesOrder[i] except IndexError: continue notebook.reorder_child(self.prefPages[i], j)
def sync(self, group, remoteGroupId): # in progress TODO """ return None if successful, or error string if failed """ print("sync started") if not group.remoteIds: return "sync not enabled" if group.remoteIds[0] != self.id: return "mismatch account id" groupId = group.remoteIds[1] lastSyncTuple = group.getLastSync() if lastSyncTuple is None: lastSyncStartEpoch = group.getStartEpoch() lastSyncEndEpoch = None # FIXME else: lastSyncStartEpoch, lastSyncEndEpoch = lastSyncTuple syncStart = datetime.now() path = "event/groups/%s/modified-events/%s/" % ( groupId, jsonTimeFromEpoch(lastSyncStartEpoch), ) data, error = self.call("get", path) if error: return error try: remoteModifiedEvents = data["modifiedEvents"] except KeyError: return "bad data: missing \"modifiedEvents\"" try: group.setReadOnly(True) ### Pull for remoteEvent in remoteModifiedEvents: # remoteEvent is a dict pprint(remoteEvent) event, error = decodeRemoteEvent( remoteEvent, self.id, group, ) if error: print(error) continue # record = event.save() # record is (lastEpoch, lastHash, **args) # event.lastMergeSha1 = [ # record[1], # local sha1 # event.remoteIds[1], # remote sha1 # ] # group.replaceEvent(event) ### Push if lastSyncEndEpoch: pass except Exception as e: myRaise() return "sync failed: %s" % e else: group.afterSync(syncStart.timestamp()) finally: group.setReadOnly(False) group.save()
from time import localtime import os import os.path from os.path import join, dirname, isdir sys.path.insert(0, dirname(dirname(dirname(__file__)))) from scal3.path import * from scal3.utils import myRaise if not isdir(confDir): from scal3.utils import restartLow try: __import__('scal3.ui_gtk.import_config_2to3') except: myRaise() if not isdir(confDir): os.mkdir(confDir, 0o755) else: restartLow() from scal3.utils import versionLessThan from scal3.cal_types import calTypes from scal3 import core from scal3 import locale_man from scal3.locale_man import rtl, lang ## import scal3.locale_man after core #_ = locale_man.loadTranslator(False)## FIXME from scal3.locale_man import tr as _ from scal3 import event_lib from scal3 import ui
def drawAll(self, widget=None, cr=None, cursor=True): #gevent = gtk.get_current_event() #?????? Must enhance (only draw few cells, not all cells) self.calcCoord() w = self.get_allocation().width h = self.get_allocation().height if not cr: cr = self.get_window().cairo_create() #cr.set_line_width(0)#?????????????? #cr.scale(0.5, 0.5) wx = ui.winX wy = ui.winY if ui.bgUseDesk:## FIXME ### ????????????????? Need for mainWin !!!!! coord = self.translate_coordinates(self, wx, wy) if len(coord)==2: from scal3.ui_gtk import desktop x0, y0 = coord try: bg = desktop.get_wallpaper(x0, y0, w, h) except: print('Could not get wallpaper!') myRaise(__file__) #os.popen('gnome-settings-daemon') ui.bgUseDesk = False ##?????????????????? #if ui.prefDialog # ui.prefDialog.checkDeskBg.set_active(False)##?????????????????? else: gdk.cairo_set_source_pixbuf(cr, bg, 0, 0, 0) cr.paint() #else: # print(coord) cr.rectangle(0, 0, w, h) fillColor(cr, ui.bgColor) status = getCurrentMonthStatus() #################################### Drawing Border if ui.mcalTopMargin>0: ##### Drawing border top background ##menuBgColor == borderColor ##??????????????? cr.rectangle(0, 0, w, ui.mcalTopMargin) fillColor(cr, ui.borderColor) ######## Drawing weekDays names setColor(cr, ui.borderTextColor) dx = 0 wdayAb = (self.wdaysWidth > w) for i in range(7): wday = newTextLayout(self, core.getWeekDayAuto(i, wdayAb)) try: fontw, fonth = wday.get_pixel_size() except: myRaise(__file__) fontw, fonth = wday.get_pixel_size() cr.move_to( self.cx[i]-fontw/2.0, (ui.mcalTopMargin-fonth)/2.0-1, ) show_layout(cr, wday) ######## Drawing "Menu" label setColor(cr, ui.menuTextColor) text = newTextLayout(self, _('Menu')) fontw, fonth = text.get_pixel_size() if rtl: cr.move_to( w-(ui.mcalLeftMargin+fontw)/2.0 - 3, (ui.mcalTopMargin-fonth)/2.0 - 1, ) else: cr.move_to( (ui.mcalLeftMargin-fontw)/2.0, (ui.mcalTopMargin-fonth)/2.0 - 1, ) show_layout(cr, text) if ui.mcalLeftMargin>0: ##### Drawing border left background if rtl: cr.rectangle( w - ui.mcalLeftMargin, ui.mcalTopMargin, ui.mcalLeftMargin, h - ui.mcalTopMargin, ) else: cr.rectangle( 0, ui.mcalTopMargin, ui.mcalLeftMargin, h - ui.mcalTopMargin, ) fillColor(cr, ui.borderColor) ##### Drawing week numbers setColor(cr, ui.borderTextColor) for i in range(6): lay = newTextLayout(self, _(status.weekNum[i])) fontw, fonth = lay.get_pixel_size() if rtl: cr.move_to( w - (ui.mcalLeftMargin+fontw)/2.0, self.cy[i]-fonth/2.0 + 2, ) else: cr.move_to( (ui.mcalLeftMargin-fontw)/2.0, self.cy[i]-fonth/2.0 + 2, ) show_layout(cr, lay) selectedCellPos = ui.cell.monthPos if ui.todayCell.inSameMonth(ui.cell): tx, ty = ui.todayCell.monthPos ## today x and y x0 = self.cx[tx] - self.dx/2.0 y0 = self.cy[ty] - self.dy/2.0 cr.rectangle(x0, y0, self.dx, self.dy) fillColor(cr, ui.todayCellColor) for yPos in range(6): for xPos in range(7): c = status[yPos][xPos] x0 = self.cx[xPos] y0 = self.cy[yPos] cellInactive = (c.month != ui.cell.month) cellHasCursor = (cursor and (xPos, yPos) == selectedCellPos) if cellHasCursor: ##### Drawing Cursor cx0 = x0 - self.dx/2.0 + 1 cy0 = y0 - self.dy/2.0 + 1 cw = self.dx - 1 ch = self.dy - 1 ######### Circular Rounded drawCursorBg(cr, cx0, cy0, cw, ch) fillColor(cr, ui.cursorBgColor) ######## end of Drawing Cursor if not cellInactive: iconList = c.getMonthEventIcons() if iconList: iconsN = len(iconList) scaleFact = 1.0 / sqrt(iconsN) fromRight = 0 for index, icon in enumerate(iconList): ## if len(iconList) > 1 ## FIXME try: pix = GdkPixbuf.Pixbuf.new_from_file(icon) except: myRaise(__file__) continue pix_w = pix.get_width() pix_h = pix.get_height() ## right buttom corner ????????????????????? x1 = (x0 + self.dx/2.0)/scaleFact - fromRight - pix_w # right side y1 = (y0 + self.dy/2.0)/scaleFact - pix_h # buttom side cr.scale(scaleFact, scaleFact) gdk.cairo_set_source_pixbuf(cr, pix, x1, y1) cr.rectangle(x1, y1, pix_w, pix_h) cr.fill() cr.scale(1.0/scaleFact, 1.0/scaleFact) fromRight += pix_w #### Drawing numbers inside every cell #cr.rectangle( # x0-self.dx/2.0+1, # y0-self.dy/2.0+1, # self.dx-1, # self.dy-1, #) mode = calTypes.primary params = ui.mcalTypeParams[0] daynum = newTextLayout(self, _(c.dates[mode][2], mode), params['font']) fontw, fonth = daynum.get_pixel_size() if cellInactive: setColor(cr, ui.inactiveColor) elif c.holiday: setColor(cr, ui.holidayColor) else: setColor(cr, params['color']) cr.move_to( x0 - fontw/2.0 + params['pos'][0], y0 - fonth/2.0 + params['pos'][1], ) show_layout(cr, daynum) if not cellInactive: for mode, params in ui.getActiveMonthCalParams()[1:]: daynum = newTextLayout(self, _(c.dates[mode][2], mode), params['font']) fontw, fonth = daynum.get_pixel_size() setColor(cr, params['color']) cr.move_to( x0 - fontw/2.0 + params['pos'][0], y0 - fonth/2.0 + params['pos'][1], ) show_layout(cr, daynum) if cellHasCursor: ##### Drawing Cursor Outline cx0 = x0-self.dx/2.0+1 cy0 = y0-self.dy/2.0+1 cw = self.dx-1 ch = self.dy-1 ######### Circular Rounded drawCursorOutline(cr, cx0, cy0, cw, ch) fillColor(cr, ui.cursorOutColor) ##### end of Drawing Cursor Outline ################ end of drawing cells ##### drawGrid if ui.mcalGrid: setColor(cr, ui.mcalGridColor) for i in range(7): cr.rectangle(self.cx[i]+rtlSgn()*self.dx/2.0, 0, 1, h) cr.fill() for i in range(6): cr.rectangle(0, self.cy[i]-self.dy/2.0, w, 1) cr.fill() return False
def __init__(self, statusIconMode, **kwargs): gtk.Dialog.__init__(self, **kwargs) self.set_title(_('Preferences')) self.connect('delete-event', self.onDelete) #self.set_has_separator(False) #self.set_skip_taskbar_hint(True) ### dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), 1, self.cancel) dialog_add_button(self, gtk.STOCK_APPLY, _('_Apply'), 2, self.apply) okB = dialog_add_button(self, gtk.STOCK_OK, _('_OK'), 3, self.ok, tooltip=_('Apply and Close')) okB.grab_default()## FIXME #okB.grab_focus()## FIXME ############################################## self.localePrefItems = [] self.corePrefItems = [] self.uiPrefItems = [] self.gtkPrefItems = [] ## FIXME ##### self.prefPages = [] ################################ Tab 1 (General) ############################################ vbox = gtk.VBox() vbox.label = _('_General') vbox.icon = 'preferences-other.png' self.prefPages.append(vbox) hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('Language'))) itemLang = LangPrefItem() self.localePrefItems.append(itemLang) ### pack(hbox, itemLang._widget) if langSh!='en': pack(hbox, gtk.Label('Language')) pack(vbox, hbox) ########################## hbox = gtk.HBox() frame = gtk.Frame() frame.set_label(_('Calendar Types')) itemCals = AICalsPrefItem() self.corePrefItems.append(itemCals) frame.add(itemCals._widget) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) hbox.set_border_width(5) #frame.set_border_width(5) pack(vbox, hbox, 1, 1) ########################## if statusIconMode!=1: hbox = gtk.HBox(spacing=3) item = CheckStartupPrefItem() self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ######################## item = CheckPrefItem(ui, 'showMain', _('Show main window on start')) self.uiPrefItems.append(item) pack(vbox, item._widget) ########################## item = CheckPrefItem(ui, 'winTaskbar', _('Window in Taskbar')) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ########### pack(vbox, hbox) ########################## try: import scal3.ui_gtk.starcal_appindicator except (ImportError, ValueError): pass else: item = CheckPrefItem(ui, 'useAppIndicator', _('Use AppIndicator')) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ########################## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('Show Digital Clock:'))) pack(hbox, gtk.Label(''), 1, 1) #item = CheckPrefItem(ui, 'showDigClockTb', _('On Toolbar'))## FIXME #self.uiPrefItems.append(item) #pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) if statusIconMode==1: item = CheckPrefItem(ui, 'showDigClockTr', _('On Applet'), 'Panel Applet') else: item = CheckPrefItem(ui, 'showDigClockTr', _('On Status Icon'), 'Notification Area') self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ################################ Tab 2 (Appearance) ########################################### vbox = gtk.VBox() vbox.label = _('A_ppearance') vbox.icon = 'preferences-desktop-theme.png' self.prefPages.append(vbox) ######## hbox = gtk.HBox(spacing=2) ### customCheckItem = CheckPrefItem(ui, 'fontCustomEnable', _('Application Font')) self.uiPrefItems.append(customCheckItem) pack(hbox, customCheckItem._widget) ### customItem = FontPrefItem(ui, 'fontCustom', self) self.uiPrefItems.append(customItem) pack(hbox, customItem._widget) pack(hbox, gtk.Label(''), 1, 1) customCheckItem.syncSensitive(customItem._widget) pack(vbox, hbox) ########################### Theme ##################### #hbox = gtk.HBox(spacing=3) #item = CheckPrefItem(ui, 'bgUseDesk', _('Use Desktop Background')) #self.uiPrefItems.append(item) #pack(hbox, item._widget) #pack(hbox, gtk.Label(''), 1, 1) #pack(vbox, hbox) ##################### hbox = gtk.HBox(spacing=3) lab = gtk.Label('<b>%s:</b> '%_('Colors')) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Background'))) item = ColorPrefItem(ui, 'bgColor', True) self.uiPrefItems.append(item) self.colorbBg = item._widget ## FIXME pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Border'))) item = ColorPrefItem(ui, 'borderColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Cursor'))) item = ColorPrefItem(ui, 'cursorOutColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Cursor BG'))) item = ColorPrefItem(ui, 'cursorBgColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Today'))) item = ColorPrefItem(ui, 'todayCellColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(vbox, hbox) #################### hbox = gtk.HBox(spacing=3) lab = gtk.Label('<b>%s:</b> '%_('Font Colors')) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(''), 1, 1) #### pack(hbox, gtk.Label(_('Normal'))) item = ColorPrefItem(ui, 'textColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Holiday'))) item = ColorPrefItem(ui, 'holidayColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Inactive Day'))) item = ColorPrefItem(ui, 'inactiveColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) #### pack(hbox, gtk.Label(_('Border'))) item = ColorPrefItem(ui, 'borderTextColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) #### pack(vbox, hbox) ################### hbox = gtk.HBox(spacing=1) label = gtk.Label('<b>%s</b>:'%_('Cursor')) label.set_use_markup(True) pack(hbox, label) pack(hbox, gtk.Label(''), 1, 1) pack(hbox, gtk.Label(_('Diameter Factor'))) item = SpinPrefItem(ui, 'cursorDiaFactor', 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item._widget) ### pack(hbox, gtk.Label(''), 1, 1) pack(hbox, gtk.Label(_('Rounding Factor'))) item = SpinPrefItem(ui, 'cursorRoundingFactor', 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(vbox, hbox) ################### exp = gtk.Expander() label = gtk.Label('<b>%s</b>'%_('Status Icon')) label.set_use_markup(True) exp.set_label_widget(label) expVbox = gtk.VBox(spacing=1) exp.add(expVbox) exp.set_expanded(True) sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) label = gtk.Label(_('Normal Days')) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, 'statusIconImage', title=_('Select Icon'), currentFolder=pixDir, defaultVarName='statusIconImageDefault', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) label = gtk.Label(_('Holidays')) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, 'statusIconImageHoli', title=_('Select Icon'), currentFolder=pixDir, defaultVarName='statusIconImageHoliDefault', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) checkItem = CheckPrefItem( ui, 'statusIconFontFamilyEnable', label=_('Change font family to'), #tooltip=_('In SVG files'), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem._widget) pack(hbox, checkItem._widget) item = FontFamilyPrefItem( ui, 'statusIconFontFamily', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) checkItem = CheckPrefItem( ui, 'statusIconFixedSizeEnable', label=_('Fixed Size'), #tooltip=_(''), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem._widget) pack(hbox, checkItem._widget) pack(hbox, gtk.Label(' ')) item = WidthHeightPrefItem( ui, 'statusIconFixedSizeWH', 999, ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) ######## checkItem.syncSensitive(item._widget, reverse=False) #### pack(vbox, exp) ################################ Tab 3 (Advanced) ########################################### vbox = gtk.VBox() vbox.label = _('A_dvanced') vbox.icon = 'applications-system.png' self.prefPages.append(vbox) ###### sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_('Date Format')) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) #pack(hbox, gtk.Label(''), 1, 1) item = ComboEntryTextPrefItem(ud, 'dateFormat', ( '%Y/%m/%d', '%Y-%m-%d', '%y/%m/%d', '%y-%m-%d', '%OY/%Om/%Od', '%OY-%Om-%Od', '%m/%d', '%m/%d/%Y', )) self.gtkPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ### hbox = gtk.HBox(spacing=5) #pack(hbox, gtk.Label(''), 1, 1) label = gtk.Label(_('Digital Clock Format')) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) item = ComboEntryTextPrefItem(ud, 'clockFormat', ( '%T', '%X', '%Y/%m/%d - %T', '%OY/%Om/%Od - %X', '<i>%Y/%m/%d</i> - %T', '<b>%T</b>', '<b>%X</b>', '%H:%M', '<b>%H:%M</b>', '<span size="smaller">%OY/%Om/%Od</span>,%X' '%OY/%Om/%Od,<span color="#ff0000">%X</span>', '<span font="bold">%X</span>', '%OH:%OM', '<b>%OH:%OM</b>', )) self.gtkPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_('Days maximum cache size')) label.set_alignment(0, 0.5) pack(hbox, label) ##sgroup.add_widget(label) item = SpinPrefItem(ui, 'maxDayCacheSize', 100, 9999, 0) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(vbox, hbox) vbox4 = vbox ######## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('First day of week'))) ##item = ComboTextPrefItem( ## FIXME self.comboFirstWD = gtk.ComboBoxText() for item in core.weekDayName: self.comboFirstWD.append_text(item) self.comboFirstWD.append_text(_('Automatic')) self.comboFirstWD.connect('changed', self.comboFirstWDChanged) pack(hbox, self.comboFirstWD) pack(vbox, hbox) ######### hbox0 = gtk.HBox(spacing=0) pack(hbox0, gtk.Label(_('Holidays')+' ')) item = WeekDayCheckListPrefItem(core, 'holidayWeekDays') self.corePrefItems.append(item) self.holiWDItem = item ## Holiday Week Days Item pack(hbox0, item._widget, 1, 1) pack(vbox, hbox0) ######### hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('First week of year containts'))) combo = gtk.ComboBoxText() texts = [_('First %s of year')%name for name in core.weekDayName]+[_('First day of year')] texts[4] += ' (ISO 8601)' ## FIXME for text in texts: combo.append_text(text) #combo.append_text(_('Automatic'))## (as Locale)## FIXME pack(hbox, combo) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) self.comboWeekYear = combo ######### hbox = gtk.HBox(spacing=3) item = CheckPrefItem(locale_man, 'enableNumLocale', _('Numbers Localization')) self.localePrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ################################################## ################################ options = [] for mod in calTypes: for opt in mod.options: if opt[0]=='button': try: optl = ModuleOptionButton(opt[1:]) except: myRaise() continue else: optl = ModuleOptionItem(mod, opt) options.append(optl) pack(vbox, optl._widget) self.moduleOptions = options ################################ Tab 4 (Plugins) ############################################ vbox = gtk.VBox() vbox.label = _('_Plugins') vbox.icon = 'preferences-plugin.png' self.prefPages.append(vbox) ##### ##pluginsTextStatusIcon: hbox = gtk.HBox() if statusIconMode==1: item = CheckPrefItem(ui, 'pluginsTextStatusIcon', _('Show in applet (for today)')) else: item = CheckPrefItem(ui, 'pluginsTextStatusIcon', _('Show in Status Icon (for today)')) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, bool, str) treev.set_model(trees) treev.enable_model_drag_source(gdk.ModifierType.BUTTON1_MASK, [('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.enable_model_drag_dest([('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.connect('drag_data_received', self.plugTreevDragReceived) treev.get_selection().connect('changed', self.plugTreevCursorChanged) treev.connect('row-activated', self.plugTreevRActivate) treev.connect('button-press-event', self.plugTreevButtonPress) ### #treev.drag_source_set_icon_stock(gtk.STOCK_CLOSE) #treev.drag_source_add_text_targets() #treev.drag_source_add_uri_targets() #treev.drag_source_unset() ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.plugTreeviewCellToggled) col = gtk.TreeViewColumn(_('Enable'), cell) col.add_attribute(cell, 'active', 1) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.plugTreeviewCellToggled2) col = gtk.TreeViewColumn(_('Show Date'), cell) col.add_attribute(cell, 'active', 2) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### #cell = gtk.CellRendererText() #col = gtk.TreeViewColumn(_('File Name'), cell, text=2) #col.set_resizable(True) #treev.append_column(col) #treev.set_search_column(1) ###### cell = gtk.CellRendererText() #cell.set_property('wrap-mode', gtk.WrapMode.WORD) #cell.set_property('editable', True) #cell.set_property('wrap-width', 200) col = gtk.TreeViewColumn(_('Title'), cell, text=3) #treev.connect('draw', self.plugTreevExpose) #self.plugTitleCell = cell #self.plugTitleCol = col #col.set_resizable(True)## No need! col.set_property('expand', True) treev.append_column(col) ###### #for i in xrange(len(core.plugIndex)): # x = core.plugIndex[i] # trees.append([x[0], x[1], x[2], core.allPlugList[x[0]].title]) ###### self.plugTreeview = treev self.plugTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### hboxBut = gtk.HBox() ### button = gtk.Button(_('_About Plugin')) button.set_image(gtk.Image.new_from_stock(gtk.STOCK_ABOUT, gtk.IconSize.BUTTON)) button.set_sensitive(False) button.connect('clicked', self.plugAboutClicked) self.plugButtonAbout = button pack(hboxBut, button) pack(hboxBut, gtk.Label(''), 1, 1) ### button = gtk.Button(_('C_onfigure Plugin')) button.set_image(gtk.Image.new_from_stock(gtk.STOCK_PREFERENCES, gtk.IconSize.BUTTON)) button.set_sensitive(False) button.connect('clicked', self.plugConfClicked) self.plugButtonConf = button pack(hboxBut, button) pack(hboxBut, gtk.Label(''), 1, 1) ### pack(vboxPlug, hboxBut) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try:## DeprecationWarning ## FIXME #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) ### no different (argument to set_icon_size does not affect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR ##no different(argument2 to image_new_from_stock does not affect) FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_GOTO_TOP, size) set_tooltip(tb, _('Move to top')) tb.connect('clicked', self.plugTreeviewTop) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _('Move up')) tb.connect('clicked', self.plugTreeviewUp) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _('Move down')) tb.connect('clicked', self.plugTreeviewDown) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GOTO_BOTTOM, size) set_tooltip(tb, _('Move to bottom')) tb.connect('clicked', self.plugTreeviewBottom) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _('Add')) #tb.connect('clicked', lambda obj: self.plugAddDialog.run()) tb.connect('clicked', self.plugAddClicked) #if len(self.plugAddItems)==0: # tb.set_sensitive(False) toolbar.insert(tb, -1) self.plugButtonAdd = tb ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _('Delete')) tb.connect('clicked', self.plugTreeviewDel) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) ##### ''' vpan = gtk.VPaned() vpan.add1(hbox) vbox2 = gtk.VBox() pack(vbox2, gtk.Label('Test Label')) vpan.add2(vbox2) vpan.set_position(100) pack(vbox, vpan) ''' pack(vbox, hbox, 1, 1) ########################## d = gtk.Dialog(parent=self) d.set_transient_for(self) ## dialog.set_transient_for(parent) makes the window on top of parent and at the center point of parent ## but if you call dialog.show() or dialog.present(), the parent is still active(clickabel widgets) before closing child "dialog" ## you may call dialog.run() to realy make it transient for parent #d.set_has_separator(False) d.connect('delete-event', self.plugAddDialogClose) d.set_title(_('Add Plugin')) ### dialog_add_button(d, gtk.STOCK_CANCEL, _('_Cancel'), 1, self.plugAddDialogClose) dialog_add_button(d, gtk.STOCK_OK, _('_OK'), 2, self.plugAddDialogOK) ### treev = gtk.TreeView() trees = gtk.ListStore(str) treev.set_model(trees) #treev.enable_model_drag_source(gdk.ModifierType.BUTTON1_MASK, [('', 0, 0, 0)], gdk.DragAction.MOVE)## FIXME #treev.enable_model_drag_dest([('', 0, 0, 0)], gdk.DragAction.MOVE)## FIXME treev.connect('drag_data_received', self.plugTreevDragReceived) treev.connect('row-activated', self.plugAddTreevRActivate) #### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_('Title'), cell, text=0) #col.set_resizable(True)# no need when have only one column! treev.append_column(col) #### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) pack(d.vbox, swin, 1, 1) d.vbox.show_all() self.plugAddDialog = d self.plugAddTreeview = treev self.plugAddTreestore = trees ############# ##treev.set_resize_mode(gtk.RESIZE_IMMEDIATE) ##self.plugAddItems = [] ####################################### Tab 5 (Accounts) vbox = gtk.VBox() vbox.label = _('Accounts') vbox.icon = 'web-settings.png' self.prefPages.append(vbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, str)## id (hidden), enable, title treev.set_model(trees) treev.enable_model_drag_source(gdk.ModifierType.BUTTON1_MASK, [('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.enable_model_drag_dest([('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.connect('row-activated', self.accountsTreevRActivate) treev.connect('button-press-event', self.accountsTreevButtonPress) ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.accountsTreeviewCellToggled) col = gtk.TreeViewColumn(_('Enable'), cell) col.add_attribute(cell, 'active', 1) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_('Title'), cell, text=2) #col.set_resizable(True)## No need! col.set_property('expand', True) treev.append_column(col) ###### self.accountsTreeview = treev self.accountsTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try:## DeprecationWarning ## FIXME #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) ### no different (argument to set_icon_size does not affect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR ##no different(argument2 to image_new_from_stock does not affect) FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_EDIT, size) set_tooltip(tb, _('Edit')) tb.connect('clicked', self.accountsEditClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _('Add')) tb.connect('clicked', self.accountsAddClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _('Delete')) tb.connect('clicked', self.accountsDelClicked) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _('Move up')) tb.connect('clicked', self.accountsUpClicked) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _('Move down')) tb.connect('clicked', self.accountsDownClicked) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) pack(vbox, hbox, 1, 1) ################################################################################################### notebook = gtk.Notebook() self.notebook = notebook ##################################### for vbox in self.prefPages: l = gtk.Label(vbox.label) l.set_use_underline(True) vb = gtk.VBox(spacing=3) pack(vb, imageFromFile(vbox.icon)) pack(vb, l) vb.show_all() notebook.append_page(vbox, vb) try: notebook.set_tab_reorderable(vbox, True) except AttributeError: pass ####################### #notebook.set_property('homogeneous', True)## not in gtk3 FIXME #notebook.set_property('tab-border', 5)## not in gtk3 FIXME #notebook.set_property('tab-hborder', 15)## not in gtk3 FIXME pack(self.vbox, notebook) self.vbox.show_all() for i in ui.prefPagesOrder: try: j = ui.prefPagesOrder[i] except IndexError: continue notebook.reorder_child(self.prefPages[i], j)
def __init__(self, statusIconMode, **kwargs): gtk.Dialog.__init__(self, **kwargs) self.set_title(_('Preferences')) self.connect('delete-event', self.onDelete) #self.set_has_separator(False) #self.set_skip_taskbar_hint(True) ### dialog_add_button(self, gtk.STOCK_CANCEL, _('_Cancel'), 1, self.cancel) dialog_add_button(self, gtk.STOCK_APPLY, _('_Apply'), 2, self.apply) okB = dialog_add_button(self, gtk.STOCK_OK, _('_OK'), 3, self.ok, tooltip=_('Apply and Close')) okB.grab_default() ## FIXME #okB.grab_focus()## FIXME ############################################## self.localePrefItems = [] self.corePrefItems = [] self.uiPrefItems = [] self.gtkPrefItems = [] ## FIXME ##### self.prefPages = [] ################################ Tab 1 (General) ############################################ vbox = gtk.VBox() vbox.label = _('_General') vbox.icon = 'preferences-other.png' self.prefPages.append(vbox) hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('Language'))) itemLang = LangPrefItem() self.localePrefItems.append(itemLang) ### pack(hbox, itemLang._widget) if langSh != 'en': pack(hbox, gtk.Label('Language')) pack(vbox, hbox) ########################## hbox = gtk.HBox() frame = gtk.Frame() frame.set_label(_('Calendar Types')) itemCals = AICalsPrefItem() self.corePrefItems.append(itemCals) frame.add(itemCals._widget) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) hbox.set_border_width(5) #frame.set_border_width(5) pack(vbox, hbox, 1, 1) ########################## if statusIconMode != 1: hbox = gtk.HBox(spacing=3) item = CheckStartupPrefItem() self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ######################## item = CheckPrefItem(ui, 'showMain', _('Show main window on start')) self.uiPrefItems.append(item) pack(vbox, item._widget) ########################## item = CheckPrefItem(ui, 'winTaskbar', _('Window in Taskbar')) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ########### pack(vbox, hbox) ########################## try: import scal3.ui_gtk.starcal_appindicator except (ImportError, ValueError): pass else: item = CheckPrefItem(ui, 'useAppIndicator', _('Use AppIndicator')) self.uiPrefItems.append(item) hbox = gtk.HBox(spacing=3) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ########################## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('Show Digital Clock:'))) pack(hbox, gtk.Label(''), 1, 1) #item = CheckPrefItem(ui, 'showDigClockTb', _('On Toolbar'))## FIXME #self.uiPrefItems.append(item) #pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) if statusIconMode == 1: item = CheckPrefItem(ui, 'showDigClockTr', _('On Applet'), 'Panel Applet') else: item = CheckPrefItem(ui, 'showDigClockTr', _('On Status Icon'), 'Notification Area') self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ################################ Tab 2 (Appearance) ########################################### vbox = gtk.VBox() vbox.label = _('A_ppearance') vbox.icon = 'preferences-desktop-theme.png' self.prefPages.append(vbox) ######## hbox = gtk.HBox(spacing=2) ### customCheckItem = CheckPrefItem(ui, 'fontCustomEnable', _('Application Font')) self.uiPrefItems.append(customCheckItem) pack(hbox, customCheckItem._widget) ### customItem = FontPrefItem(ui, 'fontCustom', self) self.uiPrefItems.append(customItem) pack(hbox, customItem._widget) pack(hbox, gtk.Label(''), 1, 1) customCheckItem.syncSensitive(customItem._widget) pack(vbox, hbox) ########################### Theme ##################### #hbox = gtk.HBox(spacing=3) #item = CheckPrefItem(ui, 'bgUseDesk', _('Use Desktop Background')) #self.uiPrefItems.append(item) #pack(hbox, item._widget) #pack(hbox, gtk.Label(''), 1, 1) #pack(vbox, hbox) ##################### hbox = gtk.HBox(spacing=3) lab = gtk.Label('<b>%s:</b> ' % _('Colors')) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Background'))) item = ColorPrefItem(ui, 'bgColor', True) self.uiPrefItems.append(item) self.colorbBg = item._widget ## FIXME pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Border'))) item = ColorPrefItem(ui, 'borderColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Cursor'))) item = ColorPrefItem(ui, 'cursorOutColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Cursor BG'))) item = ColorPrefItem(ui, 'cursorBgColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Today'))) item = ColorPrefItem(ui, 'todayCellColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(vbox, hbox) #################### hbox = gtk.HBox(spacing=3) lab = gtk.Label('<b>%s:</b> ' % _('Font Colors')) lab.set_use_markup(True) pack(hbox, lab) pack(hbox, gtk.Label(''), 1, 1) #### pack(hbox, gtk.Label(_('Normal'))) item = ColorPrefItem(ui, 'textColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Holiday'))) item = ColorPrefItem(ui, 'holidayColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(hbox, gtk.Label(_('Inactive Day'))) item = ColorPrefItem(ui, 'inactiveColor', True) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) #### pack(hbox, gtk.Label(_('Border'))) item = ColorPrefItem(ui, 'borderTextColor', False) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) #### pack(vbox, hbox) ################### hbox = gtk.HBox(spacing=1) label = gtk.Label('<b>%s</b>:' % _('Cursor')) label.set_use_markup(True) pack(hbox, label) pack(hbox, gtk.Label(''), 1, 1) pack(hbox, gtk.Label(_('Diameter Factor'))) item = SpinPrefItem(ui, 'cursorDiaFactor', 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item._widget) ### pack(hbox, gtk.Label(''), 1, 1) pack(hbox, gtk.Label(_('Rounding Factor'))) item = SpinPrefItem(ui, 'cursorRoundingFactor', 0, 1, 2) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) ### pack(vbox, hbox) ################### exp = gtk.Expander() label = gtk.Label('<b>%s</b>' % _('Status Icon')) label.set_use_markup(True) exp.set_label_widget(label) expVbox = gtk.VBox(spacing=1) exp.add(expVbox) exp.set_expanded(True) sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) label = gtk.Label(_('Normal Days')) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, 'statusIconImage', title=_('Select Icon'), currentFolder=pixDir, defaultVarName='statusIconImageDefault', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) label = gtk.Label(_('Holidays')) sgroup.add_widget(label) pack(hbox, label) item = FileChooserPrefItem( ui, 'statusIconImageHoli', title=_('Select Icon'), currentFolder=pixDir, defaultVarName='statusIconImageHoliDefault', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) checkItem = CheckPrefItem( ui, 'statusIconFontFamilyEnable', label=_('Change font family to'), #tooltip=_('In SVG files'), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem._widget) pack(hbox, checkItem._widget) item = FontFamilyPrefItem( ui, 'statusIconFontFamily', ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) #### hbox = gtk.HBox(spacing=1) pack(hbox, gtk.Label(' ')) checkItem = CheckPrefItem( ui, 'statusIconFixedSizeEnable', label=_('Fixed Size'), #tooltip=_(''), ) self.uiPrefItems.append(checkItem) #sgroup.add_widget(checkItem._widget) pack(hbox, checkItem._widget) pack(hbox, gtk.Label(' ')) item = WidthHeightPrefItem( ui, 'statusIconFixedSizeWH', 999, ) self.uiPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(expVbox, hbox) ######## checkItem.syncSensitive(item._widget, reverse=False) #### pack(vbox, exp) ################################ Tab 3 (Advanced) ########################################### vbox = gtk.VBox() vbox.label = _('A_dvanced') vbox.icon = 'applications-system.png' self.prefPages.append(vbox) ###### sgroup = gtk.SizeGroup(gtk.SizeGroupMode.HORIZONTAL) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_('Date Format')) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) #pack(hbox, gtk.Label(''), 1, 1) item = ComboEntryTextPrefItem(ud, 'dateFormat', ( '%Y/%m/%d', '%Y-%m-%d', '%y/%m/%d', '%y-%m-%d', '%OY/%Om/%Od', '%OY-%Om-%Od', '%m/%d', '%m/%d/%Y', )) self.gtkPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ### hbox = gtk.HBox(spacing=5) #pack(hbox, gtk.Label(''), 1, 1) label = gtk.Label(_('Digital Clock Format')) label.set_alignment(0, 0.5) pack(hbox, label) sgroup.add_widget(label) item = ComboEntryTextPrefItem(ud, 'clockFormat', ( '%T', '%X', '%Y/%m/%d - %T', '%OY/%Om/%Od - %X', '<i>%Y/%m/%d</i> - %T', '<b>%T</b>', '<b>%X</b>', '%H:%M', '<b>%H:%M</b>', '<span size="smaller">%OY/%Om/%Od</span>,%X' '%OY/%Om/%Od,<span color="#ff0000">%X</span>', '<span font="bold">%X</span>', '%OH:%OM', '<b>%OH:%OM</b>', )) self.gtkPrefItems.append(item) pack(hbox, item._widget, 1, 1) pack(vbox, hbox) ###### hbox = gtk.HBox(spacing=5) label = gtk.Label(_('Days maximum cache size')) label.set_alignment(0, 0.5) pack(hbox, label) ##sgroup.add_widget(label) item = SpinPrefItem(ui, 'maxDayCacheSize', 100, 9999, 0) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(vbox, hbox) vbox4 = vbox ######## hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('First day of week'))) ##item = ComboTextPrefItem( ## FIXME self.comboFirstWD = gtk.ComboBoxText() for item in core.weekDayName: self.comboFirstWD.append_text(item) self.comboFirstWD.append_text(_('Automatic')) self.comboFirstWD.connect('changed', self.comboFirstWDChanged) pack(hbox, self.comboFirstWD) pack(vbox, hbox) ######### hbox0 = gtk.HBox(spacing=0) pack(hbox0, gtk.Label(_('Holidays') + ' ')) item = WeekDayCheckListPrefItem(core, 'holidayWeekDays') self.corePrefItems.append(item) self.holiWDItem = item ## Holiday Week Days Item pack(hbox0, item._widget, 1, 1) pack(vbox, hbox0) ######### hbox = gtk.HBox(spacing=3) pack(hbox, gtk.Label(_('First week of year containts'))) combo = gtk.ComboBoxText() texts = [_('First %s of year') % name for name in core.weekDayName] + [_('First day of year')] texts[4] += ' (ISO 8601)' ## FIXME for text in texts: combo.append_text(text) #combo.append_text(_('Automatic'))## (as Locale)## FIXME pack(hbox, combo) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) self.comboWeekYear = combo ######### hbox = gtk.HBox(spacing=3) item = CheckPrefItem(locale_man, 'enableNumLocale', _('Numbers Localization')) self.localePrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ################################################## ################################ options = [] for mod in calTypes: for opt in mod.options: if opt[0] == 'button': try: optl = ModuleOptionButton(opt[1:]) except: myRaise() continue else: optl = ModuleOptionItem(mod, opt) options.append(optl) pack(vbox, optl._widget) self.moduleOptions = options ################################ Tab 4 (Plugins) ############################################ vbox = gtk.VBox() vbox.label = _('_Plugins') vbox.icon = 'preferences-plugin.png' self.prefPages.append(vbox) ##### ##pluginsTextStatusIcon: hbox = gtk.HBox() if statusIconMode == 1: item = CheckPrefItem(ui, 'pluginsTextStatusIcon', _('Show in applet (for today)')) else: item = CheckPrefItem(ui, 'pluginsTextStatusIcon', _('Show in Status Icon (for today)')) self.uiPrefItems.append(item) pack(hbox, item._widget) pack(hbox, gtk.Label(''), 1, 1) pack(vbox, hbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, bool, str) treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.enable_model_drag_dest([('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.connect('drag_data_received', self.plugTreevDragReceived) treev.get_selection().connect('changed', self.plugTreevCursorChanged) treev.connect('row-activated', self.plugTreevRActivate) treev.connect('button-press-event', self.plugTreevButtonPress) ### #treev.drag_source_set_icon_stock(gtk.STOCK_CLOSE) #treev.drag_source_add_text_targets() #treev.drag_source_add_uri_targets() #treev.drag_source_unset() ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.plugTreeviewCellToggled) col = gtk.TreeViewColumn(_('Enable'), cell) col.add_attribute(cell, 'active', 1) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.plugTreeviewCellToggled2) col = gtk.TreeViewColumn(_('Show Date'), cell) col.add_attribute(cell, 'active', 2) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### #cell = gtk.CellRendererText() #col = gtk.TreeViewColumn(_('File Name'), cell, text=2) #col.set_resizable(True) #treev.append_column(col) #treev.set_search_column(1) ###### cell = gtk.CellRendererText() #cell.set_property('wrap-mode', gtk.WrapMode.WORD) #cell.set_property('editable', True) #cell.set_property('wrap-width', 200) col = gtk.TreeViewColumn(_('Title'), cell, text=3) #treev.connect('draw', self.plugTreevExpose) #self.plugTitleCell = cell #self.plugTitleCol = col #col.set_resizable(True)## No need! col.set_property('expand', True) treev.append_column(col) ###### #for i in xrange(len(core.plugIndex)): # x = core.plugIndex[i] # trees.append([x[0], x[1], x[2], core.allPlugList[x[0]].title]) ###### self.plugTreeview = treev self.plugTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### hboxBut = gtk.HBox() ### button = gtk.Button(_('_About Plugin')) button.set_image( gtk.Image.new_from_stock(gtk.STOCK_ABOUT, gtk.IconSize.BUTTON)) button.set_sensitive(False) button.connect('clicked', self.plugAboutClicked) self.plugButtonAbout = button pack(hboxBut, button) pack(hboxBut, gtk.Label(''), 1, 1) ### button = gtk.Button(_('C_onfigure Plugin')) button.set_image( gtk.Image.new_from_stock(gtk.STOCK_PREFERENCES, gtk.IconSize.BUTTON)) button.set_sensitive(False) button.connect('clicked', self.plugConfClicked) self.plugButtonConf = button pack(hboxBut, button) pack(hboxBut, gtk.Label(''), 1, 1) ### pack(vboxPlug, hboxBut) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try:## DeprecationWarning ## FIXME #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) ### no different (argument to set_icon_size does not affect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR ##no different(argument2 to image_new_from_stock does not affect) FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_GOTO_TOP, size) set_tooltip(tb, _('Move to top')) tb.connect('clicked', self.plugTreeviewTop) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _('Move up')) tb.connect('clicked', self.plugTreeviewUp) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _('Move down')) tb.connect('clicked', self.plugTreeviewDown) toolbar.insert(tb, -1) ######## tb = toolButtonFromStock(gtk.STOCK_GOTO_BOTTOM, size) set_tooltip(tb, _('Move to bottom')) tb.connect('clicked', self.plugTreeviewBottom) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _('Add')) #tb.connect('clicked', lambda obj: self.plugAddDialog.run()) tb.connect('clicked', self.plugAddClicked) #if len(self.plugAddItems)==0: # tb.set_sensitive(False) toolbar.insert(tb, -1) self.plugButtonAdd = tb ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _('Delete')) tb.connect('clicked', self.plugTreeviewDel) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) ##### ''' vpan = gtk.VPaned() vpan.add1(hbox) vbox2 = gtk.VBox() pack(vbox2, gtk.Label('Test Label')) vpan.add2(vbox2) vpan.set_position(100) pack(vbox, vpan) ''' pack(vbox, hbox, 1, 1) ########################## d = gtk.Dialog(parent=self) d.set_transient_for(self) ## dialog.set_transient_for(parent) makes the window on top of parent and at the center point of parent ## but if you call dialog.show() or dialog.present(), the parent is still active(clickabel widgets) before closing child "dialog" ## you may call dialog.run() to realy make it transient for parent #d.set_has_separator(False) d.connect('delete-event', self.plugAddDialogClose) d.set_title(_('Add Plugin')) ### dialog_add_button(d, gtk.STOCK_CANCEL, _('_Cancel'), 1, self.plugAddDialogClose) dialog_add_button(d, gtk.STOCK_OK, _('_OK'), 2, self.plugAddDialogOK) ### treev = gtk.TreeView() trees = gtk.ListStore(str) treev.set_model(trees) #treev.enable_model_drag_source(gdk.ModifierType.BUTTON1_MASK, [('', 0, 0, 0)], gdk.DragAction.MOVE)## FIXME #treev.enable_model_drag_dest([('', 0, 0, 0)], gdk.DragAction.MOVE)## FIXME treev.connect('drag_data_received', self.plugTreevDragReceived) treev.connect('row-activated', self.plugAddTreevRActivate) #### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_('Title'), cell, text=0) #col.set_resizable(True)# no need when have only one column! treev.append_column(col) #### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) pack(d.vbox, swin, 1, 1) d.vbox.show_all() self.plugAddDialog = d self.plugAddTreeview = treev self.plugAddTreestore = trees ############# ##treev.set_resize_mode(gtk.RESIZE_IMMEDIATE) ##self.plugAddItems = [] ####################################### Tab 5 (Accounts) vbox = gtk.VBox() vbox.label = _('Accounts') vbox.icon = 'web-settings.png' self.prefPages.append(vbox) ##### treev = gtk.TreeView() treev.set_headers_clickable(True) trees = gtk.ListStore(int, bool, str) ## id (hidden), enable, title treev.set_model(trees) treev.enable_model_drag_source( gdk.ModifierType.BUTTON1_MASK, [('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.enable_model_drag_dest([('row', gtk.TargetFlags.SAME_WIDGET, 0)], gdk.DragAction.MOVE) treev.connect('row-activated', self.accountsTreevRActivate) treev.connect('button-press-event', self.accountsTreevButtonPress) ### swin = gtk.ScrolledWindow() swin.add(treev) swin.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC) ###### cell = gtk.CellRendererToggle() #cell.set_property('activatable', True) cell.connect('toggled', self.accountsTreeviewCellToggled) col = gtk.TreeViewColumn(_('Enable'), cell) col.add_attribute(cell, 'active', 1) #cell.set_active(False) col.set_resizable(True) col.set_property('expand', False) treev.append_column(col) ###### cell = gtk.CellRendererText() col = gtk.TreeViewColumn(_('Title'), cell, text=2) #col.set_resizable(True)## No need! col.set_property('expand', True) treev.append_column(col) ###### self.accountsTreeview = treev self.accountsTreestore = trees ####################### hbox = gtk.HBox() vboxPlug = gtk.VBox() pack(vboxPlug, swin, 1, 1) pack(hbox, vboxPlug, 1, 1) ### toolbar = gtk.Toolbar() toolbar.set_orientation(gtk.Orientation.VERTICAL) #try:## DeprecationWarning ## FIXME #toolbar.set_icon_size(gtk.IconSize.SMALL_TOOLBAR) ### no different (argument to set_icon_size does not affect) FIXME #except: # pass size = gtk.IconSize.SMALL_TOOLBAR ##no different(argument2 to image_new_from_stock does not affect) FIXME ######## gtk.IconSize.SMALL_TOOLBAR or gtk.IconSize.MENU tb = toolButtonFromStock(gtk.STOCK_EDIT, size) set_tooltip(tb, _('Edit')) tb.connect('clicked', self.accountsEditClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_ADD, size) set_tooltip(tb, _('Add')) tb.connect('clicked', self.accountsAddClicked) toolbar.insert(tb, -1) ########### tb = toolButtonFromStock(gtk.STOCK_DELETE, size) set_tooltip(tb, _('Delete')) tb.connect('clicked', self.accountsDelClicked) toolbar.insert(tb, -1) ########## tb = toolButtonFromStock(gtk.STOCK_GO_UP, size) set_tooltip(tb, _('Move up')) tb.connect('clicked', self.accountsUpClicked) toolbar.insert(tb, -1) ######### tb = toolButtonFromStock(gtk.STOCK_GO_DOWN, size) set_tooltip(tb, _('Move down')) tb.connect('clicked', self.accountsDownClicked) toolbar.insert(tb, -1) ########### pack(hbox, toolbar) pack(vbox, hbox, 1, 1) ################################################################################################### notebook = gtk.Notebook() self.notebook = notebook ##################################### for vbox in self.prefPages: l = gtk.Label(vbox.label) l.set_use_underline(True) vb = gtk.VBox(spacing=3) pack(vb, imageFromFile(vbox.icon)) pack(vb, l) vb.show_all() notebook.append_page(vbox, vb) try: notebook.set_tab_reorderable(vbox, True) except AttributeError: pass ####################### #notebook.set_property('homogeneous', True)## not in gtk3 FIXME #notebook.set_property('tab-border', 5)## not in gtk3 FIXME #notebook.set_property('tab-hborder', 15)## not in gtk3 FIXME pack(self.vbox, notebook) self.vbox.show_all() for i in ui.prefPagesOrder: try: j = ui.prefPagesOrder[i] except IndexError: continue notebook.reorder_child(self.prefPages[i], j)