/* WebDownloader for X-Window
* Copyright (C) 1999-2002 Koshelev Maxim
* This Program is free but not GPL!!! You can't modify it
* without agreement with author. You can't distribute modified
* program but you can distribute unmodified program.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <stdio.h>
#include "list.h"
#include "about.h"
#include "misc.h"
#include "../var.h"
#include "../ntlocale.h"
GtkWidget *AboutWindow=(GtkWidget *)NULL;
GtkWidget *AboutTLabel,*AboutSLabel;
char *TRANSLATORS[]={
"Emil (emil5@go2.pl) [pl.po]",
"Sa'ndor Pinte'r [hu.po]",
"Brane Jovanovic [sr.po]",
"Liu Songhe [zh_CN.po]",
"Utumi Hirosi [ja.po]",
"Jerome Couderc [fr.po]",
"Zdenko Podobny [sk.po]",
"Brane Jovanovic [sr.po]",
"Thomas R. Koll [de.po]",
"Gustavo D. Vranjes [es.po]",
"Olexander Kunytsa [uk.po]",
"Marco Martin [es.po]",
"Vittorio Rebecchi [es.po]",
"Iordan Pavlov [bg.po]",
"Legnar WinShadow [pt_BR.po]",
"Eduardo Jorge [pt_BR.po]",
"Felix Knecht",
"Oren Held [he.po,iw.po]",
"Cawko Xakep",
"Petteri Wirkkala [fi.po]",
"Pavel Janousek [cs.po]",
"Gorkem Cetin [tr.po]",
"Kei Kodera [ja.po]",
"Priyadi Iman Nurcahyo [id.po]",
"Mario Sergio Fujikawa Ferreira",
"Seung-young Oh [ko.po]",
"Grzegorz Kowal [pl.po]",
"DJ Art",
"Enrico Manfredini",
"Lubosh Holichka",
"Kyritsis Athanasios",
"Vicente Aguilar",
"Robin Verduijn",
"Dirk Moebius",
"Paulo Henrique",
"A.J.",
"Josef Jahn",
"Marlin [TLC-ML]",
"Philippe Rigaux",
"Eric Seigne",
"Guiliano Rangel Alves"
};
char *SPECIAL_THANKS[]={
"Gene Schiavone",
"Brian Trapp"
};
int ABOUT_CURRENT_NAME;
static gint about_window_change_names(void *a){
if (AboutWindow){
GtkScrolledWindow *w=(GtkScrolledWindow *)a;
GtkAdjustment *adj=gtk_scrolled_window_get_vadjustment(w);
gdouble val=adj->value;
switch (ABOUT_CURRENT_NAME){
case 1:{
val=adj->value+1;
if (val>adj->upper-adj->page_size){
val=adj->upper-adj->page_size;
ABOUT_CURRENT_NAME=2;
};
break;
};
case 0:{
val=adj->value-1;
if (val<adj->lower){
val=adj->lower;
ABOUT_CURRENT_NAME=15;
};
break;
};
default:{
if (ABOUT_CURRENT_NAME++==14) ABOUT_CURRENT_NAME=0;
if (ABOUT_CURRENT_NAME>28) ABOUT_CURRENT_NAME=1;
};
};
gtk_adjustment_set_value (adj,val);
return 1;
};
return 0;
};
static gint about_window_esc_handler(GtkWidget *window,GdkEvent *event){
if (event && event->type == GDK_KEY_PRESS) {
GdkEventKey *kevent=(GdkEventKey *)event;
switch(kevent->keyval) {
case GDK_Escape:{
destroy_about_window();
return TRUE;
break;
};
};
};
return FALSE;
};
void destroy_about_window() {
if (AboutWindow){
gtk_widget_destroy(AboutWindow);
AboutWindow=(GtkWidget *)NULL;
gtk_widget_set_sensitive(MainWindow,TRUE);
};
};
void init_about_window(...) {
#include "pixmaps/dndtrash.xpm"
if (AboutWindow) {
gdk_window_show(AboutWindow->window);
return;
};
ABOUT_CURRENT_NAME=0;
AboutWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass(GTK_WINDOW(AboutWindow),
"D4X_About","D4X");
// gtk_widget_set_usize( GTK_WIDGET (AboutWindow), 400, 105);
gtk_window_set_resizable(GTK_WINDOW(AboutWindow), FALSE);
gtk_window_set_position(GTK_WINDOW(AboutWindow),GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW (AboutWindow), _("About"));
gtk_container_set_border_width(GTK_CONTAINER(AboutWindow),5);
GtkWidget *box=gtk_vbox_new(FALSE,0);
GtkWidget *label1=gtk_label_new(VERSION_NAME);
GtkWidget *label2=gtk_entry_new();
/*
GtkStyle *style = gtk_widget_get_style(label2);
gint real_size=gdk_string_width(gtk_style_get_font(style),HOME_PAGE);
gtk_widget_set_size_request(label2,real_size+10,-1);
*/
gtk_editable_set_editable(GTK_EDITABLE(label2),FALSE);
gtk_entry_set_text(GTK_ENTRY(label2),HOME_PAGE);
GtkWidget *label3=gtk_label_new(_("Author: Maxim Koshelev"));
GtkWidget *label4=gtk_label_new("e-mail: chuchelo@gmail.com");
GtkWidget *label5=gtk_label_new(_("Autoconf, ideas: Zaufi"));
GtkWidget *frame=gtk_frame_new(_("Translators team"));
gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_IN);
GtkWidget *scroll_window=gtk_scrolled_window_new((GtkAdjustment *)NULL,
(GtkAdjustment *)NULL);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_window),GTK_SHADOW_NONE);
gtk_widget_set_size_request(scroll_window,-1,100);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window),
GTK_POLICY_NEVER,
GTK_POLICY_NEVER);
GtkWidget *box1=gtk_vbox_new(FALSE,0);
GtkWidget *viewport=gtk_viewport_new((GtkAdjustment *)NULL,
(GtkAdjustment *)NULL);
gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport),GTK_SHADOW_NONE);
gtk_container_add(GTK_CONTAINER(viewport),box1);
gtk_container_add(GTK_CONTAINER(scroll_window),viewport);
// gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scroll_window),box1);
gtk_container_add(GTK_CONTAINER(frame),scroll_window);
for (int i=0;i<sizeof(TRANSLATORS)/sizeof(char*);i++){
AboutTLabel=gtk_label_new(TRANSLATORS[i]);
gtk_box_pack_start(GTK_BOX(box1),AboutTLabel,FALSE,FALSE,0);
}
GtkWidget *frame1=gtk_frame_new(_("Special thanks to"));
gtk_frame_set_shadow_type(GTK_FRAME(frame1),GTK_SHADOW_IN);
box1=gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(frame1),box1);
for (int j=0;j<sizeof(SPECIAL_THANKS)/sizeof(char*);j++){
AboutSLabel=gtk_label_new(SPECIAL_THANKS[j]);
gtk_box_pack_start(GTK_BOX(box1),AboutSLabel,FALSE,FALSE,0);
};
GtkWidget *Button=gtk_button_new_from_stock(GTK_STOCK_OK);
GtkWidget *box2=gtk_hbox_new(FALSE,0);
GtkWidget *box3=gtk_vbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(box),label1,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box3),label2,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box3),label3,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box3),label4,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box3),label5,FALSE,FALSE,0);
GdkBitmap *pixmask=NULL;
gtk_widget_realize(AboutWindow);
GdkPixmap *pixmap=make_pixmap_from_xpm(&pixmask,dndtrash_xpm,AboutWindow);
GtkWidget *image = gtk_image_new_from_pixmap(pixmap,pixmask);
gtk_box_pack_start(GTK_BOX(box2),image,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box2),box3,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box),box2,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box),frame,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box),frame1,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(box),Button,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(AboutWindow),box);
g_signal_connect(G_OBJECT(Button),"clicked",
(GtkSignalFunc)destroy_about_window,NULL);
g_signal_connect(G_OBJECT(AboutWindow), "key_press_event",
(GtkSignalFunc)about_window_esc_handler, NULL);
g_signal_connect(G_OBJECT(AboutWindow), "delete_event",
(GtkSignalFunc)destroy_about_window,NULL);
d4x_eschandler_init(AboutWindow,NULL);
GTK_WIDGET_SET_FLAGS(Button,GTK_CAN_DEFAULT);
gtk_window_set_default(GTK_WINDOW(AboutWindow),Button);
gtk_widget_show_all(AboutWindow);
gtk_window_set_modal (GTK_WINDOW(AboutWindow),TRUE);
gtk_window_set_transient_for (GTK_WINDOW (AboutWindow), GTK_WINDOW (MainWindow));
// gtk_widget_show(AboutWindow);
gtk_widget_set_sensitive(MainWindow,FALSE);
g_timeout_add (80, about_window_change_names , scroll_window);
};
/* ------------------------------------------------------------
* Dialogs...
* ------------------------------------------------------------
*/
tDialog::tDialog() {
window=(GtkWidget *)NULL;
};
void tDialog::done() {
if (!window) return;
gtk_widget_destroy(window);
window=(GtkWidget *)NULL;
};
void tDialog::set_modal(GtkWidget *widget){
if (window && widget){
gtk_window_set_modal (GTK_WINDOW(window),TRUE);
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (widget));
};
};
tDialog::~tDialog() {
done();
};
static void dialog_delete(GtkWidget *widget, GdkEvent *event,tDialogWidget *parent) {
parent->done();
};
static void dialog_delete2(GtkWidget *widget,tDialogWidget *parent) {
parent->done();
};
tDialogWidget::tDialogWidget():tDialog(){
};
void tDialogWidget::create(char *ask,char *title){
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window),title);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window),5);
label=gtk_label_new(ask);
ok_button=gtk_button_new_from_stock(GTK_STOCK_OK);
cancel_button=gtk_button_new_from_stock(GTK_STOCK_CANCEL);
GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT);
GTK_WIDGET_SET_FLAGS(cancel_button,GTK_CAN_DEFAULT);
mainvbox=gtk_vbox_new(FALSE,5);
GtkWidget *hbox=gtk_hbutton_box_new();
gtk_box_set_spacing(GTK_BOX(hbox),5);
gtk_box_pack_start(GTK_BOX(mainvbox),label,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(mainvbox),hbox,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(hbox),ok_button,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(hbox),cancel_button,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(window),mainvbox);
gtk_window_set_default(GTK_WINDOW(window),cancel_button);
g_signal_connect(G_OBJECT(cancel_button),"clicked",G_CALLBACK(dialog_delete2),this);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(dialog_delete), this);
d4x_eschandler_init(window,this);
};
int tDialogWidget::init(char *ask,char *title) {
if (window) {
gdk_window_show(window->window);
return 0;
};
create(ask,title);
gtk_widget_show_all(window);
return 1;
};
tDialogWidget::~tDialogWidget() {
};
/* -----------------------------------------------*/
tConfirmedDialog::tConfirmedDialog():tDialogWidget(){
};
int tConfirmedDialog::init(char *ask,char *title){
if (window) {
gdk_window_show(window->window);
return 0;
};
create(ask,title);
check=gtk_check_button_new_with_label(_("Don't ask next time"));
gtk_box_pack_start(GTK_BOX(mainvbox),check,FALSE,FALSE,0);
gtk_widget_show_all(window);
return 1;
};
tConfirmedDialog::~tConfirmedDialog(){
};
/* -----------------------------------------------*/
static gint string_dialog_delete_event(GtkWidget *widget, GdkEvent *event,tStringDialog *parent) {
parent->done();
return TRUE;
};
static void string_dialog_ok_clicked(GtkWidget *widget,tStringDialog *parent) {
parent->done();
};
tStringDialog::tStringDialog():tDialog(){
};
int tStringDialog::init(char *str,char *title,char *frame_title) {
if (window) {
gtk_entry_set_text(GTK_ENTRY(entry),str);
gtk_window_set_title(GTK_WINDOW (window), title);
gtk_window_set_default(GTK_WINDOW(window),ok_button);
gtk_frame_set_label(GTK_FRAME(frame),frame_title?frame_title:"");
gdk_window_show(window->window);
return 0;
};
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(string_dialog_delete_event), this);
d4x_eschandler_init(window,this);
gtk_window_set_title(GTK_WINDOW (window), title);
gtk_container_set_border_width(GTK_CONTAINER(window),1);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
GtkWidget *hbox=gtk_hbutton_box_new();
GtkWidget *vbox=gtk_vbox_new(FALSE,5);
gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox),GTK_BUTTONBOX_END);
ok_button=gtk_button_new_from_stock(GTK_STOCK_OK);
g_signal_connect(G_OBJECT(ok_button),"clicked",G_CALLBACK(string_dialog_ok_clicked),this);
GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT);
entry=gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(entry),str);
gtk_editable_set_editable(GTK_EDITABLE(entry),FALSE);
gtk_widget_set_size_request(GTK_WIDGET (window), 500,-1);
gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
gtk_box_pack_end(GTK_BOX(hbox),ok_button,FALSE,FALSE,0);
frame=gtk_frame_new(frame_title?frame_title:"");
gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_OUT);
// gtk_container_border_width(GTK_CONTAINER(frame),5);
gtk_container_add(GTK_CONTAINER(frame),vbox);
gtk_container_add(GTK_CONTAINER(window),frame);
gtk_widget_show_all(window);
gtk_window_set_default(GTK_WINDOW(window),ok_button);
return 1;
};
tStringDialog::~tStringDialog() {
};
syntax highlighted by Code2HTML, v. 0.9.1