Exemplo n.º 1
0
FilePropsDialog::FilePropsDialog(FmFileInfoList* files, QWidget* parent, Qt::WindowFlags f):
  QDialog(parent, f),
  fileInfos_(fm_file_info_list_ref(files)),
  singleType(fm_file_info_list_is_same_type(files)),
  singleFile(fm_file_info_list_get_length(files) == 1 ? true:false),
  fileInfo(fm_file_info_list_peek_head(files)),
  mimeType(NULL) {

  setAttribute(Qt::WA_DeleteOnClose);

  ui = new Ui::FilePropsDialog();
  ui->setupUi(this);

  if(singleType) {
    mimeType = fm_mime_type_ref(fm_file_info_get_mime_type(fileInfo));
  }

  FmPathList* paths = fm_path_list_new_from_file_info_list(files);
  deepCountJob = fm_deep_count_job_new(paths, FM_DC_JOB_DEFAULT);
  fm_path_list_unref(paths);

  initGeneralPage();
  initPermissionsPage();
}
Exemplo n.º 2
0
/**
 * fm_app_chooser_dlg_new
 * @mime_type: (allow-none): MIME type for list creation
 * @can_set_default: %TRUE if widget can set selected item as default for @mime_type
 *
 * Creates a widget for choosing an application either from tree of
 * existing ones or also allows to set up own command for it.
 *
 * Returns: (transfer full): a widget.
 *
 * Since: 0.1.0
 */
GtkDialog *fm_app_chooser_dlg_new(FmMimeType* mime_type, gboolean can_set_default)
{
    GtkContainer* scroll;
    GtkLabel *file_type, *file_type_header;
    GtkTreeSelection* tree_sel;
    GtkBuilder* builder = gtk_builder_new();
    AppChooserData* data = g_slice_new0(AppChooserData);

    gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE);
    gtk_builder_add_from_file(builder, PACKAGE_UI_DIR "/app-chooser.ui", NULL);
    data->dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg"));
    data->notebook = GTK_NOTEBOOK(gtk_builder_get_object(builder, "notebook"));
    scroll = GTK_CONTAINER(gtk_builder_get_object(builder, "apps_scroll"));
    file_type = GTK_LABEL(gtk_builder_get_object(builder, "file_type"));
    file_type_header = GTK_LABEL(gtk_builder_get_object(builder, "file_type_header"));
    data->cmdline = GTK_ENTRY(gtk_builder_get_object(builder, "cmdline"));
    data->set_default = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "set_default"));
    data->use_terminal = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "use_terminal"));
    data->keep_open = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "keep_open"));
    data->browse_btn = GTK_WIDGET(gtk_builder_get_object(builder, "browse_btn"));
    data->app_name = GTK_ENTRY(gtk_builder_get_object(builder, "app_name"));
    /* FIXME: shouldn't verify if app-chooser.ui was correct? */
    if(mime_type)
        data->mime_type = fm_mime_type_ref(mime_type);

    gtk_dialog_set_alternative_button_order(data->dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);

    if(!can_set_default)
        gtk_widget_hide(GTK_WIDGET(data->set_default));

    if(mime_type && fm_mime_type_get_desc(mime_type))
    {
        if (file_type_header)
        {
            char *text = g_strdup_printf(_("<b>Select an application to open \"%s\" files</b>"),
                                         fm_mime_type_get_desc(mime_type));
            gtk_label_set_markup(file_type_header, text);
            g_free(text);
        }
        else
            gtk_label_set_text(file_type, fm_mime_type_get_desc(mime_type));
    }
    else
    {
        GtkWidget* hbox = GTK_WIDGET(gtk_builder_get_object(builder, "file_type_hbox"));
        gtk_widget_destroy(hbox);
        gtk_widget_hide(GTK_WIDGET(data->set_default));
    }

    data->apps_view = fm_app_menu_view_new();
    gtk_tree_view_set_headers_visible(data->apps_view, FALSE);
    gtk_widget_show(GTK_WIDGET(data->apps_view));
    gtk_container_add(scroll, GTK_WIDGET(data->apps_view));
    gtk_widget_grab_focus(GTK_WIDGET(data->apps_view));

    g_object_unref(builder);

    g_signal_connect(data->browse_btn, "clicked", G_CALLBACK(on_browse_btn_clicked), data);

    g_object_set_qdata_full(G_OBJECT(data->dlg), fm_qdata_id, data, (GDestroyNotify)on_dlg_destroy);
    g_signal_connect(data->notebook, "switch-page", G_CALLBACK(on_switch_page), data);
    on_switch_page(data->notebook, NULL, 0, data);
    tree_sel = gtk_tree_view_get_selection(data->apps_view);
    g_signal_connect(tree_sel, "changed", G_CALLBACK(on_apps_view_sel_changed), data);
    g_signal_connect(data->cmdline, "changed", G_CALLBACK(on_cmdline_changed), data);
    g_signal_connect(data->use_terminal, "toggled", G_CALLBACK(on_use_terminal_changed), data);
    gtk_dialog_set_response_sensitive(data->dlg, GTK_RESPONSE_OK, FALSE);

    return data->dlg;
}
Exemplo n.º 3
0
/**
 * fm_app_chooser_combo_box_setup
 * @combo: a #GtkComboBox
 * @mime_type: (allow-none): a #FmMimeType to select application
 * @apps: (allow-none) (element-type GAppInfo): custom list of applications
 * @sel: (allow-none): a selected application in @apps
 *
 * Setups a combobox for selecting default application either for
 * specified mime-type or from a list of pre-defined applications.
 * If @mime_type is %NULL, and @sel is provided and found in the @apps,
 * then it will be selected. If @mime_type is not %NULL then default
 * application for the @mime_type will be selected.
 * When set up, the combobox will contain a list of available applications.
 *
 * Since: 0.1.5
 */
void fm_app_chooser_combo_box_setup(GtkComboBox* combo, FmMimeType* mime_type, GList* apps, GAppInfo* sel)
{
    FmAppChooserComboBoxData* data = g_slice_new0(FmAppChooserComboBoxData);
    GtkListStore* store = gtk_list_store_new(3, G_TYPE_ICON, G_TYPE_STRING, G_TYPE_APP_INFO);
    GtkTreeIter it;
    GList* l;
    GtkCellRenderer* render;

    gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo));

    render = gtk_cell_renderer_pixbuf_new();
    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), render, FALSE);
    gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combo), render, "gicon", 0);

    render = gtk_cell_renderer_text_new();
    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), render, FALSE);
    gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combo), render, "text", 1);

    if(mime_type)
    {
        data->mime_type = fm_mime_type_ref(mime_type);
        apps = g_app_info_get_all_for_type(fm_mime_type_get_type(data->mime_type));
        sel =  g_app_info_get_default_for_type(fm_mime_type_get_type(data->mime_type), FALSE);
    }

    for(l = apps; l; l = l->next)
    {
        GAppInfo* app = G_APP_INFO(l->data);
        gtk_list_store_insert_with_values(store, &it, -1,
                           0, g_app_info_get_icon(app),
                           1, g_app_info_get_name(app),
                           2, app, -1);
        if(sel && g_app_info_equal(app, sel))
        {
            /* this is the initially selected app */
            data->initial_sel_iter = it;
            data->initial_sel_app = (GAppInfo*)g_object_ref(app);
        }
    }

    if(mime_type) /* if this list is retrived with g_app_info_get_all_for_type() */
    {
        if(apps)
        {
            g_list_foreach(apps, (GFunc)g_object_unref, NULL);
            g_list_free(apps);
        }
        if(sel)
            g_object_unref(sel);
    }

    gtk_list_store_append(store, &it); /* separator */
    data->separator_iter = it;

    /* other applications */
    gtk_list_store_insert_with_values(store, &it, -1,
                       0, NULL,
                       1, _("Customize"), // FIXME: should be "Customize..."
                       2, NULL, -1);
    data->other_apps_iter = it;
    gtk_combo_box_set_model(combo, GTK_TREE_MODEL(store));

    if(data->initial_sel_iter.user_data) /* intital selection is set */
    {
        data->prev_sel_iter = data->initial_sel_iter;
        gtk_combo_box_set_active_iter(combo, &data->initial_sel_iter);
    }
    gtk_combo_box_set_row_separator_func(combo, is_row_separator, data, NULL);
    g_object_unref(store);

    g_signal_connect(combo, "changed", G_CALLBACK(on_app_selected), data);
    g_object_set_qdata_full(G_OBJECT(combo), fm_qdata_id, data, free_data);
}