X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Focaldialogs.cpp;h=7f1d72c70f3cfa5b08221c75cd0bc36f91f9d65a;hb=e38df2ff7d95236e712464a1a8c472f2d9636e53;hp=bb4661706fce105c1db9384921114f2760a02197;hpb=0f5aa157f7c7947699cb72b896da454a43145e36;p=inkscape.git diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index bb4661706..7f1d72c70 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -31,64 +31,10 @@ namespace Dialog //# F I L E E X P O R T T O O C A L //######################################################################## - -/** - * Public factory method. Used in file.cpp - */ - - FileExportToOCALDialog *FileExportToOCALDialog::create(Gtk::Window& parentWindow, - FileDialogType fileTypes, - const Glib::ustring &title, - const Glib::ustring &default_key) -{ - FileExportToOCALDialog *dialog = new FileExportToOCALDialogImpl(parentWindow, fileTypes, title, default_key); - return dialog; -} - -//######################################################################## -//# F I L E E X P O R T T O O C A L P A S S W O R D -//######################################################################## - - -/** - * Public factory method. Used in file.cpp - */ - -FileExportToOCALPasswordDialog *FileExportToOCALPasswordDialog::create(Gtk::Window& parentWindow, - const Glib::ustring &title) -{ - FileExportToOCALPasswordDialog *dialog = new FileExportToOCALPasswordDialogImpl(parentWindow, title); - return dialog; -} - - -//######################################################################### -//### F I L E I M P O R T F R O M O C A L -//######################################################################### - -/** - * Public factory. Called by file.cpp. - */ -FileImportFromOCALDialog *FileImportFromOCALDialog::create(Gtk::Window &parentWindow, - const Glib::ustring &path, - FileDialogType fileTypes, - const Glib::ustring &title) -{ - FileImportFromOCALDialog *dialog = new FileImportFromOCALDialogImplGtk(parentWindow, path, fileTypes, title); - return dialog; -} - - -//######################################################################## -//# F I L E E X P O R T T O O C A L -//######################################################################## - - - /** * Callback for fileNameEntry widget */ -void FileExportToOCALDialogImpl::fileNameEntryChangedCallback() +void FileExportToOCALDialog::fileNameEntryChangedCallback() { if (!fileNameEntry) return; @@ -101,72 +47,13 @@ void FileExportToOCALDialogImpl::fileNameEntryChangedCallback() response(Gtk::RESPONSE_OK); } - - -/** - * Callback for fileNameEntry widget - */ -void FileExportToOCALDialogImpl::fileTypeChangedCallback() -{ - int sel = fileTypeComboBox.get_active_row_number(); - if (sel<0 || sel >= (int)fileTypes.size()) - return; - FileType type = fileTypes[sel]; - - extension = type.extension; - updateNameAndExtension(); -} - - - -void FileExportToOCALDialogImpl::createFileTypeMenu() -{ - Inkscape::Extension::DB::OutputList extension_list; - Inkscape::Extension::db.get_output_list(extension_list); - knownExtensions.clear(); - - for (Inkscape::Extension::DB::OutputList::iterator current_item = extension_list.begin(); - current_item != extension_list.end(); current_item++) - { - Inkscape::Extension::Output * omod = *current_item; - - // FIXME: would be nice to grey them out instead of not listing them - if (omod->deactivated()) continue; - - FileType type; - type.name = (_(omod->get_filetypename())); - type.pattern = "*"; - Glib::ustring extension = omod->get_extension(); - knownExtensions.insert( extension.casefold() ); - fileDialogExtensionToPattern (type.pattern, extension); - type.extension= omod; - fileTypeComboBox.append_text(type.name); - fileTypes.push_back(type); - } - - //#Let user choose - FileType guessType; - guessType.name = _("Guess from extension"); - guessType.pattern = "*"; - guessType.extension = NULL; - fileTypeComboBox.append_text(guessType.name); - fileTypes.push_back(guessType); - - - fileTypeComboBox.set_active(0); - fileTypeChangedCallback(); //call at least once to set the filter -} - - - /** * Constructor */ -FileExportToOCALDialogImpl::FileExportToOCALDialogImpl(Gtk::Window &parentWindow, +FileExportToOCALDialog::FileExportToOCALDialog(Gtk::Window &parentWindow, FileDialogType fileTypes, - const Glib::ustring &title, - const Glib::ustring &default_key) : - FileDialogOCALBase(title) + const Glib::ustring &title) : + FileDialogOCALBase(title, parentWindow) { /* * Start Taking the vertical Box and putting a Label @@ -177,11 +64,10 @@ FileExportToOCALDialogImpl::FileExportToOCALDialogImpl(Gtk::Window &parentWindow extension = NULL; /* No filename to start out with */ myFilename = ""; - /* Set our dialog type (save, export, etc...)*/ dialogType = fileTypes; Gtk::VBox *vbox = get_vbox(); - + Gtk::Label *fileLabel = new Gtk::Label(_("File")); fileNameEntry = new Gtk::Entry(); @@ -191,70 +77,37 @@ FileExportToOCALDialogImpl::FileExportToOCALDialogImpl(Gtk::Window &parentWindow fileBox.pack_start(*fileNameEntry, Gtk::PACK_EXPAND_WIDGET, 3); vbox->pack_start(fileBox); - //###### Do we want the .xxx extension automatically added? - fileTypeCheckbox.set_label(Glib::ustring(_("Append filename extension automatically"))); - fileTypeCheckbox.set_active( (bool)prefs_get_int_attribute("dialogs.export", - "append_extension", 1) ); - - createFileTypeMenu(); - - fileTypeComboBox.set_size_request(200,40); - fileTypeComboBox.signal_changed().connect( - sigc::mem_fun(*this, &FileExportToOCALDialogImpl::fileTypeChangedCallback) ); - - checksBox.pack_start( fileTypeCheckbox ); - vbox->pack_start( checksBox ); - - vbox->pack_end( fileTypeComboBox ); - //Let's do some customization fileNameEntry = NULL; Gtk::Container *cont = get_toplevel(); std::vector entries; findEntryWidgets(cont, entries); - //g_message("Found %d entry widgets\n", entries.size()); if (entries.size() >=1 ) { //Catch when user hits [return] on the text field fileNameEntry = entries[0]; fileNameEntry->signal_activate().connect( - sigc::mem_fun(*this, &FileExportToOCALDialogImpl::fileNameEntryChangedCallback) ); - } - - //Let's do more customization - std::vector expanders; - findExpanderWidgets(cont, expanders); - //g_message("Found %d expander widgets\n", expanders.size()); - if (expanders.size() >=1 ) - { - //Always show the file list - Gtk::Expander *expander = expanders[0]; - expander->set_expanded(true); + sigc::mem_fun(*this, &FileExportToOCALDialog::fileNameEntryChangedCallback) ); } - add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); set_default(*add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK)); show_all_children(); } - - /** * Destructor */ -FileExportToOCALDialogImpl::~FileExportToOCALDialogImpl() +FileExportToOCALDialog::~FileExportToOCALDialog() { } - - /** * Show this dialog modally. Return true if user hits [OK] */ bool -FileExportToOCALDialogImpl::show() +FileExportToOCALDialog::show() { set_modal (TRUE); //Window sp_transientize((GtkWidget *)gobj()); //Make transient @@ -263,8 +116,6 @@ FileExportToOCALDialogImpl::show() if (b == Gtk::RESPONSE_OK) { - updateNameAndExtension(); - return TRUE; } else @@ -273,110 +124,26 @@ FileExportToOCALDialogImpl::show() } } - -/** - * Get the file extension type that was selected by the user. Valid after an [OK] - */ -Inkscape::Extension::Extension * -FileExportToOCALDialogImpl::getSelectionType() -{ - return extension; -} - -void FileExportToOCALDialogImpl::setSelectionType( Inkscape::Extension::Extension * key ) -{ - // If no pointer to extension is passed in, look up based on filename extension. - if ( !key ) { - // Not quite UTF-8 here. - gchar *filenameLower = g_ascii_strdown(myFilename.c_str(), -1); - for ( int i = 0; !key && (i < (int)fileTypes.size()); i++ ) { - Inkscape::Extension::Output *ext = dynamic_cast(fileTypes[i].extension); - if ( ext && ext->get_extension() ) { - gchar *extensionLower = g_ascii_strdown( ext->get_extension(), -1 ); - if ( g_str_has_suffix(filenameLower, extensionLower) ) { - key = fileTypes[i].extension; - } - g_free(extensionLower); - } - } - g_free(filenameLower); - } - - // Ensure the proper entry in the combo box is selected. - if ( key ) { - extension = key; - gchar const * extensionID = extension->get_id(); - if ( extensionID ) { - for ( int i = 0; i < (int)fileTypes.size(); i++ ) { - Inkscape::Extension::Extension *ext = fileTypes[i].extension; - if ( ext ) { - gchar const * id = ext->get_id(); - if ( id && ( strcmp(extensionID, id) == 0) ) { - int oldSel = fileTypeComboBox.get_active_row_number(); - if ( i != oldSel ) { - fileTypeComboBox.set_active(i); - } - break; - } - } - } - } - } -} - - /** * Get the file name chosen by the user. Valid after an [OK] */ Glib::ustring -FileExportToOCALDialogImpl::getFilename() +FileExportToOCALDialog::getFilename() { myFilename = fileNameEntry->get_text(); - updateNameAndExtension(); + if (!Glib::get_charset()) //If we are not utf8 + myFilename = Glib::filename_to_utf8(myFilename); + return myFilename; } void -FileExportToOCALDialogImpl::change_title(const Glib::ustring& title) +FileExportToOCALDialog::change_title(const Glib::ustring& title) { this->set_title(title); } -void FileExportToOCALDialogImpl::updateNameAndExtension() -{ - // Pick up any changes the user has typed in. - Glib::ustring tmp = myFilename; // get_filename(); - - Inkscape::Extension::Output* newOut = extension ? dynamic_cast(extension) : 0; - if ( fileTypeCheckbox.get_active() && newOut ) { - try { - bool appendExtension = true; - Glib::ustring utf8Name = Glib::filename_to_utf8( myFilename ); - Glib::ustring::size_type pos = utf8Name.rfind('.'); - if ( pos != Glib::ustring::npos ) { - Glib::ustring trail = utf8Name.substr( pos ); - Glib::ustring foldedTrail = trail.casefold(); - if ( (trail == ".") - | (foldedTrail != Glib::ustring( newOut->get_extension() ).casefold() - && ( knownExtensions.find(foldedTrail) != knownExtensions.end() ) ) ) { - utf8Name = utf8Name.erase( pos ); - } else { - appendExtension = false; - } - } - - if (appendExtension) { - utf8Name = utf8Name + newOut->get_extension(); - myFilename = Glib::filename_from_utf8( utf8Name ); - - } - } catch ( Glib::ConvertError& e ) { - // ignore - } - } -} - //######################################################################## //# F I L E E X P O R T T O O C A L P A S S W O R D @@ -386,8 +153,8 @@ void FileExportToOCALDialogImpl::updateNameAndExtension() /** * Constructor */ -FileExportToOCALPasswordDialogImpl::FileExportToOCALPasswordDialogImpl(Gtk::Window &parentWindow, - const Glib::ustring &title) : FileDialogOCALBase(title) +FileExportToOCALPasswordDialog::FileExportToOCALPasswordDialog(Gtk::Window &parentWindow, + const Glib::ustring &title) : FileDialogOCALBase(title, parentWindow) { /* * Start Taking the vertical Box and putting 2 Labels @@ -405,14 +172,12 @@ FileExportToOCALPasswordDialogImpl::FileExportToOCALPasswordDialogImpl(Gtk::Wind usernameEntry = new Gtk::Entry(); usernameEntry->set_text(myUsername); usernameEntry->set_max_length(255); - //usernameEntry->set_alignment(1); passwordEntry = new Gtk::Entry(); passwordEntry->set_text(myPassword); passwordEntry->set_max_length(255); passwordEntry->set_invisible_char('*'); passwordEntry->set_visibility(false); - //passwordEntry->set_alignment(1); passwordEntry->set_activates_default(true); userBox.pack_start(*userLabel); @@ -433,7 +198,7 @@ FileExportToOCALPasswordDialogImpl::FileExportToOCALPasswordDialogImpl(Gtk::Wind /** * Destructor */ -FileExportToOCALPasswordDialogImpl::~FileExportToOCALPasswordDialogImpl() +FileExportToOCALPasswordDialog::~FileExportToOCALPasswordDialog() { } @@ -441,7 +206,7 @@ FileExportToOCALPasswordDialogImpl::~FileExportToOCALPasswordDialogImpl() * Show this dialog modally. Return true if user hits [OK] */ bool -FileExportToOCALPasswordDialogImpl::show() +FileExportToOCALPasswordDialog::show() { set_modal (TRUE); //Window sp_transientize((GtkWidget *)gobj()); //Make transient @@ -462,7 +227,7 @@ FileExportToOCALPasswordDialogImpl::show() * Get the username. Valid after an [OK] */ Glib::ustring -FileExportToOCALPasswordDialogImpl::getUsername() +FileExportToOCALPasswordDialog::getUsername() { myUsername = usernameEntry->get_text(); return myUsername; @@ -472,14 +237,14 @@ FileExportToOCALPasswordDialogImpl::getUsername() * Get the password. Valid after an [OK] */ Glib::ustring -FileExportToOCALPasswordDialogImpl::getPassword() +FileExportToOCALPasswordDialog::getPassword() { myPassword = passwordEntry->get_text(); return myPassword; } void -FileExportToOCALPasswordDialogImpl::change_title(const Glib::ustring& title) +FileExportToOCALPasswordDialog::change_title(const Glib::ustring& title) { this->set_title(title); } @@ -490,17 +255,19 @@ FileExportToOCALPasswordDialogImpl::change_title(const Glib::ustring& title) //######################################################################### /* - * Callback for row activated + * Calalback for cursor chage */ -void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) +void FileListViewText::on_cursor_changed() { // create file path myFilename = Glib::get_tmp_dir(); myFilename.append(G_DIR_SEPARATOR_S); + std::vector pathlist; + pathlist = this->get_selection()->get_selected_rows(); std::vector posArray(1); - posArray = path.get_indices(); + posArray = pathlist[0].get_indices(); myFilename.append(get_text(posArray[0], 2)); - + #ifdef WITH_GNOME_VFS gnome_vfs_init(); GnomeVFSHandle *from_handle = NULL; @@ -515,7 +282,7 @@ void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::T //Glib::ustring fileUrl = "dav://"; //dav url //fileUrl.append(prefs_get_string_attribute("options.ocalurl", "str")); - //fileUrl.append("/dav/"); + //fileUrl.append("/dav.php/"); //fileUrl.append(get_text(posArray[0], 3)); //author dir //fileUrl.append("/"); //fileUrl.append(get_text(posArray[0], 2)); //filename @@ -568,10 +335,21 @@ void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::T gnome_vfs_close(to_handle); } myPreview->showImage(myFilename); + myLabel->set_text(get_text(posArray[0], 4)); #endif } +/* + * Callback for row activated + */ +void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) +{ + this->on_cursor_changed(); + myButton->activate(); +} + + /* * Returns the selected filename */ @@ -583,16 +361,17 @@ Glib::ustring FileListViewText::getFilename() /** * Callback for user input into searchTagEntry */ -void FileImportFromOCALDialogImplGtk::searchTagEntryChangedCallback() +void FileImportFromOCALDialog::searchTagEntryChangedCallback() { if (!searchTagEntry) return; notFoundLabel->hide(); + descriptionLabel->set_text(""); Glib::ustring searchTag = searchTagEntry->get_text(); // create the ocal uri to get rss feed - Glib::ustring uri = "http://www."; + Glib::ustring uri = "http://"; uri.append(prefs_get_string_attribute("options.ocalurl", "str")); uri.append("/media/feed/rss/"); uri.append(searchTag); @@ -628,8 +407,7 @@ void FileImportFromOCALDialogImplGtk::searchTagEntryChangedCallback() // open the rss feed result = gnome_vfs_open (&from_handle, uri.c_str(), GNOME_VFS_OPEN_READ); if (result != GNOME_VFS_OK) { - sp_ui_error_dialog(_("Failed to receive the Open Clip Art Library RSS feed. Verify if the URL is correct in Configuration->Misc (e.g.: openclipart.org)")); - //g_warning("Could not find the Open Clip Art Library rss feed. Verify if the OCAL url is correct in Configuration"); + sp_ui_error_dialog(_("Failed to receive the Open Clip Art Library RSS feed. Verify if the server name is correct in Configuration->Misc (e.g.: openclipart.org)")); return; } @@ -702,7 +480,7 @@ void FileImportFromOCALDialogImplGtk::searchTagEntryChangedCallback() * Prints the names of the all the xml elements * that are siblings or children of a given xml node */ -void FileImportFromOCALDialogImplGtk::print_xml_element_names(xmlNode * a_node) +void FileImportFromOCALDialog::print_xml_element_names(xmlNode * a_node) { xmlNode *cur_node = NULL; guint row_num = 0; @@ -731,6 +509,10 @@ void FileImportFromOCALDialogImplGtk::print_xml_element_names(xmlNode * a_node) { filesList->set_text(row_num, 3, (const char*)xmlNodeGetContent(cur_node)); } + else if (!strcmp((const char*)cur_node->name, "description")) + { + filesList->set_text(row_num, 4, (const char*)xmlNodeGetContent(cur_node)); + } #endif } print_xml_element_names(cur_node->children); @@ -740,13 +522,12 @@ void FileImportFromOCALDialogImplGtk::print_xml_element_names(xmlNode * a_node) /** * Constructor. Not called directly. Use the factory. */ -FileImportFromOCALDialogImplGtk::FileImportFromOCALDialogImplGtk(Gtk::Window& parentWindow, +FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, const Glib::ustring &dir, FileDialogType fileTypes, const Glib::ustring &title) : - FileDialogOCALBase(title) + FileDialogOCALBase(title, parentWindow) { - // Initalize to Autodetect extension = NULL; // No filename to start out with @@ -756,30 +537,43 @@ FileImportFromOCALDialogImplGtk::FileImportFromOCALDialogImplGtk(Gtk::Window& pa Gtk::VBox *vbox = get_vbox(); Gtk::Label *tagLabel = new Gtk::Label(_("Search Tag")); notFoundLabel = new Gtk::Label(_("No files matched your search")); + descriptionLabel = new Gtk::Label(); + descriptionLabel->set_max_width_chars(60); + descriptionLabel->set_single_line_mode(false); messageBox.pack_start(*notFoundLabel); + descriptionBox.pack_start(*descriptionLabel); searchTagEntry = new Gtk::Entry(); searchTagEntry->set_text(searchTag); - searchTagEntry->set_max_length(252); // I am giving the extension approach. + searchTagEntry->set_max_length(255); + searchButton = new Gtk::Button(_("Search")); tagBox.pack_start(*tagLabel); tagBox.pack_start(*searchTagEntry, Gtk::PACK_EXPAND_WIDGET, 3); + tagBox.pack_start(*searchButton); filesPreview = new SVGPreview(); filesPreview->showNoPreview(); - filesList = new FileListViewText(4, *filesPreview); + // add the buttons in the bottom of the dialog + add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); + okButton = add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); + // sets the okbutton to default + set_default(*okButton); + filesList = new FileListViewText(5, *filesPreview, *descriptionLabel, *okButton); filesList->set_sensitive(false); // add the listview inside a ScrolledWindow listScrolledWindow.add(*filesList); // only show the scrollbars when they are necessary: listScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); filesList->set_column_title(0, _("Files Found")); - listScrolledWindow.set_size_request(200, 180); + listScrolledWindow.set_size_request(400, 180); filesList->get_column(1)->set_visible(false); // file url filesList->get_column(2)->set_visible(false); // tmp file path filesList->get_column(3)->set_visible(false); // author dir + filesList->get_column(4)->set_visible(false); // file description filesBox.pack_start(listScrolledWindow); filesBox.pack_start(*filesPreview); vbox->pack_start(tagBox); vbox->pack_start(messageBox); vbox->pack_start(filesBox); + vbox->pack_start(descriptionBox); //Let's do some customization searchTagEntry = NULL; @@ -791,11 +585,11 @@ FileImportFromOCALDialogImplGtk::FileImportFromOCALDialogImplGtk(Gtk::Window& pa //Catch when user hits [return] on the text field searchTagEntry = entries[0]; searchTagEntry->signal_activate().connect( - sigc::mem_fun(*this, &FileImportFromOCALDialogImplGtk::searchTagEntryChangedCallback)); + sigc::mem_fun(*this, &FileImportFromOCALDialog::searchTagEntryChangedCallback)); } - add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - set_default(*add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK)); + searchButton->signal_clicked().connect( + sigc::mem_fun(*this, &FileImportFromOCALDialog::searchTagEntryChangedCallback)); show_all_children(); notFoundLabel->hide(); @@ -804,7 +598,7 @@ FileImportFromOCALDialogImplGtk::FileImportFromOCALDialogImplGtk(Gtk::Window& pa /** * Destructor */ -FileImportFromOCALDialogImplGtk::~FileImportFromOCALDialogImplGtk() +FileImportFromOCALDialog::~FileImportFromOCALDialog() { } @@ -813,7 +607,7 @@ FileImportFromOCALDialogImplGtk::~FileImportFromOCALDialogImplGtk() * Show this dialog modally. Return true if user hits [OK] */ bool -FileImportFromOCALDialogImplGtk::show() +FileImportFromOCALDialog::show() { set_modal (TRUE); //Window sp_transientize((GtkWidget *)gobj()); //Make transient @@ -835,7 +629,7 @@ FileImportFromOCALDialogImplGtk::show() * Get the file extension type that was selected by the user. Valid after an [OK] */ Inkscape::Extension::Extension * -FileImportFromOCALDialogImplGtk::getSelectionType() +FileImportFromOCALDialog::getSelectionType() { return extension; } @@ -845,7 +639,7 @@ FileImportFromOCALDialogImplGtk::getSelectionType() * Get the file name chosen by the user. Valid after an [OK] */ Glib::ustring -FileImportFromOCALDialogImplGtk::getFilename (void) +FileImportFromOCALDialog::getFilename (void) { return filesList->getFilename(); }