Code

Mnemonics in "Export bitmap", and "Rows and Columns" dialogs (Bug 170765)
[inkscape.git] / src / ui / dialog / tile.cpp
index 5741fee4d469016fd570f5136dd44c1633b43119..4b994335e31fdb56a788a65d6f8c34130640a07a 100644 (file)
@@ -5,6 +5,7 @@
  *   Bob Jamison ( based off trace dialog)
  *   John Cliff
  *   Other dudes from The Inkscape Organization
+ *   Abhishek Sharma
  *
  * Copyright (C) 2004 Bob Jamison
  * Copyright (C) 2004 John Cliff
@@ -31,6 +32,7 @@
 #include "sp-item.h"
 #include "widgets/icon.h"
 #include "tile.h"
+#include "desktop.h"
 
 /*
  *    Sort items by their x co-ordinates, taking account of y (keeps rows intact)
@@ -45,8 +47,8 @@ sp_compare_x_position(SPItem *first, SPItem *second)
     using Geom::X;
     using Geom::Y;
 
-    Geom::OptRect a = first->getBounds(sp_item_i2doc_affine(first));
-    Geom::OptRect b = second->getBounds(sp_item_i2doc_affine(second));
+    Geom::OptRect a = first->getBounds(first->i2doc_affine());
+    Geom::OptRect b = second->getBounds(second->i2doc_affine());
 
     if ( !a || !b ) {
         // FIXME?
@@ -85,8 +87,8 @@ sp_compare_x_position(SPItem *first, SPItem *second)
 int
 sp_compare_y_position(SPItem *first, SPItem *second)
 {
-    Geom::OptRect a = first->getBounds(sp_item_i2doc_affine(first));
-    Geom::OptRect b = second->getBounds(sp_item_i2doc_affine(second));
+    Geom::OptRect a = first->getBounds(first->i2doc_affine());
+    Geom::OptRect b = second->getBounds(second->i2doc_affine());
 
     if ( !a || !b ) {
         // FIXME?
@@ -158,14 +160,14 @@ void TileDialog::Grid_Arrange ()
     grid_top = 99999;
 
     SPDesktop *desktop = getDesktop();
-    sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+    sp_desktop_document(desktop)->ensureUpToDate();
 
     Inkscape::Selection *selection = sp_desktop_selection (desktop);
-    const GSList *items = selection->itemList();
+    const GSList *items = selection ? selection->itemList() : 0;
     cnt=0;
     for (; items != NULL; items = items->next) {
         SPItem *item = SP_ITEM(items->data);
-        Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+        Geom::OptRect b = item->getBounds(item->i2doc_affine());
         if (!b) {
             continue;
         }
@@ -193,6 +195,7 @@ void TileDialog::Grid_Arrange ()
 
     // require the sorting done before we can calculate row heights etc.
 
+    g_return_if_fail(selection);
     const GSList *items2 = selection->itemList();
     GSList *rev = g_slist_copy((GSList *) items2);
     GSList *sorted = NULL;
@@ -207,7 +210,7 @@ void TileDialog::Grid_Arrange ()
         const GSList *sizes = sorted;
         for (; sizes != NULL; sizes = sizes->next) {
             SPItem *item = SP_ITEM(sizes->data);
-            Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect b = item->getBounds(item->i2doc_affine());
             if (b) {
                 width = b->dimensions()[Geom::X];
                 height = b->dimensions()[Geom::Y];
@@ -314,7 +317,7 @@ g_print("\n row = %f     col = %f selection x= %f selection y = %f", total_row_h
              for (; current_row != NULL; current_row = current_row->next) {
                  SPItem *item=SP_ITEM(current_row->data);
                  Inkscape::XML::Node *repr = SP_OBJECT_REPR(item);
-                 Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+                 Geom::OptRect b = item->getBounds(item->i2doc_affine());
                  Geom::Point min;
                  if (b) {
                      width = b->dimensions()[Geom::X];
@@ -334,16 +337,16 @@ g_print("\n row = %f     col = %f selection x= %f selection y = %f", total_row_h
                  // signs are inverted between x and y due to y inversion
                  Geom::Point move = Geom::Point(new_x - min[Geom::X], min[Geom::Y] - new_y);
                  Geom::Matrix const affine = Geom::Matrix(Geom::Translate(move));
-                 sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * affine);
-                 sp_item_write_transform(item, repr, item->transform,  NULL);
+                 item->set_i2d_affine(item->i2d_affine() * affine);
+                 item->doWriteTransform(repr, item->transform,  NULL);
                  SP_OBJECT (current_row->data)->updateRepr();
                  cnt +=1;
              }
              g_slist_free (current_row);
     }
 
-    sp_document_done (sp_desktop_document (desktop), SP_VERB_SELECTION_GRIDTILE,
-                      _("Arrange in a grid"));
+    DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_GRIDTILE,
+                       _("Arrange in a grid"));
 
 }
 
@@ -373,7 +376,8 @@ void TileDialog::on_row_spinbutton_changed()
     updating = true;
     SPDesktop *desktop = getDesktop();
 
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    Inkscape::Selection *selection = desktop ? desktop->selection : 0;
+    g_return_if_fail( selection );
 
     GSList const *items = selection->itemList();
     int selcount = g_slist_length((GSList *)items);
@@ -398,7 +402,8 @@ void TileDialog::on_col_spinbutton_changed()
     // in turn, prevent listener from responding
     updating = true;
     SPDesktop *desktop = getDesktop();
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    Inkscape::Selection *selection = desktop ? desktop->selection : 0;
+    g_return_if_fail(selection);
 
     GSList const *items = selection->itemList();
     int selcount = g_slist_length((GSList *)items);
@@ -560,32 +565,33 @@ void TileDialog::updateSelection()
     // in turn, prevent listener from responding
     updating = true;
     SPDesktop *desktop = getDesktop();
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-    const GSList *items = selection->itemList();
-    int selcount = g_slist_length((GSList *)items);
-
-    if (NoOfColsSpinner.get_value()>1 && NoOfRowsSpinner.get_value()>1){
-        // Update the number of rows assuming number of columns wanted remains same.
-        double NoOfRows = ceil(selcount / NoOfColsSpinner.get_value());
-        NoOfRowsSpinner.set_value(NoOfRows);
-
-        // if the selection has less than the number set for one row, reduce it appropriately
-        if (selcount<NoOfColsSpinner.get_value()) {
-            double NoOfCols = ceil(selcount / NoOfRowsSpinner.get_value());
-            NoOfColsSpinner.set_value(NoOfCols);
-            prefs->setInt("/dialogs/gridtiler/NoOfCols", NoOfCols);
+    Inkscape::Selection *selection = desktop ? desktop->selection : 0;
+    GSList const *items = selection ? selection->itemList() : 0;
+
+    if (items) {
+        int selcount = g_slist_length((GSList *)items);
+
+        if (NoOfColsSpinner.get_value() > 1 && NoOfRowsSpinner.get_value() > 1){
+            // Update the number of rows assuming number of columns wanted remains same.
+            double NoOfRows = ceil(selcount / NoOfColsSpinner.get_value());
+            NoOfRowsSpinner.set_value(NoOfRows);
+
+            // if the selection has less than the number set for one row, reduce it appropriately
+            if (selcount < NoOfColsSpinner.get_value()) {
+                double NoOfCols = ceil(selcount / NoOfRowsSpinner.get_value());
+                NoOfColsSpinner.set_value(NoOfCols);
+                prefs->setInt("/dialogs/gridtiler/NoOfCols", NoOfCols);
+            }
+        } else {
+            double PerRow = ceil(sqrt(selcount));
+            double PerCol = ceil(sqrt(selcount));
+            NoOfRowsSpinner.set_value(PerRow);
+            NoOfColsSpinner.set_value(PerCol);
+            prefs->setInt("/dialogs/gridtiler/NoOfCols", static_cast<int>(PerCol));
         }
-    } else {
-        double PerRow = ceil(sqrt(selcount));
-        double PerCol = ceil(sqrt(selcount));
-        NoOfRowsSpinner.set_value(PerRow);
-        NoOfColsSpinner.set_value(PerCol);
-        prefs->setInt("/dialogs/gridtiler/NoOfCols", static_cast<int>(PerCol));
-
     }
 
-    updating=false;
-
+    updating = false;
 }
 
 
@@ -632,7 +638,8 @@ TileDialog::TileDialog()
 
     SPDesktop *desktop = getDesktop();
 
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    Inkscape::Selection *selection = desktop ? desktop->selection : 0;
+    g_return_if_fail( selection );
     int selcount = 1;
     if (!selection->isEmpty()) {
         GSList const *items = selection->itemList();
@@ -649,11 +656,12 @@ TileDialog::TileDialog()
         g_print("/n PerRox = %f PerCol = %f selcount = %d",PerRow,PerCol,selcount);
     #endif
 
-    NoOfRowsLabel.set_label(_("Rows:"));
+    NoOfRowsLabel.set_text_with_mnemonic(_("_Rows:"));
+    NoOfRowsLabel.set_mnemonic_widget(NoOfRowsSpinner);
     NoOfRowsBox.pack_start(NoOfRowsLabel, false, false, MARGIN);
 
     NoOfRowsSpinner.set_digits(0);
-    NoOfRowsSpinner.set_increments(1, 5);
+    NoOfRowsSpinner.set_increments(1, 0);
     NoOfRowsSpinner.set_range(1.0, 100.0);
     NoOfRowsSpinner.set_value(PerCol);
     NoOfRowsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_col_spinbutton_changed));
@@ -661,7 +669,8 @@ TileDialog::TileDialog()
     NoOfRowsBox.pack_start(NoOfRowsSpinner, false, false, MARGIN);
     gtk_size_group_add_widget(_col1, (GtkWidget *) NoOfRowsBox.gobj());
 
-    RowHeightButton.set_label(_("Equal height"));
+    RowHeightButton.set_label(_("Equal _height"));
+    RowHeightButton.set_use_underline(true);
     double AutoRow = prefs->getDouble("/dialogs/gridtiler/AutoRowSize", 15);
     if (AutoRow>0)
          AutoRowSize=true;
@@ -719,11 +728,12 @@ TileDialog::TileDialog()
 
     /*#### Number of columns ####*/
 
-    NoOfColsLabel.set_label(_("Columns:"));
+    NoOfColsLabel.set_text_with_mnemonic(_("_Columns:"));
+    NoOfColsLabel.set_mnemonic_widget(NoOfColsSpinner);
     NoOfColsBox.pack_start(NoOfColsLabel, false, false, MARGIN);
 
     NoOfColsSpinner.set_digits(0);
-    NoOfColsSpinner.set_increments(1, 5);
+    NoOfColsSpinner.set_increments(1, 0);
     NoOfColsSpinner.set_range(1.0, 100.0);
     NoOfColsSpinner.set_value(PerRow);
     NoOfColsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_row_spinbutton_changed));
@@ -731,7 +741,8 @@ TileDialog::TileDialog()
     NoOfColsBox.pack_start(NoOfColsSpinner, false, false, MARGIN);
     gtk_size_group_add_widget(_col3, (GtkWidget *) NoOfColsBox.gobj());
 
-    ColumnWidthButton.set_label(_("Equal width"));
+    ColumnWidthButton.set_label(_("Equal _width"));
+    ColumnWidthButton.set_use_underline(true);
     double AutoCol = prefs->getDouble("/dialogs/gridtiler/AutoColSize", 15);
     if (AutoCol>0)
          AutoColSize=true;
@@ -786,13 +797,15 @@ TileDialog::TileDialog()
 
     {
         /*#### Radio buttons to control spacing manually or to fit selection bbox ####*/
-        SpaceByBBoxRadioButton.set_label(_("Fit into selection box"));
+        SpaceByBBoxRadioButton.set_label(_("_Fit into selection box"));
+        SpaceByBBoxRadioButton.set_use_underline (true);
         SpaceByBBoxRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
         SpacingGroup = SpaceByBBoxRadioButton.get_group();
 
         SpacingVBox.pack_start(SpaceByBBoxRadioButton, false, false, MARGIN);
 
-        SpaceManualRadioButton.set_label(_("Set spacing:"));
+        SpaceManualRadioButton.set_label(_("_Set spacing:"));
+        SpaceManualRadioButton.set_use_underline (true);
         SpaceManualRadioButton.set_group(SpacingGroup);
         SpaceManualRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
         SpacingVBox.pack_start(SpaceManualRadioButton, false, false, MARGIN);
@@ -803,11 +816,11 @@ TileDialog::TileDialog()
     {
         /*#### Y Padding ####*/
 
-        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_row");
+        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "object-rows");
         YPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
 
         YPadSpinner.set_digits(1);
-        YPadSpinner.set_increments(0.2, 2);
+        YPadSpinner.set_increments(0.2, 0);
         YPadSpinner.set_range(-10000, 10000);
         double YPad = prefs->getDouble("/dialogs/gridtiler/YPad", 15);
         YPadSpinner.set_value(YPad);
@@ -828,11 +841,11 @@ TileDialog::TileDialog()
     {
         /*#### X padding ####*/
 
-        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_column");
+        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "object-columns");
         XPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
 
         XPadSpinner.set_digits(1);
-        XPadSpinner.set_increments(0.2, 2);
+        XPadSpinner.set_increments(0.2, 0);
         XPadSpinner.set_range(-10000, 10000);
         double XPad = prefs->getDouble("/dialogs/gridtiler/XPad", 15);
         XPadSpinner.set_value(XPad);
@@ -860,7 +873,8 @@ TileDialog::TileDialog()
     SizesHBox.set_sensitive (ManualSpacing);
 
     //## The OK button
-    TileOkButton = addResponseButton(_("Arrange"), GTK_RESPONSE_APPLY);
+    TileOkButton = addResponseButton(C_("Rows and columns dialog","_Arrange"), GTK_RESPONSE_APPLY);
+    TileOkButton->set_use_underline(true);
     tips.set_tip((*TileOkButton), _("Arrange selected objects"));
 
     show_all_children();
@@ -879,4 +893,4 @@ TileDialog::TileDialog()
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 ::
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :