summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ui/dialog/ocaldialogs.cpp131
-rw-r--r--src/ui/dialog/ocaldialogs.h27
2 files changed, 114 insertions, 44 deletions
diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp
index 9662cc08b..d44d655ec 100644
--- a/src/ui/dialog/ocaldialogs.cpp
+++ b/src/ui/dialog/ocaldialogs.cpp
@@ -281,10 +281,35 @@ ExportPasswordDialog::change_title(const Glib::ustring& title)
//### F I L E I M P O R T F R O M O C A L
//#########################################################################
+SearchResultList::SearchResultList(guint columns_count, SVGPreview& filesPreview,
+ Gtk::Label& description, Gtk::Button& okButton) : ListViewText(columns_count)
+{
+ myPreview = &filesPreview;
+ myLabel = &description;
+ myButton = &okButton;
+
+ set_headers_visible(false);
+ set_column_title(RESULTS_COLUMN_MARKUP, _("Clipart found"));
+
+ Gtk::CellRenderer* cr_markup = get_column_cell_renderer(RESULTS_COLUMN_MARKUP);
+ cr_markup->set_property("ellipsize", Pango::ELLIPSIZE_END);
+ get_column(RESULTS_COLUMN_MARKUP)->clear_attributes(*cr_markup);
+ get_column(RESULTS_COLUMN_MARKUP)->add_attribute(*cr_markup,
+ "markup", RESULTS_COLUMN_MARKUP);
+
+ get_column(RESULTS_COLUMN_TITLE)->set_visible(false);
+ get_column(RESULTS_COLUMN_DESCRIPTION)->set_visible(false);
+ get_column(RESULTS_COLUMN_CREATOR)->set_visible(false);
+ get_column(RESULTS_COLUMN_DATE)->set_visible(false);
+ get_column(RESULTS_COLUMN_FILENAME)->set_visible(false);
+ get_column(RESULTS_COLUMN_URL)->set_visible(false);
+ get_column(RESULTS_COLUMN_THUMBNAIL_URL)->set_visible(false);
+}
+
/*
* Callback for cursor chage
*/
-void FileListViewText::on_cursor_changed()
+void SearchResultList::on_cursor_changed()
{
std::vector<Gtk::TreeModel::Path> pathlist;
pathlist = this->get_selection()->get_selected_rows();
@@ -316,7 +341,7 @@ void FileListViewText::on_cursor_changed()
// make sure we don't collide with other users on the same machine
myFilename = tmpname;
myFilename.append("-");
- myFilename.append(get_text(posArray[0], 2));
+ myFilename.append(get_text(posArray[0], RESULTS_COLUMN_FILENAME));
// rename based on original image's name, retaining extension
if (rename(tmpname.c_str(),myFilename.c_str())<0) {
unlink(tmpname.c_str());
@@ -325,7 +350,7 @@ void FileListViewText::on_cursor_changed()
}
//get file url
- fileUrl = get_text(posArray[0], 1); //http url
+ fileUrl = get_text(posArray[0], RESULTS_COLUMN_URL); //http url
//Inkscape::Preferences *prefs = Inkscape::Preferences::get();
//Glib::ustring fileUrl = "dav://"; //dav url
@@ -377,7 +402,7 @@ void FileListViewText::on_cursor_changed()
}
}
myPreview->showImage(myFilename);
- myLabel->set_text(get_text(posArray[0], 4));
+ myLabel->set_text(get_text(posArray[0], RESULTS_COLUMN_TITLE));
#endif
return;
fail:
@@ -390,7 +415,7 @@ failquit:
/*
* Callback for row activated
*/
-void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& /*path*/, Gtk::TreeViewColumn* /*column*/)
+void SearchResultList::on_row_activated(const Gtk::TreeModel::Path& /*path*/, Gtk::TreeViewColumn* /*column*/)
{
this->on_cursor_changed();
myButton->activate();
@@ -400,7 +425,7 @@ void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& /*path*/, Gt
/*
* Returns the selected filename
*/
-Glib::ustring FileListViewText::get_filename()
+Glib::ustring SearchResultList::get_filename()
{
return myFilename;
}
@@ -481,18 +506,25 @@ void ImportDialog::on_entry_search_changed()
// get the root element node
root_element = xmlDocGetRootElement(doc);
- // clear the list_files
- list_files->clear_items();
- list_files->set_sensitive(false);
+ // clear the list_results
+ list_results->clear_items();
+ list_results->set_sensitive(false);
// print all xml the element names
print_xml_element_names(root_element);
- if (list_files->size() == 0) {
+ if (list_results->size() == 0) {
label_not_found->show();
- list_files->set_sensitive(false);
+ list_results->set_sensitive(false);
} else {
- list_files->set_sensitive(true);
+ for (guint i = 0; i <= list_results->size() - 1; i++) {
+ Glib::ustring title = list_results->get_text(i, RESULTS_COLUMN_TITLE);
+ Glib::ustring description = list_results->get_text(i, RESULTS_COLUMN_DESCRIPTION);
+ char* markup = g_markup_printf_escaped("<b>%s</b>\n%s",
+ title.c_str(), description.c_str());
+ list_results->set_text(i, RESULTS_COLUMN_MARKUP, markup);
+ }
+ list_results->set_sensitive(true);
}
// free the document
@@ -512,6 +544,7 @@ void ImportDialog::print_xml_element_names(xmlNode * a_node)
{
xmlNode *cur_node = NULL;
guint row_num = 0;
+
for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
// Get items information
if (strcmp((const char*)cur_node->name, "rss")) // Avoid the root
@@ -519,27 +552,63 @@ void ImportDialog::print_xml_element_names(xmlNode * a_node)
{
if (!strcmp((const char*)cur_node->name, "title"))
{
- xmlChar *title = xmlNodeGetContent(cur_node);
- row_num = list_files->append_text((const char*)title);
+ row_num = list_results->append_text("");
+ xmlChar *xml_title = xmlNodeGetContent(cur_node);
+ char* title = (char*) xml_title;
+
+ list_results->set_text(row_num, RESULTS_COLUMN_TITLE, title);
xmlFree(title);
}
#ifdef WITH_GNOME_VFS
- else if (!strcmp((const char*)cur_node->name, "enclosure"))
+ else if (!strcmp((const char*)cur_node->name, "pubDate"))
{
- xmlChar *urlattribute = xmlGetProp(cur_node, (xmlChar*)"url");
- list_files->set_text(row_num, 1, (const char*)urlattribute);
- gchar *tmp_file;
- tmp_file = gnome_vfs_uri_extract_short_path_name(gnome_vfs_uri_new((const char*)urlattribute));
- list_files->set_text(row_num, 2, (const char*)tmp_file);
- xmlFree(urlattribute);
+ xmlChar *xml_date = xmlNodeGetContent(cur_node);
+ char* date = (char*) xml_date;
+
+ list_results->set_text(row_num, RESULTS_COLUMN_DATE, date);
+ xmlFree(xml_date);
}
else if (!strcmp((const char*)cur_node->name, "creator"))
{
- list_files->set_text(row_num, 3, (const char*)xmlNodeGetContent(cur_node));
+ xmlChar *xml_creator = xmlNodeGetContent(cur_node);
+ char* creator = (char*) xml_creator;
+
+ list_results->set_text(row_num, RESULTS_COLUMN_CREATOR, creator);
+ xmlFree(xml_creator);
}
else if (!strcmp((const char*)cur_node->name, "description"))
{
- list_files->set_text(row_num, 4, (const char*)xmlNodeGetContent(cur_node));
+ xmlChar *xml_description = xmlNodeGetContent(cur_node);
+ //char* final_description;
+ char* stripped_description = g_strstrip((char*) xml_description);
+
+ if (!strcmp(stripped_description, "")) {
+ stripped_description = _("No description");
+ }
+
+ //GRegex* regex = g_regex_new(g_regex_escape_string(stripped_description, -1));
+ //final_description = g_regex_replace_literal(regex, "\n", -1, 0, " ");
+
+ list_results->set_text(row_num, RESULTS_COLUMN_DESCRIPTION, stripped_description);
+ xmlFree(xml_description);
+ }
+ else if (!strcmp((const char*)cur_node->name, "enclosure"))
+ {
+ xmlChar *xml_url = xmlGetProp(cur_node, (xmlChar*) "url");
+ char* url = (char*) xml_url;
+ char* filename = gnome_vfs_uri_extract_short_path_name(gnome_vfs_uri_new(url));
+
+ list_results->set_text(row_num, RESULTS_COLUMN_URL, url);
+ list_results->set_text(row_num, RESULTS_COLUMN_FILENAME, filename);
+ xmlFree(xml_url);
+ }
+ else if (!strcmp((const char*)cur_node->name, "thumbnail"))
+ {
+ xmlChar *xml_thumbnail_url = xmlGetProp(cur_node, (xmlChar*) "url");
+ char* thumbnail_url = (char*) xml_thumbnail_url;
+
+ list_results->set_text(row_num, RESULTS_COLUMN_THUMBNAIL_URL, thumbnail_url);
+ xmlFree(xml_thumbnail_url);
}
#endif
}
@@ -574,7 +643,8 @@ ImportDialog::ImportDialog(Gtk::Window& parent_window,
/// Add the buttons in the bottom of the dialog
add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
button_import = add_button(_("Import"), Gtk::RESPONSE_OK);
- list_files = new FileListViewText(5, *preview_files, *label_description, *button_import);
+ list_results = new SearchResultList(RESULTS_COLUMN_LENGTH,
+ *preview_files, *label_description, *button_import);
// Properties
set_border_width(12);
@@ -585,21 +655,14 @@ ImportDialog::ImportDialog(Gtk::Window& parent_window,
hbox_tags.set_spacing(6);
preview_files->showNoPreview();
set_default(*button_import);
- list_files->set_sensitive(false);
+ list_results->set_sensitive(false);
/// Add the listview inside a ScrolledWindow
- scrolledwindow_list.add(*list_files);
+ scrolledwindow_list.add(*list_results);
scrolledwindow_list.set_shadow_type(Gtk::SHADOW_IN);
/// Only show the scrollbars when they are necessary
scrolledwindow_list.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
- list_files->set_column_title(0, _("Files found"));
scrolledwindow_list.set_size_request(310, 230);
- list_files->set_headers_visible(false);
- list_files->get_column(1)->set_visible(false); // file url
- list_files->get_column(2)->set_visible(false); // tmp file path
- list_files->get_column(3)->set_visible(false); // author dir
- list_files->get_column(4)->set_visible(false); // file description
-
hbox_files.set_spacing(12);
label_not_found->hide();
@@ -677,7 +740,7 @@ ImportDialog::get_selection_type()
Glib::ustring
ImportDialog::get_filename (void)
{
- return list_files->get_filename();
+ return list_results->get_filename();
}
diff --git a/src/ui/dialog/ocaldialogs.h b/src/ui/dialog/ocaldialogs.h
index 7ec2841ae..8d844cd26 100644
--- a/src/ui/dialog/ocaldialogs.h
+++ b/src/ui/dialog/ocaldialogs.h
@@ -257,19 +257,26 @@ private:
//### F I L E I M P O R T F R O M O C A L
//#########################################################################
+enum {
+ RESULTS_COLUMN_MARKUP,
+ RESULTS_COLUMN_TITLE,
+ RESULTS_COLUMN_DESCRIPTION,
+ RESULTS_COLUMN_CREATOR,
+ RESULTS_COLUMN_DATE,
+ RESULTS_COLUMN_FILENAME,
+ RESULTS_COLUMN_URL,
+ RESULTS_COLUMN_THUMBNAIL_URL,
+ RESULTS_COLUMN_LENGTH,
+};
+
/**
- * Our implementation class for filesListView
+ * The TreeView which holds the search results
*/
-class FileListViewText : public Gtk::ListViewText
+class SearchResultList : public Gtk::ListViewText
{
public:
- FileListViewText(guint columns_count, SVGPreview& filesPreview, Gtk::Label& description, Gtk::Button& okButton)
- :ListViewText(columns_count)
- {
- myPreview = &filesPreview;
- myLabel = &description;
- myButton = &okButton;
- }
+ SearchResultList(guint columns_count, SVGPreview& filesPreview,
+ Gtk::Label& description, Gtk::Button& okButton);
Glib::ustring get_filename();
protected:
void on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
@@ -325,7 +332,7 @@ private:
* Allow the user to type the tag to be searched
*/
Gtk::Entry *entry_search;
- FileListViewText *list_files;
+ SearchResultList *list_results;
SVGPreview *preview_files;
Gtk::Label *label_not_found;
Gtk::Label *label_description;