ocaldialogs.cpp revision 48817eee9e9d80e1163979cce5334cf09e0b99a5
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * @brief Open Clip Art Library integration dialogs - implementation
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Bruno Dilly
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Other dudes from The Inkscape Organization
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Andrew Higginson
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Copyright (C) 2007 Bruno Dilly <bruno.dilly@gmail.com>
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Released under GNU GPL, read the file 'COPYING' for more information
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico//########################################################################
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico//# F I L E E X P O R T T O O C A L
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico//########################################################################
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Callback for fileNameEntry widget
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicovoid ExportDialog::fileNameEntryChangedCallback()
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico if (!fileNameEntry)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico Glib::ustring fileName = fileNameEntry->get_text();
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico if (!Glib::get_charset()) //If we are not utf8
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileName = Glib::filename_to_utf8(fileName);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico myFilename = fileName;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico response(Gtk::RESPONSE_OK);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Constructor
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNicoExportDialog::ExportDialog(Gtk::Window &parentWindow,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico FileDialogType fileTypes,
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico const Glib::ustring &title) :
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico FileDialogBase(title, parentWindow)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Start Taking the vertical Box and putting a Label
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * and a Entry to take the filename
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico * Later put the extension selection and checkbox (?)
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico /* Initalize to Autodetect */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner extension = NULL;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico /* No filename to start out with */
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico myFilename = "";
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico /* Set our dialog type (save, export, etc...)*/
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico dialogType = fileTypes;
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico Gtk::VBox *vbox = get_vbox();
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico Gtk::Label *fileLabel = new Gtk::Label(_("File"));
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileNameEntry = new Gtk::Entry();
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileNameEntry->set_text(myFilename);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileNameEntry->set_max_length(252); // I am giving the extension approach.
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileBox.pack_start(*fileLabel);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico fileBox.pack_start(*fileNameEntry, Gtk::PACK_EXPAND_WIDGET, 3);
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico vbox->pack_start(fileBox);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner //Let's do some customization
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner fileNameEntry = NULL;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Gtk::Container *cont = get_toplevel();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner std::vector<Gtk::Entry *> entries;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner findEntryWidgets(cont, entries);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (entries.size() >=1 )
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner //Catch when user hits [return] on the text field
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner fileNameEntry = entries[0];
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner fileNameEntry->signal_activate().connect(
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner sigc::mem_fun(*this, &ExportDialog::fileNameEntryChangedCallback) );
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner set_default(*add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK));
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner show_all_children();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Destructor
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportDialog::~ExportDialog()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Show this dialog modally. Return true if user hits [OK]
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportDialog::show()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner set_modal (TRUE); //Window
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner sp_transientize((GtkWidget *)gobj()); //Make transient
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner gint b = run(); //Dialog
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (b == Gtk::RESPONSE_OK)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return TRUE;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return FALSE;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Get the file name chosen by the user. Valid after an [OK]
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerGlib::ustring
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportDialog::get_filename()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myFilename = fileNameEntry->get_text();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (!Glib::get_charset()) //If we are not utf8
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myFilename = Glib::filename_to_utf8(myFilename);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return myFilename;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportDialog::change_title(const Glib::ustring& title)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner this->set_title(title);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//########################################################################
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//# F I L E E X P O R T T O O C A L P A S S W O R D
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//########################################################################
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Constructor
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::ExportPasswordDialog(Gtk::Window &parentWindow,
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner const Glib::ustring &title) : FileDialogBase(title, parentWindow)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Start Taking the vertical Box and putting 2 Labels
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * and 2 Entries to take the username and password
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner /* No username and password to start out with */
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myUsername = "";
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myPassword = "";
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Gtk::VBox *vbox = get_vbox();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Gtk::Label *userLabel = new Gtk::Label(_("Username:"));
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Gtk::Label *passLabel = new Gtk::Label(_("Password:"));
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner usernameEntry = new Gtk::Entry();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner usernameEntry->set_text(myUsername);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner usernameEntry->set_max_length(255);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry = new Gtk::Entry();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry->set_text(myPassword);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry->set_max_length(255);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry->set_invisible_char('*');
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry->set_visibility(false);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passwordEntry->set_activates_default(true);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner userBox.pack_start(*userLabel);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner userBox.pack_start(*usernameEntry, Gtk::PACK_EXPAND_WIDGET, 3);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner vbox->pack_start(userBox);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passBox.pack_start(*passLabel);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner passBox.pack_start(*passwordEntry, Gtk::PACK_EXPAND_WIDGET, 3);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner vbox->pack_start(passBox);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner set_default(*add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK));
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner show_all_children();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Destructor
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::~ExportPasswordDialog()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Show this dialog modally. Return true if user hits [OK]
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::show()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner set_modal (TRUE); //Window
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner sp_transientize((GtkWidget *)gobj()); //Make transient
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner gint b = run(); //Dialog
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner if (b == Gtk::RESPONSE_OK)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return TRUE;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return FALSE;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Get the username. Valid after an [OK]
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerGlib::ustring
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::getUsername()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myUsername = usernameEntry->get_text();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return myUsername;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner * Get the password. Valid after an [OK]
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerGlib::ustring
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::getPassword()
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner myPassword = passwordEntry->get_text();
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner return myPassword;
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerExportPasswordDialog::change_title(const Glib::ustring& title)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner this->set_title(title);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//#########################################################################
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//### F I L E I M P O R T F R O M O C A L
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner//#########################################################################
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner signal_expose_event().connect(sigc::mem_fun(*this, &LoadingBox::_on_expose_event), false);
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapennerbool LoadingBox::_on_expose_event(GdkEventExpose* event)
ffbd2f8fa3a83d1d4ad8cd672cf738ffaa5cdfeeapenner Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context();
4a7ebbf91a516d588a7dcc45921c17a896b65f62JazzyNico // Draw shadow
if (draw_spinner) {
draw_spinner = true;
draw_spinner = false;
if (draw_spinner) {
spinner_step = 0;
spinner_step ++;
queue_draw();
clear();
show_all();
clear();
void SearchEntry::_on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* event)
grab_focus();
grab_focus();
set_visible_window(false);
draw_logo = true;
draw_logo = false;
set_visible_window(false);
if (draw_logo) {
set_headers_visible(false);
for (int i = 0; i < RESULTS_COLUMN_LENGTH; i++) {
if (i != RESULTS_COLUMN_MARKUP) {
success = false;
if (!success) {
std::string path_thumbnail = Glib::build_filename(ocal_tmp_thumbnail_dir, filename_thumbnail.c_str());
success = false;
if (!success) {
hide_all();
char* data;
if (!sucess) {
if (length == 0) {
return extension;
return m_signal_response;