[meld] Add right margin and line breaking to commit messages (bgo#698982)



commit 8f762ce5c0ed623dd058bb09a7bc64fc15f895b1
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Sun Jun 23 10:39:22 2013 +1000

    Add right margin and line breaking to commit messages (bgo#698982)

 data/ui/preferences.ui    |  169 +++++++++++++++++++++++++++++++++++++++++++++
 data/ui/vcview.ui         |    2 +-
 meld/preferences.py       |   30 ++++++++-
 meld/ui/vcdialogs.py      |   10 +++
 meld/util/sourceviewer.py |    2 +
 5 files changed, 211 insertions(+), 2 deletions(-)
---
diff --git a/data/ui/preferences.ui b/data/ui/preferences.ui
index 0abd33c..3a13aec 100644
--- a/data/ui/preferences.ui
+++ b/data/ui/preferences.ui
@@ -9,6 +9,13 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="lower">70</property>
+    <property name="upper">120</property>
+    <property name="value">72</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkDialog" id="preferencesdialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -831,6 +838,168 @@
               </packing>
             </child>
             <child>
+              <object class="GtkVBox" id="vc_comparison_tab">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">12</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkVBox" id="vbox5">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label8">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Commit Messages</property>
+                        <property name="use_markup">True</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkHBox" id="hbox4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label9">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xpad">12</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkVBox" id="vbox6">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <object class="GtkHBox" id="hbox6">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="checkbutton_show_commit_margin">
+                                    <property name="label" translatable="yes">Show _right margin 
at:</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="use_action_appearance">False</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="xalign">0.51999998092651367</property>
+                                    <property name="draw_indicator">True</property>
+                                    <signal name="toggled" 
handler="on_checkbutton_show_commit_margin_toggled" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkSpinButton" id="spinbutton_commit_margin">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="adjustment">adjustment2</property>
+                                    <property name="climb_rate">1</property>
+                                    <signal name="value-changed" 
handler="on_spinbutton_commit_margin_value_changed" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="alignment2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">18</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="checkbutton_break_commit_lines">
+                                    <property name="label" translatable="yes">Automatically _break lines at 
right margin</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="use_action_appearance">False</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="xalign">0.51999998092651367</property>
+                                    <property name="draw_indicator">True</property>
+                                    <signal name="toggled" 
handler="on_checkbutton_break_commit_lines_toggled" swapped="no"/>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="vc_comparison_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Version Control</property>
+              </object>
+              <packing>
+                <property name="position">2</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkVBox" id="file_filters_tab">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
diff --git a/data/ui/vcview.ui b/data/ui/vcview.ui
index 3448050..ac99430 100644
--- a/data/ui/vcview.ui
+++ b/data/ui/vcview.ui
@@ -376,7 +376,7 @@
                             <property name="vscrollbar_policy">automatic</property>
                             <property name="shadow_type">in</property>
                             <child>
-                              <object class="GtkTextView" id="textview">
+                              <object class="MeldSourceView" id="textview">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="wrap_mode">word</property>
diff --git a/meld/preferences.py b/meld/preferences.py
index 658b7c0..c017f34 100644
--- a/meld/preferences.py
+++ b/meld/preferences.py
@@ -143,7 +143,8 @@ class PreferencesDialog(gnomeglade.Component):
 
     def __init__(self, parent, prefs):
         gnomeglade.Component.__init__(self, paths.ui_dir("preferences.ui"),
-                                      "preferencesdialog", ["adjustment1"])
+                                      "preferencesdialog",
+                                      ["adjustment1", "adjustment2"])
         self.widget.set_transient_for(parent)
         self.prefs = prefs
         if not self.prefs.use_custom_font:
@@ -220,6 +221,15 @@ class PreferencesDialog(gnomeglade.Component):
         self.combo_timestamp.set_active(active_idx)
         self.combo_timestamp.lock = False
 
+        self.checkbutton_show_commit_margin.set_active(
+            self.prefs.vc_show_commit_margin)
+        self.spinbutton_commit_margin.set_value(
+            self.prefs.vc_commit_margin)
+        self.checkbutton_break_commit_lines.set_sensitive(
+            self.prefs.vc_show_commit_margin)
+        self.checkbutton_break_commit_lines.set_active(
+            self.prefs.vc_break_commit_message)
+
         self.widget.show()
 
     def on_fontpicker_font_set(self, picker):
@@ -265,6 +275,20 @@ class PreferencesDialog(gnomeglade.Component):
         # Called on "activate" and "focus-out-event"
         self.prefs.edit_command_custom = entry.props.text
 
+    def on_checkbutton_show_line_numbers_toggled(self, check):
+        self.prefs.show_line_numbers = check.get_active()
+
+    def on_checkbutton_show_commit_margin_toggled(self, check):
+        show_margin = check.get_active()
+        self.prefs.vc_show_commit_margin = show_margin
+        self.checkbutton_break_commit_lines.set_sensitive(show_margin)
+
+    def on_spinbutton_commit_margin_value_changed(self, spin):
+        self.prefs.vc_commit_margin = int(spin.get_value())
+
+    def on_checkbutton_break_commit_lines_toggled(self, check):
+        self.prefs.vc_break_commit_message = check.get_active()
+
     #
     # filters
     #
@@ -344,6 +368,10 @@ class MeldPreferences(prefs.Preferences):
                                           "permissions 0"]),
         "dirdiff_shallow_comparison" : prefs.Value(prefs.BOOL, False),
         "dirdiff_time_resolution_ns" : prefs.Value(prefs.INT, 100),
+
+        "vc_show_commit_margin": prefs.Value(prefs.BOOL, True),
+        "vc_commit_margin": prefs.Value(prefs.INT, 72),
+        "vc_break_commit_message": prefs.Value(prefs.BOOL, False),
     }
 
     def __init__(self):
diff --git a/meld/ui/vcdialogs.py b/meld/ui/vcdialogs.py
index c653557..1bab324 100644
--- a/meld/ui/vcdialogs.py
+++ b/meld/ui/vcdialogs.py
@@ -19,6 +19,7 @@
 from __future__ import print_function
 
 import os
+import textwrap
 from gettext import gettext as _
 
 import gtk
@@ -78,12 +79,21 @@ class CommitDialog(gnomeglade.Component):
         self.widget.show_all()
 
     def run(self):
+        margin = self.parent.prefs.vc_commit_margin
+        self.textview.set_right_margin_position(
+            margin)
+        self.textview.set_show_right_margin(
+            self.parent.prefs.vc_show_commit_margin)
+
         self.previousentry.set_active(-1)
         self.textview.grab_focus()
         response = self.widget.run()
         if response == gtk.RESPONSE_OK:
             buf = self.textview.get_buffer()
             msg = buf.get_text(*buf.get_bounds(), include_hidden_chars=False)
+            if self.parent.prefs.vc_break_commit_message:
+                paragraphs = msg.split("\n\n")
+                msg = "\n\n".join(textwrap.fill(p, margin) for p in paragraphs)
             self.parent._command_on_selected(
                 self.parent.vc.commit_command(msg))
             if msg.strip():
diff --git a/meld/util/sourceviewer.py b/meld/util/sourceviewer.py
index e3249c1..9394870 100644
--- a/meld/util/sourceviewer.py
+++ b/meld/util/sourceviewer.py
@@ -172,6 +172,8 @@ class nullsourceview(_srcviewer):
             set_show_line_numbers = lambda *args: None
             set_insert_spaces_instead_of_tabs = lambda *args: None
             set_draw_spaces = lambda *args: None
+            set_right_margin_position = lambda *args: None
+            set_show_right_margin = lambda *args: None
         gobject.type_register(NullTextView)
 
         self.GtkTextView = NullTextView


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]