X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Ftile.cpp;h=6be3465828cc5775490791a0a84d3a2bd9ea8ad5;hb=99b6d29bef809e0654e228aea3129af743fd9008;hp=5741fee4d469016fd570f5136dd44c1633b43119;hpb=f5d57c26ee63ac2bd5417a6bcc19d90b227ae797;p=inkscape.git diff --git a/src/ui/dialog/tile.cpp b/src/ui/dialog/tile.cpp index 5741fee4d..6be346582 100644 --- a/src/ui/dialog/tile.cpp +++ b/src/ui/dialog/tile.cpp @@ -31,6 +31,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) @@ -161,7 +162,7 @@ void TileDialog::Grid_Arrange () sp_document_ensure_up_to_date(sp_desktop_document(desktop)); 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); @@ -193,6 +194,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; @@ -373,7 +375,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 +401,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 +564,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 (selcountsetInt("/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(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(PerCol)); - } - updating=false; - + updating = false; } @@ -632,7 +637,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(); @@ -653,7 +659,7 @@ TileDialog::TileDialog() 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)); @@ -723,7 +729,7 @@ TileDialog::TileDialog() 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)); @@ -803,11 +809,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 +834,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 +866,7 @@ TileDialog::TileDialog() SizesHBox.set_sensitive (ManualSpacing); //## The OK button - TileOkButton = addResponseButton(_("Arrange"), GTK_RESPONSE_APPLY); + TileOkButton = addResponseButton(Q_("tileClonesDialog|Arrange"), GTK_RESPONSE_APPLY); tips.set_tip((*TileOkButton), _("Arrange selected objects")); show_all_children();