hggtk/hgemail.py
author Germán Póo-Caamaño <gpoo@calcifer.org>
Mon, 21 Jul 2008 11:51:12 -0400
changeset 1182 cbe418752174
parent 1120 08eca2607f01
permissions -rw-r--r--
hggtk: get rid of close buttons
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     1
#
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
     2
# hgemail.py - TortoiseHg's dialog for sending patches via email
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     3
#
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
     4
# Copyright (C) 2007 Steve Borho <steve@borho.org>
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     5
# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     6
#
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     7
237
8d11dce5ca20 hggtk: refresh target directory after updating
TK Soh <teekaysoh@yahoo.com>
parents: 219
diff changeset
     8
import os
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     9
import sys
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    10
import gtk
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    11
import pango
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    12
import shelve
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    13
import shlib
484
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
    14
from tempfile import mkstemp
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    15
from dialog import *
752
91514d09da6a hggtk/hgemail: more robust extension detection algorithm
Steve Borho <steve@borho.org>
parents: 678
diff changeset
    16
from mercurial import hg, ui, extensions
1091
e8e11990a43e hggtk: RepoError is no longer in mercurial.hg as of Mercurial 1.0
TK Soh <teekaysoh@yahoo.com>
parents: 1075
diff changeset
    17
from mercurial.repo import RepoError
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    18
from thgconfig import ConfigDialog
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    19
from hgcmd import CmdDialog
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    20
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    21
class EmailDialog(gtk.Window):
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    22
    """ Send patches or bundles via email """
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    23
    def __init__(self, root='', revargs=[]):
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    24
        """ Initialize the Dialog """
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    25
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    26
495
840188cc6fbc hggtk: Use hg.ico as default icon for dialogs
Steve Borho <steve@borho.org>
parents: 490
diff changeset
    27
        shlib.set_tortoise_icon(self, 'hg.ico')
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    28
        self.root = root
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    29
        self.revargs = revargs
241
154126b6a066 hggtk/update: provide heads & tip on rev selection
TK Soh <teekaysoh@yahoo.com>
parents: 237
diff changeset
    30
        
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    31
        self.tbar = gtk.Toolbar()
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    32
        self.tips = gtk.Tooltips()
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    33
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    34
        tbuttons = [
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    35
                self._toolbutton(gtk.STOCK_GOTO_LAST, 'Send',
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    36
                                 self._on_send_clicked,
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    37
                                 'Send email(s)'),
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    38
                gtk.SeparatorToolItem(),
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    39
                self._toolbutton(gtk.STOCK_PREFERENCES, 'configure',
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    40
                                 self._on_conf_clicked,
1182
cbe418752174 hggtk: get rid of close buttons
Germán Póo-Caamaño <gpoo@calcifer.org>
parents: 1120
diff changeset
    41
                                 'Configure email settings')
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    42
            ]
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    43
        for btn in tbuttons:
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
    44
            self.tbar.insert(btn, -1)
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    45
        mainvbox = gtk.VBox()
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    46
        self.add(mainvbox)
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    47
        mainvbox.pack_start(self.tbar, False, False, 2)
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    48
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    49
        # set dialog title
530
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    50
        if revargs[0] in ('--outgoing', '-o'):
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    51
            self.set_title('Email outgoing changes')
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    52
        elif revargs[0] in ('--rev', '-r'):
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    53
            self.set_title('Email revision(s) ' + ' '.join(revargs[1:]))
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    54
        else:
6e0c1f2cde75 hggtk/hgemail: adjust title based on changes being mailed
Steve Borho <steve@borho.org>
parents: 524
diff changeset
    55
            self.set_title('Email Mercurial Patches')
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
    56
        self.set_default_size(630, 400)
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    57
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    58
        hbox = gtk.HBox()
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    59
        envframe = gtk.Frame('Envelope')
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    60
        flagframe = gtk.Frame('Options')
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    61
        hbox.pack_start(envframe, True, True, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    62
        hbox.pack_start(flagframe, False, False, 4)
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
    63
        mainvbox.pack_start(hbox, False, True, 4)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    64
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    65
        vbox = gtk.VBox()
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    66
        envframe.add(vbox)
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    67
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    68
        # To: combo box
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    69
        hbox = gtk.HBox()
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    70
        self._tolist = gtk.ListStore(str)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    71
        self._tobox = gtk.ComboBoxEntry(self._tolist, 0)
977
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    72
        lbl = gtk.Label('To:')
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    73
        lbl.set_property("width-chars", 5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    74
        lbl.set_alignment(1.0, 0.5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    75
        hbox.pack_start(lbl, False, False, 4)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    76
        hbox.pack_start(self._tobox, True, True, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    77
        vbox.pack_start(hbox, False, False, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    78
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    79
        # Cc: combo box
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    80
        hbox = gtk.HBox()
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    81
        self._cclist = gtk.ListStore(str)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    82
        self._ccbox = gtk.ComboBoxEntry(self._cclist, 0)
977
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    83
        lbl = gtk.Label('Cc:')
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    84
        lbl.set_property("width-chars", 5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    85
        lbl.set_alignment(1.0, 0.5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    86
        hbox.pack_start(lbl, False, False, 4)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    87
        hbox.pack_start(self._ccbox, True, True, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    88
        vbox.pack_start(hbox, False, False, 4)
333
71721a2057c6 hggtk: revise update dialog
TK Soh <teekaysoh@yahoo.com>
parents: 288
diff changeset
    89
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    90
        # From: combo box
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    91
        hbox = gtk.HBox()
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
    92
        self._fromlist = gtk.ListStore(str)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    93
        self._frombox = gtk.ComboBoxEntry(self._fromlist, 0)
977
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    94
        lbl = gtk.Label('From:')
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    95
        lbl.set_property("width-chars", 5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    96
        lbl.set_alignment(1.0, 0.5)
b5fc8cec07f9 hggtk/hgemail: align labels of envelope fields
TK Soh <teekaysoh@yahoo.com>
parents: 976
diff changeset
    97
        hbox.pack_start(lbl, False, False, 4)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    98
        hbox.pack_start(self._frombox, True, True, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
    99
        vbox.pack_start(hbox, False, False, 4)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   100
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   101
        vbox = gtk.VBox()
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   102
        flagframe.add(vbox)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   103
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   104
        self.tooltips = gtk.Tooltips()
517
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   105
        self._normal = gtk.RadioButton(None, "Send changesets as HG patches")
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   106
        vbox.pack_start(self._normal, True, True, 4)
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   107
        self.tooltips.set_tip(self._normal, 
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   108
                'HG patches (as generated by export command) are compatible'
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   109
                ' with most patch programs.  They include a header which'
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   110
                ' contains the most important changeset metadata.')
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   111
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   112
        self._git = gtk.RadioButton(self._normal,
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   113
                "Use extended (git) patch format")
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   114
        vbox.pack_start(self._git, True, True, 4)
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   115
        self.tooltips.set_tip(self._git, 
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   116
                'Git patches can describe binary files, copies, and'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   117
                ' permission changes, but recipients may not be able to'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   118
                ' use them if they are not using git or Mercurial.')
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   119
517
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   120
        self._plain = gtk.RadioButton(self._normal,
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   121
                "Plain, do not prepend HG header")
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   122
        vbox.pack_start(self._plain, True, True, 4)
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   123
        self.tooltips.set_tip(self._plain, 
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   124
                'Stripping Mercurial header removes username and parent'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   125
                ' information.  Only useful if recipient is not using'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   126
                ' Mercurial (and does not like to see the headers).')
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   127
517
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   128
        self._bundle = gtk.RadioButton(self._normal,
5fc496cfdc5b hggtk/email: switch checkboxes to radiobuttons
Steve Borho <steve@borho.org>
parents: 516
diff changeset
   129
                "Send single binary bundle, not patches")
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   130
        vbox.pack_start(self._bundle, True, True, 4)
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   131
        self.tooltips.set_tip(self._bundle, 
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   132
                'Bundles store complete changesets in binary form.'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   133
                ' Upstream users can pull from them. This is the safest'
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   134
                ' way to send changes to recipient Mercurial users.')
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   135
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   136
        vbox = gtk.VBox()
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   137
        hbox = gtk.HBox()
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   138
        self._subjlist = gtk.ListStore(str)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   139
        self._subjbox = gtk.ComboBoxEntry(self._subjlist, 0)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   140
        hbox.pack_start(gtk.Label('Subject:'), False, False, 4)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   141
        hbox.pack_start(self._subjbox, True, True, 4)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   142
        vbox.pack_start(hbox, False, False, 4)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   143
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   144
        self.descview = gtk.TextView(buffer=None)
484
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   145
        self.descview.set_editable(True)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   146
        self.descview.modify_font(pango.FontDescription("Monospace"))
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   147
        self.descbuffer = self.descview.get_buffer()
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   148
        scrolledwindow = gtk.ScrolledWindow()
978
c2ab059f1f93 hggtk/hgemail: add shadow around patch description window
TK Soh <teekaysoh@yahoo.com>
parents: 977
diff changeset
   149
        scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   150
        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   151
        scrolledwindow.add(self.descview)
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   152
        frame = gtk.Frame('Patch Series (Bundle) Description')
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   153
        frame.set_border_width(4)
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   154
        vbox.pack_start(scrolledwindow, True, True, 4)
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   155
        vbox.set_border_width(4)
524
d7752204a49c hggtk: fix tooltips on Windows
Steve Borho <steve@borho.org>
parents: 518
diff changeset
   156
        eventbox = gtk.EventBox()
d7752204a49c hggtk: fix tooltips on Windows
Steve Borho <steve@borho.org>
parents: 518
diff changeset
   157
        eventbox.add(vbox)
d7752204a49c hggtk: fix tooltips on Windows
Steve Borho <steve@borho.org>
parents: 518
diff changeset
   158
        frame.add(eventbox)
d7752204a49c hggtk: fix tooltips on Windows
Steve Borho <steve@borho.org>
parents: 518
diff changeset
   159
        self.tooltips.set_tip(eventbox, 
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   160
                'Patch series description is sent in initial summary'
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   161
                ' email with [PATCH 0 of N] subject.  It should describe'
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   162
                ' the effects of the entire patch series.  When emailing'
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   163
                ' a bundle, these fields make up the message subject and body.'
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   164
                ' The description field is unused when sending a single patch')
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   165
        mainvbox.pack_start(frame, True, True, 4)
500
5b9d70009791 hggtk/email: Add tooltips
Steve Borho <steve@borho.org>
parents: 499
diff changeset
   166
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   167
        self.connect('map_event', self._on_window_map_event)
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   168
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   169
    def _toolbutton(self, stock, label, handler, tip):
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   170
        tbutton = gtk.ToolButton(stock)
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
   171
        tbutton.set_label(label)
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   172
        tbutton.set_tooltip(self.tips, tip)
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   173
        tbutton.connect('clicked', handler)
496
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
   174
        return tbutton
b0ba764521e6 hggtk/email: use toolbar for send, prefs
Steve Borho <steve@borho.org>
parents: 495
diff changeset
   175
        
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   176
    def _on_window_map_event(self, event, param):
678
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   177
        self._refresh(True)
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   178
678
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   179
    def _refresh(self, initial):
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   180
        def fill_history(history, vlist, cpath):
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   181
            vlist.clear()
1075
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   182
            if cpath not in history.get_keys():
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   183
                return
1075
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   184
            for v in history.get_value(cpath):
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   185
                vlist.append([v])
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   186
1055
e8c481854f07 hggtk/hgemail: use Settings class for history management
TK Soh <teekaysoh@yahoo.com>
parents: 978
diff changeset
   187
        history = shlib.Settings('config_history')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   188
        try:
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   189
            repo = hg.repository(ui.ui(), path=self.root)
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   190
            self.repo = repo
1091
e8e11990a43e hggtk: RepoError is no longer in mercurial.hg as of Mercurial 1.0
TK Soh <teekaysoh@yahoo.com>
parents: 1075
diff changeset
   191
        except RepoError:
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   192
            self.repo = None
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   193
            return
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   194
752
91514d09da6a hggtk/hgemail: more robust extension detection algorithm
Steve Borho <steve@borho.org>
parents: 678
diff changeset
   195
        for name, module in extensions.extensions():
91514d09da6a hggtk/hgemail: more robust extension detection algorithm
Steve Borho <steve@borho.org>
parents: 678
diff changeset
   196
            if name == 'patchbomb':
91514d09da6a hggtk/hgemail: more robust extension detection algorithm
Steve Borho <steve@borho.org>
parents: 678
diff changeset
   197
                break
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   198
        else:
1120
08eca2607f01 hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents: 1091
diff changeset
   199
            error_dialog(self, 'Email not enabled',
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   200
                    'You must enable the patchbomb extension to use this tool')
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   201
            self.response(gtk.RESPONSE_CANCEL)
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   202
678
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   203
        if initial:
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   204
            # Only zap these fields at startup
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   205
            self._tobox.child.set_text(repo.ui.config('email', 'to', ''))
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   206
            self._ccbox.child.set_text(repo.ui.config('email', 'cc', ''))
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   207
            self._frombox.child.set_text(repo.ui.config('email', 'from', ''))
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   208
            self._subjbox.child.set_text(repo.ui.config('email', 'subject', ''))
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   209
        fill_history(history, self._tolist, 'email.to')
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   210
        fill_history(history, self._cclist, 'email.cc')
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   211
        fill_history(history, self._fromlist, 'email.from')
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   212
        fill_history(history, self._subjlist, 'email.subject')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   213
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   214
        # See if user has set flags in defaults.email
503
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   215
        self._git.set_sensitive(True)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   216
        self._bundle.set_sensitive(True)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   217
        self._plain.set_sensitive(True)
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   218
        defaults = repo.ui.config('defaults', 'email', '').split()
503
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   219
        for flag in defaults:
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   220
            if flag in ('-g', '--git'):
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   221
                self._git.set_active(True)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   222
                self._git.set_sensitive(False)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   223
            if flag in ('-b', '--bundle'):
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   224
                self._bundle.set_active(True)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   225
                self._bundle.set_sensitive(False)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   226
            if flag in ('--plain'):
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   227
                self._plain.set_active(True)
398723d2bb78 hggtk/email: grey out options overriden by hgrc
Steve Borho <steve@borho.org>
parents: 500
diff changeset
   228
                self._plain.set_sensitive(False)
333
71721a2057c6 hggtk: revise update dialog
TK Soh <teekaysoh@yahoo.com>
parents: 288
diff changeset
   229
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   230
    def _on_conf_clicked(self, button):
516
16a3c8dc9c1d hggtk/thgconfig: move focus_field and new_path into class methods
Steve Borho <steve@borho.org>
parents: 503
diff changeset
   231
        dlg = ConfigDialog(self.root, False)
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   232
        dlg.show_all()
516
16a3c8dc9c1d hggtk/thgconfig: move focus_field and new_path into class methods
Steve Borho <steve@borho.org>
parents: 503
diff changeset
   233
        dlg.focus_field('email.from')
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   234
        dlg.run()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   235
        dlg.hide()
678
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   236
        self._refresh(False)
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   237
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   238
    def _on_send_clicked(self, button):
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   239
        def record_new_value(cpath, history, newvalue):
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   240
            if not newvalue: return
1075
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   241
            if cpath not in history.get_keys():
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   242
                history.set_value(cpath, [])
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   243
            elif newvalue in history.get_value(cpath):
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   244
                history.get_value(cpath).remove(newvalue)
896539c063a7 hggtk/shlib: revise Settings class
TK Soh <teekaysoh@yahoo.com>
parents: 1055
diff changeset
   245
            history.get_value(cpath).insert(0, newvalue)
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   246
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   247
        totext = self._tobox.child.get_text()
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   248
        cctext = self._ccbox.child.get_text()
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   249
        fromtext = self._frombox.child.get_text()
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   250
        subjtext = self._subjbox.child.get_text()
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   251
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   252
        if not totext:
1120
08eca2607f01 hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents: 1091
diff changeset
   253
            info_dialog(self, 'Info required', 'You must specify a recipient')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   254
            self._tobox.grab_focus()
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   255
            return
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   256
        if not fromtext:
1120
08eca2607f01 hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents: 1091
diff changeset
   257
            info_dialog(self, 'Info required', 'You must specify a sender address')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   258
            self._frombox.grab_focus()
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   259
            return
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   260
        if not self.repo:
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   261
            return
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   262
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   263
        if self.repo.ui.config('email', 'method', 'smtp') == 'smtp':
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   264
            if not self.repo.ui.config('smtp', 'host'):
1120
08eca2607f01 hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents: 1091
diff changeset
   265
                info_dialog(self, 'Info required', 'You must configure SMTP')
516
16a3c8dc9c1d hggtk/thgconfig: move focus_field and new_path into class methods
Steve Borho <steve@borho.org>
parents: 503
diff changeset
   266
                dlg = ConfigDialog(self.root, False)
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   267
                dlg.show_all()
516
16a3c8dc9c1d hggtk/thgconfig: move focus_field and new_path into class methods
Steve Borho <steve@borho.org>
parents: 503
diff changeset
   268
                dlg.focus_field('smtp.host')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   269
                dlg.run()
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   270
                dlg.hide()
678
c913a50de274 hggtk/hgemail: do not overwrite entry fields on refresh
Steve Borho <steve@borho.org>
parents: 530
diff changeset
   271
                self._refresh(False)
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   272
                return
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   273
1055
e8c481854f07 hggtk/hgemail: use Settings class for history management
TK Soh <teekaysoh@yahoo.com>
parents: 978
diff changeset
   274
        history = shlib.Settings('config_history')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   275
        record_new_value('email.to', history, totext)
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   276
        record_new_value('email.cc', history, cctext)
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   277
        record_new_value('email.from', history, fromtext)
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   278
        record_new_value('email.subject', history, subjtext)
1055
e8c481854f07 hggtk/hgemail: use Settings class for history management
TK Soh <teekaysoh@yahoo.com>
parents: 978
diff changeset
   279
        history.write()
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   280
485
b92a968de9d5 hggtk/email: remove --noninteractive
Steve Borho <steve@borho.org>
parents: 484
diff changeset
   281
        cmdline = ['hg', 'email', '-f', fromtext, '-t', totext, '-c', cctext]
490
d10068191848 hggtk/email: command line fixes
Steve Borho <steve@borho.org>
parents: 489
diff changeset
   282
        cmdline += ['--repository', self.repo.root]
518
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   283
        if subjtext:
b1f379b7c1c7 hggtk/email: add subject entry with history
Steve Borho <steve@borho.org>
parents: 517
diff changeset
   284
            cmdline += ['--subject', subjtext]
490
d10068191848 hggtk/email: command line fixes
Steve Borho <steve@borho.org>
parents: 489
diff changeset
   285
        if self._bundle.get_active():
d10068191848 hggtk/email: command line fixes
Steve Borho <steve@borho.org>
parents: 489
diff changeset
   286
            cmdline += ['--bundle']
d10068191848 hggtk/email: command line fixes
Steve Borho <steve@borho.org>
parents: 489
diff changeset
   287
            if '--outgoing' in self.revargs:
d10068191848 hggtk/email: command line fixes
Steve Borho <steve@borho.org>
parents: 489
diff changeset
   288
                self.revargs.remove('--outgoing')
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   289
        elif self._plain.get_active():  cmdline += ['--plain']
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   290
        elif self._git.get_active():    cmdline += ['--git']
484
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   291
        start = self.descbuffer.get_start_iter()
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   292
        end = self.descbuffer.get_end_iter()
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   293
        desc = self.descbuffer.get_text(start, end)
489
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   294
        try:
484
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   295
            fd, tmpfile = mkstemp(prefix="thg_emaildesc_")
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   296
            os.write(fd, desc)
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   297
            os.close(fd)
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   298
            cmdline += ['--desc', tmpfile]
489
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   299
            cmdline.extend(self.revargs)
484
6c0c94716589 hggtk/email: pass patch description to --desc
Steve Borho <steve@borho.org>
parents: 480
diff changeset
   300
489
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   301
            dlg = CmdDialog(cmdline)
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   302
            dlg.show_all()
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   303
            dlg.run()
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   304
            dlg.hide()
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   305
        finally:
93b985eb0700 hggtk/email: somewhat proper behavior
Steve Borho <steve@borho.org>
parents: 485
diff changeset
   306
            os.unlink(tmpfile)
480
111b84186cef hggtk/email: fill in refresh and send methods
Steve Borho <steve@borho.org>
parents: 473
diff changeset
   307
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   308
def run(root='', **opts):
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   309
    # In most use cases, this dialog will be launched by other
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   310
    # hggtk tools like glog and synch.  It's not expected to be
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   311
    # used from hgproc or the command line.  I leave this path in
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   312
    # place for testing purposes.
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   313
    dialog = EmailDialog(root, ['tip'])
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   314
    dialog.show_all()
976
fce4f4d4fe97 hggtk/hgemail: new window style, add tooltips
Steve Borho <steve@borho.org>
parents: 752
diff changeset
   315
    dialog.connect('destroy', gtk.main_quit)
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   316
    gtk.gdk.threads_init()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   317
    gtk.gdk.threads_enter()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   318
    gtk.main()
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   319
    gtk.gdk.threads_leave()
215
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   320
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   321
if __name__ == "__main__":
c87297cb9273 hggtk: add update dialog
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   322
    import sys
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   323
    opts = {}
473
6cf0b67cf269 hggtk/email: preview of email dialog
Steve Borho <steve@borho.org>
parents: 455
diff changeset
   324
    opts['root'] = len(sys.argv) > 1 and sys.argv[1] or os.getcwd()
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 395
diff changeset
   325
    run(**opts)