#!/usr/bin/python # -*- coding: utf-8 -*- import sys from os.path import dirname, join import os import gtk import awn, pango thisDir = dirname(sys.argv[0]) rootDir = dirname(thisDir) srcDir = join(rootDir, 'src') import gobject sys.path.append(srcDir) from starcal_main import * _ = com.translator from time import localtime class StarCalApplet(StarCal,awn.AppletSimple): def __init__(self,uid,panel_id): self.weekday = ['دوشنبه','سه‌شنبه','چهارشنبه','پنج‌شنبه','جمعه','شنبه','یک‌شنبه'] StarCal.__init__(self, trayMode=1) awn.AppletSimple.__init__(self, 'starcal', uid, panel_id) self.icon = awn.ThemedIcon() self.initial_values() self.pixb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,True,8,1,1) self.pixb.fill(0) self.set_icon_pixbuf(self.pixb) self.get_icon().set_custom_paint(230,30) self.connect("clicked", self.on_clicked) self.set_tooltip_text("starcal") self.get_icon().get_tooltip().props.toggle_on_click = False self.connect("enter-notify-event" , self.mouse_enter) self.connect("leave-notify-event" , self.mouse_leave) self.connect('context-menu-popup', self.show_menu) gobject.timeout_add_seconds(1,self.trayUpdat) self.awndialog = awn.Dialog(self) self.label = gtk.Label("how are you") self.awndialog.add(self.label) self.label.show_all() self.trayUpdat() self.isdialogshowed = False def dialogClose(self, *args): self.dialog.hide() self.isdialogshowed = False def mouse_enter(self, widget,event): self.awndialog.show_all() def mouse_leave(self, widget,event): self.awndialog.hide() def dialogEsc(self): self.dialog.hide() self.isdialogshowed = False def show_menu(self,applet,event): self.awndialog.hide() cmenu = self.create_default_menu()# as gtk.Menu() edit_menus_item = gtk.ImageMenuItem('کپی زمان' ,'Copy Time') edit_menus_item.connect("activate", self.copyTime) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('کپی تاریخ','Copy Date') edit_menus_item.connect("activate", self.copyDateToday) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('تنظیمات زمان سیستم' ,'Adjust System Time') edit_menus_item.connect("activate", self.adjustTime) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('افزودن روز دلخواه' ,'Add Custom Day') edit_menus_item.connect("activate", self.showCustomDayTray) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('صدور به HTML' ,'Export to HTML') edit_menus_item.connect("activate", self.exportClickedTray) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('ترجیحات' ,'prefrences') edit_menus_item.connect("activate", self.prefShow) cmenu.append(edit_menus_item) edit_menus_item = gtk.ImageMenuItem('About' ,'درباره') edit_menus_item.connect("activate",self.aboutShow) cmenu.append(edit_menus_item) edit_menus_item.show() cmenu.show_all() cmenu.set_screen(None) cmenu.popup(None,None,None,event.button,event.time) def on_clicked(self, widget): if not(self.isdialogshowed): self.dialog.move(com.winX, com.winY) act = self.checkAbove.get_active() self.dialog.set_keep_above(act) self.dialog.lowerWin.set_keep_above(act) if self.checkSticky.get_active(): self.dialog.stick() self.dialog.lowerWin.stick() self.dialog.deiconify() self.dialog.present() self.isdialogshowed = True else: (com.winX, com.winY) = self.dialog.get_position() self.dialog.hide() self.isdialogshowed = False def trayUpdat(self, gdate=None, check=True): if gdate==None: gdate = time.localtime()[:3] if self.lastGDate!=gdate or not check: jd = cal.modules[cal.DATE_GREG].to_jd(*gdate) if com.primaryMode==cal.DATE_GREG: ddate = gdate else: ddate = cal.modules[com.primaryMode].jd_to(jd) print('Updating tray to date %s'%com.dateStr(*ddate)) self.lastGDate = gdate self.todayCell = self.dialog.getDateCell(*ddate) wd = cal.getWeekDay(ddate[0], ddate[1], ddate[2], com.primaryMode, com.firstWeekDay) tt = com.getWeekDayN(wd) sep = '\n' for item in com.shownDates: if item['enable']: mode = item['mode'] (y, m, d) = self.todayCell.dates[mode] tt += '%s%s %s %s'%(sep, numLocal(d), _(cal.modules[mode].getMonthName(m, y)), numLocal(y)) if com.extradayTray: self.dialog.loadExtraDaysDB(False) text = self.todayCell.extraday if text!='': tt += '\n\n%s'%text.replace('\t', '\n') try: self.label.set_text(tt) except: com.myRaise(__file__) jd = cal.modules[cal.DATE_GREG].to_jd(*gdate) adate = cal.modules[com.primaryMode].jd_to(jd) date = {'$fy':self.convertToPersian(adate[0]),'$fM':self.convertToPersian(adate[1]),'$fd':self.convertToPersian(adate[2]), '$w':self.weekday[localtime().tm_wday],'$fh':self.convertToPersian(localtime().tm_hour),'$fm':self.convertToPersian(localtime().tm_min),'$fs':self.convertToPersian(localtime().tm_sec), '$y':adate[0],'$M':adate[1],'$d':adate[2],'$h':localtime().tm_hour,'$m':localtime().tm_min,'$s':localtime().tm_sec} txt = '$fs : $fm : $fh $w $fd / $fM / $fy' for each in date: txt = txt.replace(each,str(date[each])) self.dateOver.props.text = txt return True def convertToPersian(self,word): temp = "" fanum = {"0":"۰","1":"۱","2":"۲","3":"۳","4":"۴","5":"۵","6":"۶","7":"۷","8":"۸","9":"۹"} for st in str(word): if st.isdigit(): temp = temp + fanum[st] else: temp = temp + st return temp def initial_values(self): self.dateOver = awn.OverlayText() self.dateOver.props.font_sizing = 22 self.dateOver.props.gravity = gtk.gdk.GRAVITY_SOUTH self.dateOver.props.active = True self.add_overlay(self.dateOver) self.set_pos_type = gtk.POS_BOTTOM if __name__ == "__main__": awn.init(sys.argv[1:]) applet = StarCalApplet(awn.uid, awn.panel_id) awn.embed_applet(applet) applet.show_all() gtk.main()