SF.net SVN: mahogany:[7522] trunk/M

[email protected] Wed, 06 Aug 2008 00:30:50 +0000
Newsgroups gmane.mail.mahogany.cvs
Message-ID <[email protected]>
Revision: 7522
          http://mahogany.svn.sourceforge.net/mahogany/?rev=7522&view=rev
Author:   vadz
Date:     2008-08-06 00:30:48 +0000 (Wed, 06 Aug 2008)

Log Message:
-----------
replace PGP signing controls with a simple sign toggle button

Modified Paths:
--------------
    trunk/M/include/Moptions.h
    trunk/M/include/gui/wxComposeView.h
    trunk/M/include/gui/wxMenuDefs.h
    trunk/M/res/M.rc
    trunk/M/src/classes/Moptions.cpp
    trunk/M/src/gui/wxComposeView.cpp
    trunk/M/src/gui/wxMenuDefs.cpp
    trunk/M/src/gui/wxOptionsDlg.cpp

Added Paths:
-----------
    trunk/M/res/pgp_nosign.bmp
    trunk/M/res/pgp_sign.bmp

Modified: trunk/M/include/Moptions.h
===================================================================
--- trunk/M/include/Moptions.h	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/include/Moptions.h	2008-08-06 00:30:48 UTC (rev 7522)
@@ -223,7 +223,6 @@
 extern const MOption MP_COMPOSE_USE_SIGNATURE;
 extern const MOption MP_COMPOSE_SIGNATURE;
 extern const MOption MP_COMPOSE_USE_SIGNATURE_SEPARATOR;
-extern const MOption MP_COMPOSE_USE_PGP;
 extern const MOption MP_COMPOSE_PGPSIGN;
 extern const MOption MP_COMPOSE_PGPSIGN_AS;
 extern const MOption MP_COMPOSE_USE_XFACE;
@@ -860,8 +859,6 @@
 #define   MP_COMPOSE_SIGNATURE_NAME      "SignatureFile"
 /// use "-- " to separate signature in composition?
 #define   MP_COMPOSE_USE_SIGNATURE_SEPARATOR_NAME   "ComposeSeparateSignature"
-/// show PGP-related controls in the composer?
-#define   MP_COMPOSE_USE_PGP_NAME   "ShowPGPControls"
 /// sign messages with PGP?
 #define   MP_COMPOSE_PGPSIGN_NAME   "SignWithPGP"
 /// the user name to sign messages with PGP as
@@ -1730,8 +1727,6 @@
 #endif
 /// use "-- " to separate signature in composition?
 #define   MP_COMPOSE_USE_SIGNATURE_SEPARATOR_DEFVAL   1
-/// show PGP-related controls in the composer?
-#define   MP_COMPOSE_USE_PGP_DEFVAL   1L
 /// sign messages with PGP?
 #define   MP_COMPOSE_PGPSIGN_DEFVAL   0L
 /// the user name to sign messages with PGP as

Modified: trunk/M/include/gui/wxComposeView.h
===================================================================
--- trunk/M/include/gui/wxComposeView.h	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/include/gui/wxComposeView.h	2008-08-06 00:30:48 UTC (rev 7522)
@@ -37,6 +37,9 @@
 class SendMessage;
 class MessageEditor;
 
+class IsReplyButton;
+class PGPSignButton;
+
 class WXDLLIMPEXP_FWD_CORE wxChoice;
 class WXDLLIMPEXP_FWD_CORE wxMenuItem;
 class WXDLLIMPEXP_FWD_BASE wxProcess;
@@ -100,7 +103,10 @@
       NonInteractive = 0,
 
       /// If this flag is specified, we can ask questions to the user
-      Interactive = 1
+      Interactive = 1,
+
+      /// If this flag is specified, the message is going to be sent right now
+      ForSending = 2
    };
 
 
@@ -291,6 +297,11 @@
    void SetTextAppearance(wxTextCtrl *text);
 
    /**
+      Return true if we're configured to cryptographically sign the message.
+    */
+  bool IsPGPSigningEnabled() const;
+
+   /**
       Return true if we're a reply to another message.
 
       This doesn't simply check whether we have an original message but checks
@@ -299,6 +310,11 @@
    bool IsInReplyTo() const;
 
    /**
+      Toggles the value returned by IsPGPSigningEnabled().
+    */
+   void TogglePGPSigning();
+
+   /**
       Configures whether this message is a reply to another one.
 
       This is used for handling the menu command "Set if this is a reply" and
@@ -413,7 +429,7 @@
      @param flags by default contains Interactive flag
      @return SendMessage object to be deleted by the caller
    */
-   SendMessage *BuildMessage(int flags = Interactive) const;
+   SendMessage *BuildMessage(int flags = Interactive | ForSending) const;
 
    /**
      Return the message to be sent as a draft: it simply adds a few additional
@@ -479,12 +495,6 @@
    /// get the options (for MessageEditor)
    const Options& GetOptions() const { return m_options; }
 
-   /// update UI handler for "sign as" control
-   void OnUpdateUISignAs(wxUpdateUIEvent& event)
-   {
-      event.Enable( m_chkPGPSign->GetValue() );
-   }
-
    /// the profile (never NULL)
    Profile *m_Profile;
 
@@ -533,11 +543,11 @@
       /// the editor where the message is really edited
    MessageEditor *m_editor;
 
-      /// checkbox enabling cryptographically signing the message
-   wxCheckBox *m_chkPGPSign;
+      /// button toggling In-Reply-To header
+   IsReplyButton *m_btnIsReply;
 
-      /// the user name to use for cryptographically signing the message
-   wxTextCtrl *m_txtPGPSignAs;
+      /// button enabling cryptographically signing the message
+   PGPSignButton *m_btnPGPSign;
 
    //@}
 

Modified: trunk/M/include/gui/wxMenuDefs.h
===================================================================
--- trunk/M/include/gui/wxMenuDefs.h	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/include/gui/wxMenuDefs.h	2008-08-06 00:30:48 UTC (rev 7522)
@@ -301,6 +301,7 @@
    WXMENU_COMPOSE_EXTEDIT,
    WXMENU_COMPOSE_SEP4,
    WXMENU_COMPOSE_IN_REPLY_TO,
+   WXMENU_COMPOSE_PGP_SIGN,
    WXMENU_COMPOSE_CUSTOM_HEADERS,
    WXMENU_COMPOSE_END = WXMENU_COMPOSE_CUSTOM_HEADERS,
 

Modified: trunk/M/res/M.rc
===================================================================
--- trunk/M/res/M.rc	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/res/M.rc	2008-08-06 00:30:48 UTC (rev 7522)
@@ -177,8 +177,11 @@
 msg_copy	CURSOR	"msg_copy.cur"
 msg_move	CURSOR	"msg_move.cur"
 
+// composer toggle button icons
+pgp_sign	BITMAP	"pgp_sign.bmp"
+pgp_nosign	BITMAP	"pgp_nosign.bmp"
 
-// PGP icons
+// PGP icons (48x48)
 pgpsig_good	BITMAP  "sig_good.bmp"
 pgpsig_exp	BITMAP	"sig_unk.bmp"
 pgpsig_untrust	BITMAP	"sig_unk.bmp"


Property changes on: trunk/M/res/pgp_nosign.bmp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: trunk/M/res/pgp_sign.bmp
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: trunk/M/src/classes/Moptions.cpp
===================================================================
--- trunk/M/src/classes/Moptions.cpp	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/src/classes/Moptions.cpp	2008-08-06 00:30:48 UTC (rev 7522)
@@ -284,7 +284,6 @@
 const MOption MP_COMPOSE_USE_SIGNATURE;
 const MOption MP_COMPOSE_SIGNATURE;
 const MOption MP_COMPOSE_USE_SIGNATURE_SEPARATOR;
-const MOption MP_COMPOSE_USE_PGP;
 const MOption MP_COMPOSE_PGPSIGN;
 const MOption MP_COMPOSE_PGPSIGN_AS;
 const MOption MP_COMPOSE_USE_XFACE;
@@ -708,7 +707,6 @@
     DEFINE_OPTION(MP_COMPOSE_USE_SIGNATURE),
     DEFINE_OPTION(MP_COMPOSE_SIGNATURE),
     DEFINE_OPTION(MP_COMPOSE_USE_SIGNATURE_SEPARATOR),
-    DEFINE_OPTION(MP_COMPOSE_USE_PGP),
     DEFINE_OPTION(MP_COMPOSE_PGPSIGN),
     DEFINE_OPTION(MP_COMPOSE_PGPSIGN_AS),
     DEFINE_OPTION(MP_COMPOSE_USE_XFACE),

Modified: trunk/M/src/gui/wxComposeView.cpp
===================================================================
--- trunk/M/src/gui/wxComposeView.cpp	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/src/gui/wxComposeView.cpp	2008-08-06 00:30:48 UTC (rev 7522)
@@ -122,7 +122,6 @@
 extern const MOption MP_COMPOSE_PGPSIGN_AS;
 extern const MOption MP_COMPOSE_SHOW_FROM;
 extern const MOption MP_COMPOSE_TO;
-extern const MOption MP_COMPOSE_USE_PGP;
 extern const MOption MP_CURRENT_IDENTITY;
 extern const MOption MP_CVIEW_BGCOLOUR;
 extern const MOption MP_CVIEW_COLOUR_HEADERS;
@@ -526,61 +525,131 @@
 };
 
 // ----------------------------------------------------------------------------
-// wxIsReplyButton: button indicating whether this is a reply
+// ToggleIconButton: wxToggleButton with images
 // ----------------------------------------------------------------------------
 
-class wxIsReplyButton : public IconButton
+class ToggleIconButton : public IconButton
 {
 public:
-   wxIsReplyButton(wxComposeView *composer, wxWindow *parent)
+   // NB: derived class ctor must call UpdateWithoutRefresh()
+   ToggleIconButton(wxComposeView *composer,
+                    wxWindow *parent,
+                    const char *iconOn,
+                    const char *iconOff,
+                    const wxString& tooltipOn,
+                    const wxString& tooltipOff)
       : IconButton(parent, wxNullBitmap),
-        m_composer(composer)
+        m_composer(composer),
+        m_iconOn(iconOn),
+        m_iconOff(iconOff),
+        m_tooltipOn(tooltipOn),
+        m_tooltipOff(tooltipOff)
    {
-      UpdateAppearance();
-
       Connect(wxEVT_COMMAND_BUTTON_CLICKED,
-               wxCommandEventHandler(wxIsReplyButton::OnClick));
+               wxCommandEventHandler(ToggleIconButton::OnClick));
+   }
 
-      // AddHeaderEntry("In-Reply-To") is called after composer creation, so we
-      // want to update our state a bit later
-      Connect(wxEVT_IDLE, wxIdleEventHandler(wxIsReplyButton::OnIdle));
+   void Update()
+   {
+      UpdateWithoutRefresh();
+      Refresh();
    }
 
-private:
-   void UpdateAppearance()
+protected:
+   wxComposeView * const m_composer;
+
+   void UpdateWithoutRefresh()
    {
-      m_isReply = m_composer->IsInReplyTo();
+      m_isOn = DoGetValue();
 
-      SetBitmapLabel(mApplication->GetIconManager()->GetBitmap
-                     (
-                        m_isReply ? _T("tb_mail_reply") : _T("tb_mail_new")
-                     ));
-      SetToolTip(m_isReply ? _("This is a reply to another message")
-                         : _("This is a start of new thread"));
+      SetBitmapLabel(mApplication->GetIconManager()->
+                        GetBitmap(m_isOn ? m_iconOn : m_iconOff));
+      SetToolTip(m_isOn ? m_tooltipOn : m_tooltipOff);
    }
 
+private:
+   // perform the action when the button is clicked
+   virtual void DoHandleClick() = 0;
+
+   // return if we're in "on" or "off" state
+   virtual bool DoGetValue() const = 0;
+
+
    void OnClick(wxCommandEvent& /* event */)
    {
-      if ( m_composer->ConfigureInReplyTo() )
-      {
-         UpdateAppearance();
-         Refresh();
-      }
+      DoHandleClick();
+      if ( DoGetValue() != m_isOn )
+         Update();
    }
 
+   const char * const m_iconOn;
+   const char * const m_iconOff;
+
+   const wxString m_tooltipOn; 
+   const wxString m_tooltipOff; 
+
+   bool m_isOn;
+
+   DECLARE_NO_COPY_CLASS(ToggleIconButton)
+};
+
+// ----------------------------------------------------------------------------
+// IsReplyButton: button indicating whether this is a reply
+// ----------------------------------------------------------------------------
+
+class IsReplyButton : public ToggleIconButton
+{
+public:
+   IsReplyButton(wxComposeView *composer, wxWindow *parent)
+      : ToggleIconButton(composer, parent,
+                         "tb_mail_reply", "tb_mail_new",
+                        _("This is a reply to another message"),
+                        _("This is a start of new thread"))
+   {
+      // AddHeaderEntry("In-Reply-To") is called after composer creation, so we
+      // want to update our state a bit later
+      Connect(wxEVT_IDLE, wxIdleEventHandler(IsReplyButton::OnIdle));
+   }
+
+private:
+   virtual void DoHandleClick() { m_composer->ConfigureInReplyTo(); }
+   virtual bool DoGetValue() const { return m_composer->IsInReplyTo(); }
+
    void OnIdle(wxIdleEvent& /* event */)
    {
-      UpdateAppearance();
+      Disconnect(wxID_ANY, wxEVT_IDLE,
+                     wxIdleEventHandler(IsReplyButton::OnIdle));
 
-      Disconnect(wxID_ANY, wxEVT_IDLE,
-                     wxIdleEventHandler(wxIsReplyButton::OnIdle));
+      Update();
    }
 
+   DECLARE_NO_COPY_CLASS(IsReplyButton)
+};
 
-   wxComposeView * const m_composer;
-   bool m_isReply;
+// ----------------------------------------------------------------------------
+// PGPSignButton: allows the user to choose whether to sign the message or not
+// ----------------------------------------------------------------------------
 
-   DECLARE_NO_COPY_CLASS(wxIsReplyButton)
+class PGPSignButton : public ToggleIconButton
+{
+public:
+   PGPSignButton(wxComposeView *composer, wxWindow *parent)
+      : ToggleIconButton(composer, parent,
+                         "pgp_sign", "pgp_nosign",
+                         _("Message will be cryptographically signed.\n"
+                           "\n"
+                           "You will need access to the private key to be "
+                           "used for message signing."),
+                         _("Message will not be signed"))
+   {
+      UpdateWithoutRefresh();
+   }
+
+private:
+   virtual void DoHandleClick() { m_composer->TogglePGPSigning(); }
+   virtual bool DoGetValue() const { return m_composer->IsPGPSigningEnabled(); }
+
+   DECLARE_NO_COPY_CLASS(PGPSignButton)
 };
 
 // ----------------------------------------------------------------------------
@@ -1816,8 +1885,8 @@
 
    m_txtSubject = NULL;
 
-   m_chkPGPSign = NULL;
-   m_txtPGPSignAs = NULL;
+   m_btnIsReply = NULL;
+   m_btnPGPSign = NULL;
 }
 
 bool wxComposeView::IsReplyTo(const Message& original) const
@@ -1870,16 +1939,6 @@
 
 wxComposeView::~wxComposeView()
 {
-   // save the last values of PGP options
-   if ( m_chkPGPSign )
-   {
-      const bool sign = m_chkPGPSign->GetValue();
-      m_Profile->writeEntry(MP_COMPOSE_PGPSIGN, sign);
-      if ( sign )
-         m_Profile->writeEntry(MP_COMPOSE_PGPSIGN_AS, m_txtPGPSignAs->GetValue());
-   }
-
-
    delete m_rcptMain;
    WX_CLEAR_ARRAY(m_rcptExtra);
 
@@ -2039,6 +2098,10 @@
       }
       //else: no identities configured
 
+      m_btnPGPSign = new PGPSignButton(this, m_panel);
+      sizerFrom->Add(m_btnPGPSign,
+                     0, wxLEFT | wxALIGN_CENTRE_VERTICAL, LAYOUT_MARGIN);
+
       sizerHeaders->Add(sizerFrom, 1, wxEXPAND | wxALIGN_CENTRE_VERTICAL);
    }
    else // no from line
@@ -2055,8 +2118,9 @@
    sizerSubj->Add(m_txtSubject, 1, wxALIGN_CENTRE_VERTICAL);
    SetTextAppearance(m_txtSubject);
 
-   sizerSubj->Add(new wxIsReplyButton(this, m_panel),
-                     0, wxLEFT | wxALIGN_CENTRE_VERTICAL, LAYOUT_MARGIN);
+   m_btnIsReply = new IsReplyButton(this, m_panel);
+   sizerSubj->Add(m_btnIsReply,
+                  0, wxLEFT | wxALIGN_CENTRE_VERTICAL, LAYOUT_MARGIN);
 
    sizerHeaders->Add(sizerSubj, 1, wxEXPAND | wxALIGN_CENTRE_VERTICAL);
 
@@ -2244,15 +2308,6 @@
    m_splitter->SplitHorizontally(m_panel, m_editor->GetWindow(), heightHeaders);
    m_splitter->SetMinimumPaneSize(heightHeaders);
 
-   if ( READ_CONFIG(m_Profile, MP_COMPOSE_USE_PGP) )
-   {
-      wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
-      sizer->Add(m_splitter, wxSizerFlags(1).Expand());
-      sizer->Add(CreatePGPControls(), wxSizerFlags().Expand());
-      SetSizer(sizer);
-   }
-   //else: rely on splitter taking up the entire frame as its only child
-
    // note that we must show and layout the frame before setting the control
    // values or the text would be scrolled to the right in the text fields as
    // they initially don't have enough space to show it...
@@ -2339,48 +2394,6 @@
    m_editor = editor;
 }
 
-wxWindow *
-wxComposeView::CreatePGPControls()
-{
-   wxPanel * const panelPGP = new wxPanel(this);
-   wxBoxSizer * const sizer = new wxBoxSizer(wxHORIZONTAL);
-
-   // align all subsequent controls to the right by inserting an expandable
-   // sizer before them
-   sizer->AddStretchSpacer();
-
-   m_chkPGPSign = new wxCheckBox(panelPGP, wxID_ANY, _("&Sign message"));
-   m_chkPGPSign->SetToolTip(
-      _("If checked, the message will be cryptographically signed.\n"
-        "\n"
-        "You need to have access to the private key which will be "
-        "used for signing.")
-   );
-   m_chkPGPSign->SetValue(m_options.m_signWithPGP);
-   sizer->Add(m_chkPGPSign, wxSizerFlags().Border(wxALL & ~wxRIGHT).Centre());
-
-   sizer->Add(new wxStaticText(panelPGP, wxID_ANY, _("a&s ")),
-              wxSizerFlags().Centre());
-
-   m_txtPGPSignAs = new wxTextCtrl(panelPGP, wxID_ANY, m_options.m_signWithPGPAs);
-   m_txtPGPSignAs->SetToolTip(
-      _("Enter here the user name to use for signing or leave empty to use "
-        "the default key in your key store.")
-   );
-   sizer->Add(m_txtPGPSignAs, wxSizerFlags().Border(wxALL & ~wxLEFT).Centre());
-
-   m_txtPGPSignAs->Connect(
-      wxEVT_UPDATE_UI,
-      wxUpdateUIEventHandler(wxComposeView::OnUpdateUISignAs),
-      NULL,
-      this
-   );
-
-   panelPGP->SetSizer(sizer);
-
-   return panelPGP;
-}
-
 void
 wxComposeView::InitAppearance()
 {
@@ -3522,9 +3535,20 @@
          break;
 
       case WXMENU_COMPOSE_IN_REPLY_TO:
-         ConfigureInReplyTo();
+         if ( ConfigureInReplyTo() )
+         {
+            CHECK_RET( m_btnIsReply, "should have the button" );
+            m_btnIsReply->Update();
+         }
          break;
 
+      case WXMENU_COMPOSE_PGP_SIGN:
+         TogglePGPSigning();
+
+         CHECK_RET( m_btnPGPSign, "should have the button" );
+         m_btnPGPSign->Update();
+         break;
+
       case WXMENU_COMPOSE_CUSTOM_HEADERS:
          {
             String headerName, headerValue;
@@ -4694,13 +4718,16 @@
    }
 
 
-   // postprocess the message
-   // -----------------------
+   // postprocess the message if we're really going to send it
+   // --------------------------------------------------------
 
-   // cryptographically sign the message if configured to do it
-   if ( m_chkPGPSign && m_chkPGPSign->GetValue() )
+   if ( flags & ForSending )
    {
-      msg->EnableSigning(m_txtPGPSignAs->GetValue());
+      // cryptographically sign the message if configured to do it
+      if ( IsPGPSigningEnabled() )
+      {
+         msg->EnableSigning(m_options.m_signWithPGPAs);
+      }
    }
 
    // the caller is responsible for deleting the object
@@ -4867,6 +4894,16 @@
    m_extraHeadersValues.push_back(new String(value));
 }
 
+bool wxComposeView::IsPGPSigningEnabled() const
+{
+   return m_options.m_signWithPGP;
+}
+
+void wxComposeView::TogglePGPSigning()
+{
+   m_options.m_signWithPGP = !m_options.m_signWithPGP;
+}
+
 bool wxComposeView::IsInReplyTo() const
 {
    kbStringList::iterator i,
@@ -5158,6 +5195,8 @@
 
 SendMessage *wxComposeView::BuildDraftMessage(int flags) const
 {
+   ASSERT_MSG( !(flags & ForSending), "draft is not for sending" );
+
    SendMessage_obj msg(BuildMessage(flags));
    if ( !msg )
    {

Modified: trunk/M/src/gui/wxMenuDefs.cpp
===================================================================
--- trunk/M/src/gui/wxMenuDefs.cpp	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/src/gui/wxMenuDefs.cpp	2008-08-06 00:30:48 UTC (rev 7522)
@@ -468,7 +468,7 @@
    // compose
 
    // the available accelerators for this menu:
-   // ABFGJMQUXYZ
+   // ABFJMQUXYZ
    { WXMENU_COMPOSE_INSERTFILE,     gettext_noop("&Insert file...\tCtrl-I"),
                                     gettext_noop("Attach a file to the message")            , wxITEM_NORMAL },
    { WXMENU_COMPOSE_LOADTEXT,       gettext_noop("I&nsert text...\tCtrl-T"),
@@ -494,6 +494,7 @@
    { WXMENU_COMPOSE_EXTEDIT, gettext_noop("&External editor\tCtrl-E"),gettext_noop("Invoke alternative editor"), wxITEM_NORMAL },
    { WXMENU_SEPARATOR,     "",                  ""                         , wxITEM_NORMAL },
    { WXMENU_COMPOSE_IN_REPLY_TO, gettext_noop("Set if this is a &reply..."), gettext_noop("Set whether this message is a start of new thread or a reply to another message"), wxITEM_NORMAL },
+   { WXMENU_COMPOSE_PGP_SIGN, gettext_noop("Sign message with P&GP\tCtrl-G"), gettext_noop("Cryptographically sign the message using OpenPGP format"), wxITEM_CHECK },
    { WXMENU_COMPOSE_CUSTOM_HEADERS, gettext_noop("Custom &header...\tCtrl-H"), gettext_noop("Add/edit header fields not shown on the screen"), wxITEM_NORMAL },
 
    // language

Modified: trunk/M/src/gui/wxOptionsDlg.cpp
===================================================================
--- trunk/M/src/gui/wxOptionsDlg.cpp	2008-08-06 00:27:32 UTC (rev 7521)
+++ trunk/M/src/gui/wxOptionsDlg.cpp	2008-08-06 00:30:48 UTC (rev 7522)
@@ -262,7 +262,6 @@
    ConfigField_SignatureSeparator,
    ConfigField_ComposerSpacer0,
    ConfigField_SignWithPGPHelp,
-   ConfigField_SignWithPGPEnable,
    ConfigField_SignWithPGP,
    ConfigField_SignWithPGPAs,
    ConfigField_XFaceFile,
@@ -1307,21 +1306,17 @@
                                                    ConfigField_NewMailMonitor },
 
    // compose
-   { gettext_noop("Allow changing \"&From\" field"),
-                                                   Field_Bool | Field_Advanced,  -1},
-   { gettext_noop("&Use signature"),               Field_Bool,    -1,                        },
+   { gettext_noop("Show \"&From\" field"),         Field_Bool | Field_Advanced,  -1},
+   { gettext_noop("&Append signature"),            Field_Bool,    -1,                        },
    { gettext_noop("&Signature file"),              Field_File,    ConfigField_Signature      },
-
    { gettext_noop("Use signature se&parator"),     Field_Bool,    ConfigField_Signature      },
 
    { "",                                           Field_Message, -1 },
    { gettext_noop("Mahogany may sign outgoing messages in OpenPGP format.\n"
                   "You need to have a private key to be able to do this, "
                   "if you have several of them you may specify the one to use\n"
-                  "by default below (you will be able to change it in the "
-                  "composer window)"),             Field_Message, -1 },
-   { gettext_noop("Show &signing controls in composer"), Field_Bool, -1 },
-   { gettext_noop("Enable signing by &default"),   Field_Bool, ConfigField_SignWithPGPEnable },
+                  "by default below"),             Field_Message, -1 },
+   { gettext_noop("Enable signing by &default"),   Field_Bool, -1 },
    { gettext_noop("&User name to sign messages as"), Field_Advanced | Field_Text,
                                                    ConfigField_SignWithPGP },
    { gettext_noop("Configure &XFace..."),          Field_XFace,   -1          },
@@ -2074,7 +2069,6 @@
    CONFIG_ENTRY(MP_COMPOSE_USE_SIGNATURE_SEPARATOR),
    CONFIG_NONE(), // spacer
    CONFIG_NONE(), // PGP help
-   CONFIG_ENTRY(MP_COMPOSE_USE_PGP),
    CONFIG_ENTRY(MP_COMPOSE_PGPSIGN),
    CONFIG_ENTRY(MP_COMPOSE_PGPSIGN_AS),
    CONFIG_ENTRY(MP_COMPOSE_XFACE_FILE),


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/