Commit 973a3381 authored by twanvl's avatar twanvl

Fix #25: Program throws exception when clicking on the 'stylesheet' list if...

Fix #25: Program throws exception when clicking on the 'stylesheet' list if there are no stylesheets.
parent 18d144a3
...@@ -37,6 +37,11 @@ class GalleryList : public wxPanel { ...@@ -37,6 +37,11 @@ class GalleryList : public wxPanel {
void select(size_t item, size_t subcol = NO_SELECTION, bool event = true); void select(size_t item, size_t subcol = NO_SELECTION, bool event = true);
/// Is there an item selected? /// Is there an item selected?
inline bool hasSelection(size_t subcol = 0) const { return subcolumns[subcol].selection < itemCount(); } inline bool hasSelection(size_t subcol = 0) const { return subcolumns[subcol].selection < itemCount(); }
/// Get the id of the selected item, throws if there is no selection
inline size_t getSelectionId(size_t subcol = 0) const {
if (!hasSelection(subcol)) throw Error(_("No selection"));
return subcolumns[subcol].selection;
}
/// Is the given item selected? /// Is the given item selected?
inline bool isSelected(size_t item, size_t subcol = 0) const { inline bool isSelected(size_t item, size_t subcol = 0) const {
return subcol < subcolumns.size() && subcolumns[subcol].selection == item; return subcol < subcolumns.size() && subcolumns[subcol].selection == item;
......
...@@ -39,7 +39,7 @@ class PackageList : public GalleryList { ...@@ -39,7 +39,7 @@ class PackageList : public GalleryList {
* Throws if the selection is not of type T */ * Throws if the selection is not of type T */
template <typename T> template <typename T>
intrusive_ptr<T> getSelection(bool load_fully = true) const { intrusive_ptr<T> getSelection(bool load_fully = true) const {
intrusive_ptr<T> ret = dynamic_pointer_cast<T>(packages.at(subcolumns[0].selection).package); intrusive_ptr<T> ret = dynamic_pointer_cast<T>(packages.at(getSelectionId()).package);
if (!ret) throw InternalError(_("PackageList: Selected package has the wrong type")); if (!ret) throw InternalError(_("PackageList: Selected package has the wrong type"));
if (load_fully) ret->loadFully(); if (load_fully) ret->loadFully();
return ret; return ret;
......
...@@ -90,6 +90,7 @@ void NewSetWindow::OnOK(wxCommandEvent&) { ...@@ -90,6 +90,7 @@ void NewSetWindow::OnOK(wxCommandEvent&) {
void NewSetWindow::done() { void NewSetWindow::done() {
try { try {
if (!stylesheet_list->hasSelection()) return;
StyleSheetP stylesheet = stylesheet_list->getSelection<StyleSheet>(); StyleSheetP stylesheet = stylesheet_list->getSelection<StyleSheet>();
set = intrusive(new Set(stylesheet)); set = intrusive(new Set(stylesheet));
set->validate(); set->validate();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment