GTK+ ile Panoya (clipboard) Kopyalama Örneği

Başlatan sem, 24 Mart 2011 - 02:17:53

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sem

Arkadaşlar program olarak işinize yarayacak bir uygulama değil.  Masaüstü Yarışması anketini açarken kolaylık olsun diye yapılmış bir çalışmadır. İşinize yaramayacak olsa da ne işe yaradığından bahsedeyim;




Şekildeki gibi dolduruyoruz programı. Ben şunları yazdım;

Bağlantı:  http://forum.ubuntu-tr.net/index.php/topic,22594.0.html
Başlık:     Yazılım Geliştirme Ekibine Proje Öneri/İstekleriniz

Gönder dediğimizde bağlantı ve başlık adresini verdiğimiz sayfaya ileti atan kişilerin kullanıcı isimleri ve attığı iletilerin bağlantı adreslerini veriyor. İlk ileti göndereni es geçiyor program, çünkü sadece masaüstü yarışması anketi için yapıldı.



Öylesine denedim konuyu açarken, örnek olarak girdiğim bağlantı ile de çalıştı

Başlık ile alakalı olan kısım ise; yukarıdaki resimde herhangi bir kullanıcı ismi ya da kullanıcının göndermiş olduğu bağkanlı tıklanırsa (sağ, sol, orta fark etmiyor), üzerine tıklanan bilgi panoya kopyalanmış oluyor. Yani ctrl + v ile tıkladığımız bilgiye ulaşabiliyoruz.

Yani GTK+ üzerinden doğrudan bu işlemi yapabiliyoruz. Kodlar aşağıdadır;

anketor.c
/*
* anketor.c
*
*  Created on: Mar 23, 2011
*      Author: sem0900
*/

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <gtk/gtk.h>

struct Kullanici{
char *baglanti;
char *kullanici_adi;
}kullanici;


GtkWidget *main_window, *label, *text_m, *button, *main_hbox, *vbox, *hbox, *separator, *text_l, *label1, *separator2, *label_s;

void clean_main_window(void)
{
gtk_container_remove(GTK_CONTAINER(main_hbox), vbox);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(main_hbox), vbox, FALSE, FALSE, 0);
gtk_widget_show(vbox);

label_s = gtk_label_new("");
gtk_box_pack_start(GTK_BOX(vbox), label_s, FALSE, FALSE, 0);
gtk_widget_show(GTK_WIDGET(label_s));



}

void get_html (void)
{
char command[500];

sprintf(command, "wget %s --output-document=.a.html", (char *)gtk_entry_get_text(GTK_ENTRY(text_l)));
system(command);
}

void set_clipboard(GtkWidget *widget, gpointer data)
{
GtkClipboard  *clip2;

clip2 =   gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
gtk_clipboard_set_text(clip2, gtk_entry_get_text(GTK_ENTRY(widget)), -1);
}

void fill (GtkWidget *widget, char *parameter){

FILE * html;
char *html_path = ".a.html";
char *buf, *ara_buf, *baslik;
int i = 0, j = 0;

get_html();

if((html = fopen(html_path, "r")) == NULL){
fprintf(stdout, "html Dosyası açılamadı\n");
perror("fopen");
exit(EXIT_FAILURE);
}

buf = (char *) calloc(1500, sizeof(char));
baslik = (char *) calloc(150, sizeof(char));
sprintf(baslik, "Ynt: %s", parameter);

if(buf == NULL){
fprintf(stdout, "Buf için yer ayrılamadı*n");
perror("calloc");
exit(EXIT_FAILURE);
}


    kullanici.baglanti = (char *)calloc(300, sizeof(char));
    kullanici.kullanici_adi = (char *)calloc(50, sizeof(char));

    if(kullanici.baglanti == NULL || kullanici.kullanici_adi == NULL){
    fprintf(stdout, "Kullanici için yer ayrılamadı");
    perror("calloc");
    exit(EXIT_FAILURE);
    }
    clean_main_window();
    while(!feof(html)){
    fgets(buf, 1000, html);

    ara_buf = strstr(buf, "Profilini görüntüle: ");

    if(ara_buf != NULL){
    ara_buf += 24;
    for(i = 0; ; ++i){
    if(ara_buf[i] != '\"')
    kullanici.kullanici_adi[i] = ara_buf[i];
    else{
    kullanici.kullanici_adi[i] = '\0';
    break;
    }
    }
    if(j != 0){
    text_m = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(text_m), kullanici.kullanici_adi);
    gtk_box_pack_start(GTK_BOX(vbox), text_m, FALSE, FALSE, 0);
    g_signal_connect(G_OBJECT(text_m), "button-press-event",G_CALLBACK(set_clipboard), (gpointer) kullanici.kullanici_adi);
    gtk_widget_show(text_m);
    }

    ++j;

    }

    }

    separator = gtk_vseparator_new();
    gtk_box_pack_start(GTK_BOX(main_hbox), separator, FALSE ,FALSE ,10);
    gtk_widget_show(separator);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(main_hbox), vbox, FALSE, FALSE, 0);
gtk_widget_show(GTK_WIDGET(vbox));
label_s = gtk_label_new("                                                                                    ");
gtk_box_pack_start(GTK_BOX(vbox), label_s, FALSE, FALSE, 0);
gtk_widget_show(GTK_WIDGET(label_s));



    rewind(html);

    while(!feof(html)){
    fgets(buf, 1000, html);

    ara_buf = strstr(buf, baslik);
    if(ara_buf != NULL){
    ara_buf -= 145;
    ara_buf = strstr (ara_buf,"<a href=\"");
    ara_buf += 9;

    for(i = 0; ; ++i){
    if(ara_buf[i] != '\"')
    kullanici.baglanti[i] = ara_buf[i];
    else{
    kullanici.baglanti[i] = '\0';
    break;
    }
    }
text_m = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(text_m), kullanici.baglanti);
gtk_box_pack_start(GTK_BOX(vbox), text_m, FALSE, FALSE, 0);
gtk_widget_show(text_m);
g_signal_connect(G_OBJECT(text_m), "button-press-event",G_CALLBACK(set_clipboard), (gpointer) kullanici.baglanti);

    }
    }

    fclose(html);
    free(kullanici.baglanti);
    free(kullanici.kullanici_adi);
    free(buf);
    free(ara_buf);

    remove(".a.html");


}

void destroy( GtkWidget *widget, gpointer   data )
{
    g_print("Program Kapatılıyor...\n");
    gtk_main_quit ();
}

void create_main_window(void)
{
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW (main_window), "Anketör");
gtk_window_set_position(GTK_WINDOW(main_window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(main_window), 10);
g_signal_connect (main_window, "destroy",  G_CALLBACK (destroy), NULL);
gtk_window_set_resizable (GTK_WINDOW(main_window), FALSE);

main_hbox = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(main_window), main_hbox);

vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(main_hbox), vbox, FALSE, FALSE, 0);

label_s = gtk_label_new("                                                                                     ");
gtk_box_pack_start(GTK_BOX(vbox), label_s, FALSE, FALSE, 0);

label1 = gtk_label_new("Bağlantı Adresi:");
gtk_box_pack_start(GTK_BOX(vbox), label1, FALSE, FALSE, 0);

text_l = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox), text_l, FALSE, FALSE, 0);

    separator2 = gtk_hseparator_new();
    gtk_box_pack_start(GTK_BOX(vbox), separator2, FALSE, FALSE, 15);

label = gtk_label_new("Anketin Başlığını Girin:");
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);

text_m = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox), text_m, FALSE, FALSE, 0);

     button = gtk_button_new_with_label("Gönder");
     gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
     g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(fill), (char *)gtk_entry_get_text(GTK_ENTRY(text_m)));

     separator = gtk_hseparator_new();
     gtk_box_pack_start(GTK_BOX(vbox), separator, FALSE, FALSE, 15);

gtk_widget_show_all(GTK_WIDGET(main_window));

}

int main(int argc, char *argv[])
{

gtk_init (&argc, &argv);

    create_main_window();
    gtk_main();
    return 0;
}
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?