Revision: 7211
          http://svn.sourceforge.net/mahogany/?rev=7211&view=rev
Author:   vadz
Date:     2007-01-09 17:22:12 -0800 (Tue, 09 Jan 2007)

Log Message:
-----------
show the message subject in the composer window title bar

Modified Paths:
--------------
    trunk/M/CHANGES
    trunk/M/include/gui/wxComposeView.h
    trunk/M/src/gui/wxComposeView.cpp

Modified: trunk/M/CHANGES
===================================================================
--- trunk/M/CHANGES     2007-01-08 23:32:01 UTC (rev 7210)
+++ trunk/M/CHANGES     2007-01-10 01:22:12 UTC (rev 7211)
@@ -9,6 +9,7 @@
 Release 0.68 '' September xx, 2006
 ---------------------------------------
 
+2007-01-10 VZ: Show the message subject in the composer window title bar
 2007-01-08 VZ: Added support for "subject" parameter of mailto: URLs
 2006-12-25 VZ: Added "Remove attachments" command
 2006-09-05 NB: Mahogany can now be compiled with wxWine

Modified: trunk/M/include/gui/wxComposeView.h
===================================================================
--- trunk/M/include/gui/wxComposeView.h 2007-01-08 23:32:01 UTC (rev 7210)
+++ trunk/M/include/gui/wxComposeView.h 2007-01-10 01:22:12 UTC (rev 7211)
@@ -312,6 +312,16 @@
     */
    bool ConfigureInReplyTo();
 
+
+   /**
+      Update the composer frame title.
+
+      This should be called whenever the subject (shown in the title bar) or
+      the external editor status (shown too) changes and is only used
+      internally.
+    */
+   void UpdateTitle();
+
 protected:
    /** quasi-Constructor
        @param parent parent window
@@ -396,6 +406,9 @@
    /// Launch the external editor
    bool StartExternalEditor();
 
+   /// Return true if the external editor is currently running
+   bool IsExternalEditorRunning() const { return m_procExtEdit != NULL; }
+
    /**
      Return a SendMessage object filled with all data we have. It must be
      deleted by the caller (presumably after calling its Send() or

Modified: trunk/M/src/gui/wxComposeView.cpp
===================================================================
--- trunk/M/src/gui/wxComposeView.cpp   2007-01-08 23:32:01 UTC (rev 7210)
+++ trunk/M/src/gui/wxComposeView.cpp   2007-01-10 01:22:12 UTC (rev 7211)
@@ -184,9 +184,6 @@
 #define GEOMETRY_MAXIMIZED _T("M")
 #define GEOMETRY_FORMAT _T("%dx%d-%dx%d")
 
-// the composer frame title
-#define COMPOSER_TITLE _("Message Composition")
-
 // separate multiple addresses with commas
 #define CANONIC_ADDRESS_SEPARATOR   _T(", ")
 
@@ -487,12 +484,29 @@
 class wxSubjectTextCtrl : public wxTextCtrlProcessingEnter
 {
 public:
-   wxSubjectTextCtrl(wxWindow *parent) : wxTextCtrlProcessingEnter(parent) { }
+   wxSubjectTextCtrl(wxWindow *parent, wxComposeView *composeView)
+      : wxTextCtrlProcessingEnter(parent)
+   {
+      m_composeView = composeView;
+   }
 
 private:
+   void OnChange(wxCommandEvent& WXUNUSED(event))
+   {
+      // update the subject shown in the title bar
+      m_composeView->UpdateTitle();
+   }
+
+   wxComposeView *m_composeView;
+
+   DECLARE_EVENT_TABLE()
    DECLARE_NO_COPY_CLASS(wxSubjectTextCtrl)
 };
 
+BEGIN_EVENT_TABLE(wxSubjectTextCtrl, wxTextCtrlProcessingEnter)
+   EVT_TEXT(wxID_ANY, wxSubjectTextCtrl::OnChange)
+END_EVENT_TABLE()
+
 // ----------------------------------------------------------------------------
 // IconButton: class used for small buttons in the header
 // ----------------------------------------------------------------------------
@@ -1482,7 +1496,7 @@
                            );
 
    cv->SetTemplate(params.templ);
-   cv->SetTitle(COMPOSER_TITLE);
+   cv->UpdateTitle();
    cv->Create(parent, profile);
 
    return cv;
@@ -1776,6 +1790,8 @@
 
    m_editor = NULL;
    m_encoding = wxFONTENCODING_SYSTEM;
+
+   m_txtSubject = NULL;
 }
 
 bool wxComposeView::IsReplyTo(const Message& original) const
@@ -1996,7 +2012,7 @@
                      0, wxALIGN_CENTRE_VERTICAL);
 
    wxSizer *sizerSubj = new wxBoxSizer(wxHORIZONTAL);
-   m_txtSubject = new wxSubjectTextCtrl(m_panel);
+   m_txtSubject = new wxSubjectTextCtrl(m_panel, this);
    sizerSubj->Add(m_txtSubject, 1, wxALIGN_CENTRE_VERTICAL);
    SetTextAppearance(m_txtSubject);
 
@@ -2315,6 +2331,23 @@
    ResetDirty();
 }
 
+void wxComposeView::UpdateTitle()
+{
+   String title(_("Composer"));
+   if ( m_txtSubject && !m_txtSubject->IsEmpty() )
+   {
+      title << _(" - ") << m_txtSubject->GetValue();
+   }
+
+   if ( IsExternalEditorRunning() )
+      title << _(" (frozen: external editor running)");
+
+   wxFrame *frame = GetFrame();
+   CHECK_RET( frame, _T("composer without frame?") );
+   if ( title != frame->GetTitle() )
+      frame->SetTitle(title);
+}
+
 // ----------------------------------------------------------------------------
 // wxComposeView address headers stuff
 // ----------------------------------------------------------------------------
@@ -3613,20 +3646,8 @@
             EnableEditing(false);
 
             // and reflect it in the title
-            wxFrame *frame = GetFrame();
-            if ( frame )
-            {
-               wxString title;
-               title << COMPOSER_TITLE
-                     << _(" (frozen: external editor running)");
+            UpdateTitle();
 
-               frame->SetTitle(title);
-            }
-            else
-            {
-               FAIL_MSG( _T("composer without frame?") );
-            }
-
             launchedOk = true;
          }
       }
@@ -3678,16 +3699,6 @@
    // reenable editing the text in the built-in editor
    EnableEditing(true);
 
-   wxFrame *frame = GetFrame();
-   if ( frame )
-   {
-      frame->SetTitle(COMPOSER_TITLE);
-   }
-   else
-   {
-      FAIL_MSG( _T("composer without frame?") );
-   }
-
    bool ok = false;
 
    // check the return code of the editor process
@@ -3748,6 +3759,9 @@
    delete m_procExtEdit;
    m_procExtEdit = NULL;
 
+
+   UpdateTitle();
+
    // show the frame which might had been obscured by the other windows
    Raise();
 }


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

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mahogany-cvsupdates mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates

Reply via email to