Hi,

I'm wondering if I could get someone to look at the following patch
I've crafted to fix some bugs and add some features to the monodoc
tool. The patch is against subversion revision 74230 (current trunk).
I'm not sure if these should be grouped together in one patch; if the
expectation is different, please let me know.

The patch changes the following things:
- Fixes bug 80575 (http://bugzilla.ximian.com/show_bug.cgi?id=80575)
(missing compare for null class reference)
- Groups contribution-specific functionality to new dedicated menu (to
allow for more contribution specific functionality in the future)
- Adds contributor statistics feature
- A few minor code tweaks/nitpicks

Also, I uploaded to updates to the class doc. I'm just wondering if
anyone has had a chance to read them over. I'd like to know if I
should continue documenting things in that style.

Finally, I'm hoping to add some new contributor features (thus the
creation of the Contributing menu) and would like anyones opinion on
whether the creation of a small list window to display the
contributions pending for upload would be something people would want.
It is something I would use.

Thanks,
Kevin Reay

Ps, I've attached the patch, as well as uploaded it
(http://www.explodingrobot.com/mono/monodoc.patch0.txt) in case the
mailing list strips attachments. Code released with whatever license
is necessary, of course (MIT X11 is fine).
Index: browser.cs
===================================================================
--- browser.cs  (revision 74230)
+++ browser.cs  (working copy)
@@ -826,14 +826,14 @@
                // postcomment.Sensitive = comments1.Active;
 
                // refresh, so we can see the comments
-               if (CurrentTab.history != null) // catch the case when we are 
currently loading
+               if (CurrentTab != null && CurrentTab.history != null) // catch 
the case when we are currently loading
                        CurrentTab.history.ActivateCurrent ();
        }
        
        void OnInheritedMembersActivate (object o, EventArgs args)
        {
                SettingsHandler.Settings.ShowInheritedMembers = 
showinheritedmembers.Active;
-               if (CurrentTab.history != null) // catch the case when we are 
currently loading
+               if (CurrentTab != null && CurrentTab.history != null) // catch 
the case when we are currently loading
                        CurrentTab.history.ActivateCurrent ();
        }
 
@@ -842,7 +842,7 @@
                SettingsHandler.Settings.EnableEditing = editing1.Active;
 
                // refresh, so we can see the [edit] things
-               if (CurrentTab != null) // catch the case when we are currently 
loading
+               if (CurrentTab != null && CurrentTab.history != null) // catch 
the case when we are currently loading
                        CurrentTab.history.ActivateCurrent ();
        }
        
@@ -873,7 +873,6 @@
        //
        // Invoked when the user presses a key on the index_entry
        //
-
        public void OnIndexEntryKeyPress (object o, KeyPressEventArgs args)
        {
                args.RetVal = true;
@@ -1368,7 +1367,113 @@
                }
        }
 
+       void OnContributionStatistics (object sender, EventArgs a)
+       {
+               string email = SettingsHandler.Settings.Email;
+               string key = SettingsHandler.Settings.Key;
+               
+               if (key == null || key == "") {
+                       MessageDialog md = new MessageDialog (null, 
+                                                             
DialogFlags.DestroyWithParent,
+                                                             MessageType.Info, 
+                                                             
ButtonsType.Close, 
+                                                 "You have not obtained or 
used a contribution key yet.");
+                       md.Title = "No contribution key";
+                       
+                       md.Run();
+                       md.Destroy();
+               }
+               else
+                       ContributionStatus.GetStatus (email, key);
+       }
+       
+       class ContributionStatus {
+               enum State {
+                       GetStatusError,
+                       NetworkError,
+                       Done
+               }
 
+               State state;
+               Status status;
+               string contributoremail;
+               
+               ThreadNotify tn;
+               WebClientAsyncResult war;
+               ContributionsSoap d;
+               
+               public static void GetStatus (string email, string key)
+               {
+                       new ContributionStatus(email, key);
+               }
+               
+               ContributionStatus (string email, string key)
+               {
+                       tn = new ThreadNotify (new ReadyEvent (Update));
+                       
+                       d = new ContributionsSoap ();
+                       if (Environment.GetEnvironmentVariable 
("MONODOCTESTING") == null)
+                               d.Url = 
"http://www.go-mono.com/docs/server.asmx";;
+                               
+                       war = (WebClientAsyncResult) d.BeginGetStatus (email, 
key, new AsyncCallback (GetStatusDone), null);
+                       contributoremail = email;
+               }
+               
+               void Update ()
+               {
+                       MessageDialog md = null;
+                       
+                       switch (state) {
+                       case State.GetStatusError:
+                               md = new MessageDialog (null, 
+                                                     
DialogFlags.DestroyWithParent,
+                                                             
MessageType.Error, ButtonsType.Close, 
+                                                 "Server returned error while 
requesting contributor statistics");
+                               md.Title = "Contribution Statistics Error 
Occurred";
+                               break;
+                       case State.NetworkError:
+                               md = new MessageDialog (null, 
+                                                     
DialogFlags.DestroyWithParent,
+                                                             
MessageType.Error, ButtonsType.Close, 
+                                                 "Network error occurred while 
requesting contributor statistics");
+                               md.Title = "Contribution Statistics Error 
Occurred";
+                               break;
+                       case State.Done:
+                               md = new MessageDialog (null, 
+                                                     
DialogFlags.DestroyWithParent,
+                                                             MessageType.Info, 
ButtonsType.Close, 
+                                                 "Contribution statistics for 
" + contributoremail +
+                                                     "\n\nTotal contributions: 
" + status.Contributions +
+                                                     "\nContributions 
committed: " + status.Commited +
+                                                     "\nContributions pending: 
" + status.Pending);
+                               md.Title = "Contribution Statistics";
+                               break;
+                       }
+
+                       md.Run();
+                       md.Destroy();
+               }
+                               
+               void GetStatusDone (IAsyncResult iar)
+               {
+                       try {
+                               status = d.EndGetStatus (iar);
+                               war = null;
+
+                               if (status == null)
+                                       state = State.GetStatusError;
+                               else
+                                       state = State.Done;
+
+                       } catch (Exception e) {
+                               state = State.NetworkError;
+                               Console.WriteLine ("Error getting status: " + 
e);
+                       }
+                       if (tn != null)
+                               tn.WakeupMain ();
+               }       
+       }
+
        class NewComment {
                [Glade.Widget] Window newcomment;
                [Glade.Widget] Entry entry;
Index: ChangeLog
===================================================================
--- ChangeLog   (revision 74230)
+++ ChangeLog   (working copy)
@@ -1,3 +1,9 @@
+2007-03-15  Kevin Reay  <[EMAIL PROTECTED]>
+
+       * browser.cs: Fix #80575. Add missing check for null CurrentTab.
+       * browser.glade: Added Contributing menu. Reordered some menu items.
+       * browser.cs: Added contributor statistics feature.
+
 2006-12-19  Ankit Jain  <[EMAIL PROTECTED]>
 
        * browser.cs (Main): Add a "--remote-mode" option and implement. With 
Index: browser.glade
===================================================================
--- browser.glade       (revision 74230)
+++ browser.glade       (working copy)
@@ -83,16 +83,6 @@
                  </child>
 
                  <child>
-                   <widget class="GtkMenuItem" id="contributor_settings1">
-                     <property name="visible">True</property>
-                     <property name="label" translatable="yes">_Upload 
Contributions</property>
-                     <property name="use_underline">True</property>
-                     <signal name="activate" handler="OnUpload" 
last_modification_time="Wed, 08 Oct 2003 02:53:43 GMT"/>
-                     <accelerator key="U" modifiers="GDK_CONTROL_MASK" 
signal="activate"/>
-                   </widget>
-                 </child>
-
-                 <child>
                    <widget class="GtkImageMenuItem" id="print">
                      <property name="visible">True</property>
                      <property name="label">gtk-print</property>
@@ -189,22 +179,6 @@
                      <accelerator key="A" modifiers="GDK_CONTROL_MASK" 
signal="activate"/>
                    </widget>
                  </child>
-
-                 <child>
-                   <widget class="GtkMenuItem" id="separator1">
-                     <property name="visible">True</property>
-                   </widget>
-                 </child>
-
-                 <child>
-                   <widget class="GtkCheckMenuItem" id="editing1">
-                     <property name="visible">True</property>
-                     <property name="label" 
translatable="yes">Editing</property>
-                     <property name="use_underline">True</property>
-                     <property name="active">False</property>
-                     <signal name="activate" handler="OnEditingActivate" 
last_modification_time="Fri, 03 Oct 2003 22:44:59 GMT"/>
-                   </widget>
-                 </child>
                </widget>
              </child>
            </widget>
@@ -268,6 +242,53 @@
          </child>
 
          <child>
+           <widget class="GtkMenuItem" id="contributingMenu">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">_Contributing</property>
+             <property name="use_underline">True</property>
+
+             <child>
+               <widget class="GtkMenu" id="contributingMenu_menu">
+                 <child>
+                   <widget class="GtkCheckMenuItem" id="editing1">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Edit 
Mode</property>
+                     <property name="use_underline">True</property>
+                     <property name="active">False</property>
+                     <signal name="activate" handler="OnEditingActivate" 
last_modification_time="Fri, 03 Oct 2003 22:44:59 GMT"/>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkMenuItem" id="separator1">
+                     <property name="visible">True</property>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkMenuItem" id="contributor_settings1">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">_Upload 
Contributions</property>
+                     <property name="use_underline">True</property>
+                     <signal name="activate" handler="OnUpload" 
last_modification_time="Wed, 08 Oct 2003 02:53:43 GMT"/>
+                     <accelerator key="U" modifiers="GDK_CONTROL_MASK" 
signal="activate"/>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkMenuItem" id="contributor_statistics1">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">_View 
Contribution Statistics</property>
+                     <property name="use_underline">True</property>
+                     <signal name="activate" 
handler="OnContributionStatistics" last_modification_time="Wed, 08 Oct 2003 
02:53:43 GMT"/>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+           </widget>
+         </child>
+
+         <child>
            <widget class="GtkMenuItem" id="menuitem7">
              <property name="visible">True</property>
              <property name="label" translatable="yes">_Help</property>
Index: BookmarkManager.cs
===================================================================
--- BookmarkManager.cs  (revision 74230)
+++ BookmarkManager.cs  (working copy)
@@ -324,10 +324,11 @@
                public BookmarkManager (Browser browser){
                        _Browser = browser;
                        
-                       
+                       #if DEBUG
                        Console.WriteLine ("Bookmark Manager init");
+                       #endif
 
-                       //discoverig bookmark file
+                       // discovering bookmark file
                        bookmark_file = Environment.GetFolderPath 
(Environment.SpecialFolder.ApplicationData);
                        bookmark_file = System.IO.Path.Combine (bookmark_file, 
"monodoc");
                        bookmark_file = System.IO.Path.Combine (bookmark_file, 
"bookmarks.xml");
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to