head	1.11;
access;
symbols
	start:1.1.1.1 hmulhmuldan:1.1.1;
locks; strict;
comment	@# @;


1.11
date	2004.05.29.05.07.04;	author ddt;	state Exp;
branches;
next	1.10;

1.10
date	2004.05.15.07.07.27;	author ddt;	state Exp;
branches;
next	1.9;

1.9
date	2004.05.15.06.22.42;	author ddt;	state Exp;
branches;
next	1.8;

1.8
date	2004.05.15.03.08.48;	author ddt;	state Exp;
branches;
next	1.7;

1.7
date	2004.05.13.12.41.25;	author ddt;	state Exp;
branches;
next	1.6;

1.6
date	2004.05.11.11.53.00;	author ddt;	state Exp;
branches;
next	1.5;

1.5
date	2004.05.09.08.22.33;	author ddt;	state Exp;
branches;
next	1.4;

1.4
date	2004.05.09.07.58.04;	author ddt;	state Exp;
branches;
next	1.3;

1.3
date	2004.01.15.06.30.29;	author ddt;	state Exp;
branches;
next	1.2;

1.2
date	2004.01.15.05.53.36;	author ddt;	state Exp;
branches;
next	1.1;

1.1
date	2003.12.16.11.10.34;	author ddt;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2003.12.16.11.10.34;	author ddt;	state Exp;
branches;
next	;


desc
@@


1.11
log
@*** empty log message ***
@
text
@#!/usr/bin/env python
"""
gdick_applet.py by ddt<ddt@@mirstyle.org>
license: GPL
"""
import pygtk
pygtk.require("2.0")

import gtk
import gobject
import gnome.applet

from gdick import DictResultViewer, gdick
from gdick.Commons import sleeper, Worker

class PopupViewer(gtk.Window):
    def __init__(self, widget):
        gtk.Window.__init__(self)
        self.set_decorated(False)
        self.widget = widget

        color = gtk.gdk.color_parse("#ffed89")
        self.modify_bg(gtk.STATE_NORMAL, color)

        hbox = gtk.HBox()
        closeButton = gtk.Button("X")
        closeButton.connect("clicked", self.on_close_button_clicked)
        closeButton.modify_bg(gtk.STATE_NORMAL, color)
        
        gdickButton = gtk.Button("+")
        gdickButton.connect("clicked", self.on_gdick_button_clicked)
        gdickButton.modify_bg(gtk.STATE_NORMAL, color)
        hbox.pack_start(gdickButton, False, False, 0)
        hbox.pack_start(closeButton, False, False, 0)
        
	vbox = gtk.VBox()
	vbox.pack_start(hbox, False, False, 0)

        self.view = DictResultViewer.DictResultViewer()
        self.view.modify_base(gtk.STATE_NORMAL, color)
        
        scrw = gtk.ScrolledWindow()
        scrw.modify_base(gtk.STATE_NORMAL, color)
        scrw.modify_bg(gtk.STATE_NORMAL, color)
        scrw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrw.add(self.view)
	vbox.pack_start(scrw, True, True, 0)
        self.add(vbox)

        self.word = ""
        self.lang = ""

    def on_close_button_clicked(self, button):
        self.hide()

    def on_gdick_button_clicked(self, button):
        self.hide()
        app = gdick.GDick()
        app.search(self.word)
    
    def _auto_close(self):
        self.hide()
        return False
    
    def search(self, word, lang):
        self.word = word
        self.lang = lang
        Worker(self.view, word, lang).start()
        #gtk.timeout_add(10000, self._auto_close)
    
    def positionWindow(self):
        self.realize()
        gtk.gdk.flush()
        (ourWidth, outHeight) = (self.window.get_geometry())[2:4]

        self.widget.realize()
        (entryX, entryY) = self.widget.window.get_origin()
        (entryWidth,entryHeight) = (self.widget.window.get_geometry())[2:4]

        screenHeight = gtk.gdk.screen_height()
        screenWidth = gtk.gdk.screen_width()

        if entryX + ourWidth < screenWidth:
            newX = entryX
        else:
            newX = (entryX + entryWidth) - outWidth
        if entryY + entryHeight + outHeight < screenHeight:
            newY = entryY + entryHeight
        else:
            newY = entryY - outHeight
        self.move(newX, newY)

class GDickApplet(gnome.applet.Applet):
    def __init__(self):
        self.__gobject_init__()

    def init(self):
        self.x = self.y = 0
        self.w = 300
        self.h = 300
        self.ref_count = 1
        
        entry = gtk.Entry()
        entry.connect("activate", self.entry_cb)
        """
        self.client.conf.notify_add("/apps/gdick/entry_width", self.on_gconf_entry_width_key_changed, entry)
        entry_width = self.client.conf.get_int("/apps/gdick/entry_width")
        if not entry_width:
            self.client.conf.set_int("/apps/gdick/entry_width", 20)
        l = entry.get_layout()
        entry.set_size_request((entry_width * entry.get_layout_offsets()[0]) + l.get_pixel_size()[0], -1)
        """
        
        button = gtk.Button("search")
        button.connect("button-press-event", self.button_press_cb)
        button.connect("clicked", self.button_cb, entry)
        
        box = gtk.HBox(spacing=3)
        box.drag_dest_set(gtk.DEST_DEFAULT_ALL,
                           [('STRING',0,0),('text/plain',0,0)],
                           gtk.gdk.ACTION_COPY)
        box.connect('drag-data-received', self.drop_cb)
        box.add(entry)
        box.pack_end(button, gtk.FALSE)

        self.add(box)
        self.setup_menu_from_file(None, "GNOME_GDickApplet.xml",
                                  None, [("Pref", self.openPrefs)])
        self.show_all()

        self.popup = PopupViewer(entry)
        return gtk.TRUE

    def openPrefs(self, ui, verb):
        print "hey~"
    
    def on_gconf_entry_width_key_changed(self, client, cnxn_id, entry, widget):
        l = widget.get_layout()
        widget.set_size_request((int(entry.value.to_string()) * widget.get_layout_offsets()[0]) + l.get_pixel_size()[0], -1)
    
    def drop_cb(self, widget, context, x, y, data, info, timestamp):
        if data and data.format == 8:
            self.search(data.data)
        context.finish(gtk.TRUE,gtk.FALSE, timestamp)
    
    def entry_cb(self, widget):
        self.search(widget.get_text())
    
    def button_cb(self, widget, entry):
        self.search(entry.get_text())

    def button_press_cb(self, widget, event):
        if event.button == 3 or event.button == 2:
            self.emit("button_press_event",event)
            return gtk.FALSE

    def search(self, word):
        self.popup.search(word, 'en')
        self.popup.resize(300, 150)
        self.popup.positionWindow()
        self.popup.show_all()

gobject.type_register(GDickApplet)

def factory(applet, iid):
    gtk.timeout_add(33, sleeper)
    return applet.init()

gnome.applet.bonobo_factory("OAFIID:GNOME_GDick_Factory",
                            GDickApplet.__gtype__,
                            "gdick", "0", factory)
@


1.10
log
@*** empty log message ***
@
text
@d21 4
a24 2
        
        self.view = DictResultViewer.DictResultViewer()
d28 2
d32 1
d35 6
a40 1
        self.view.set_header(hbox)
d43 2
d47 2
a48 1
        self.add(scrw)
@


1.9
log
@*** empty log message ***
@
text
@d13 1
a13 1
from gdick import DictResultViewer
d25 1
d27 1
d36 11
d53 2
@


1.8
log
@*** empty log message ***
@
text
@a19 1

d23 7
d31 1
d34 5
a38 1

d41 2
a42 1

@


1.7
log
@*** empty log message ***
@
text
@d17 1
a17 1
    def __init__(self):
d21 2
d27 1
a27 1
    
d29 23
a51 1
        Worker(self,view, word, lang)
a57 2
        self.popup = PopupViewer()

d90 2
a91 1
        
d120 1
@


1.6
log
@*** empty log message ***
@
text
@d13 15
a27 2
from gdick import gdick
from gdick.Utils import sleeper
d34 1
a34 4
        self.client = gdick.GDick()
        self.client.win.hide_all()
        self.client.win.connect("delete-event", self.delete_cb)
        self.client.glade.signal_connect("on_quit_activate", self.delete_cb)
d43 1
d50 2
a51 1

a82 10
    def delete_cb(self, widget, *args):
        self.ref_count -= 1
        if self.ref_count != 0:
            self.x, self.y = self.client.win.get_position()
            self.w, self.h = self.client.win.get_size()
            self.client.win.hide_all()
            return gtk.TRUE
        else:
            return gtk.FALSE

d95 3
a97 8
        if self.ref_count == 1:
            self.ref_count += 1
            self.client.win.show_all()
            self.client.win.resize(self.w,self.h)
            self.client.win.move(self.x,self.y)
        else:
            self.client.win.show_all()
        self.client.search(word)
@


1.5
log
@*** empty log message ***
@
text
@d24 1
a24 1
        self.client.xml.signal_connect("on_quit_activate", self.delete_cb)
@


1.4
log
@*** empty log message ***
@
text
@d53 2
d58 3
@


1.3
log
@*** empty log message ***
@
text
@d8 1
d10 1
d16 13
a28 8
class GDickApplet(gtk.HBox):
    def __init__(self, applet):
        self.dict = gdick.GDick()
        self.dict.win.hide_all()
        self.dict.win.connect("delete-event", self.delete_cb)
        self.dict.xml.signal_connect("on_quit_activate", self.delete_cb)

        self.x = self.y = self.w = self.h = 0
a29 6

        gtk.HBox.__init__(self, spacing=3)
        self.drag_dest_set(gtk.DEST_DEFAULT_ALL,
                           [('STRING',0,0),('text/plain',0,0)],
                           gtk.gdk.ACTION_COPY)
        self.connect('drag-data-received', self.drop_cb)
d32 3
a34 3
        self.dict.conf.notify_add("/apps/gdick/entry_width",
                                  self.on_gconf_entry_width_key_changed, entry)
        entry_width = self.dict.conf.get_string("/apps/gdick/entry_width")
d36 1
a36 1
            self.dict.conf.set_string("/apps/gdick/entry_width", "20")
d38 1
a38 3
        entry.set_size_request((int(entry_width) * entry.get_layout_offsets()[0]) + l.get_pixel_size()[0], -1)
        entry.connect("activate", self.entry_cb)
        self.add(entry)
d41 1
a41 1
        button.connect("button-press-event", self.button_press_cb, applet)
d43 8
a50 1
        self.pack_end(button, gtk.FALSE)
d52 8
a59 3
    def on_gconf_entry_width_key_changed(self, client, cnxn_id, entry, args):
        l = args.get_layout()
        args.set_size_request((int(entry.value.to_string()) * args.get_layout_offsets()[0]) + l.get_pixel_size()[0], -1)
d69 3
a71 3
            self.x, self.y = self.dict.win.get_position()
            self.w, self.h = self.dict.win.get_size()
            self.dict.win.hide_all()
d82 1
a82 1
    def button_press_cb(self, widget, event, applet):
d84 1
a84 1
            applet.emit("button_press_event",event)
d90 3
a92 6
            self.dict.win.show_all()
            if self.w == 0 or self.h == 0:
                self.w = 300
                self.h = 300
            self.dict.win.resize(self.w,self.h)
            self.dict.win.move(self.x,self.y)
d94 4
a97 2
            self.dict.win.show_all()
        self.dict.search(word)
d99 1
a99 1
def dict_factory(applet, iid):
d101 1
a101 4
    d = GDickApplet(applet)
    applet.add(d)
    applet.show_all()
    return gtk.TRUE
d104 2
a105 2
                            gnome.applet.Applet.__gtype__,
                            "gdick", "0", dict_factory)
@


1.2
log
@resize entry widget's width
@
text
@d16 8
d31 5
d37 1
a37 1
        entry.set_size_request((20 * entry.get_layout_offsets()[0]) + l.get_pixel_size()[0], -1)
a44 8
        
        self.dict = gdick.GDick()
        self.dict.win.hide_all()
        self.dict.win.connect("delete-event", self.delete_cb)
        self.dict.xml.signal_connect("on_quit_activate", self.delete_cb)
        
        self.x = self.y = self.w = self.h = 0
        self.ref_count = 1
d46 4
@


1.1
log
@Initial revision
@
text
@d23 2
@


1.1.1.1
log
@init
@
text
@@
