/rusxmms/librcc

To get this branch, use:
bzr branch http://suren.me/webbzr/rusxmms/librcc

« back to all changes in this revision

Viewing changes to ui/gtk.c

  • Committer: Suren A. Chilingaryan
  • Date: 2005-07-02 05:08:36 UTC
  • Revision ID: Arch-1:ds@dside.dyndns.org--darksoft-2004%librcc--main--0.1--patch-3
02.07.2005

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <gtk/gtk.h>
 
3
#include "internal.h"
 
4
#include "rccnames.h"
 
5
 
 
6
rcc_ui_internal rccUiCreateInternal(rcc_ui_context ctx) {
 
7
    return NULL;
 
8
}
 
9
 
 
10
void rccUiFreeInternal(rcc_ui_context ctx) {
 
11
}
 
12
 
 
13
rcc_ui_widget rccUiMenuCreateWidget(rcc_ui_menu_context ctx) {
 
14
    return NULL;
 
15
}
 
16
 
 
17
void rccUiMenuDestroyWidget(rcc_ui_menu_context ctx) {
 
18
}
 
19
 
 
20
rcc_ui_id rccUiMenuGet(rcc_ui_menu_context ctx) {
 
21
    GtkWidget *menu;
 
22
    
 
23
    if (!ctx) return (rcc_ui_id)-1;
 
24
 
 
25
    if (ctx->type == RCC_UI_MENU_OPTION)
 
26
        return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ctx->widget));
 
27
        
 
28
    menu = gtk_option_menu_get_menu(ctx->widget);
 
29
    return g_list_index(GTK_MENU_SHELL(menu)->children, gtk_menu_get_active(GTK_MENU(menu)));
 
30
}
 
31
 
 
32
int rccUiMenuSet(rcc_ui_menu_context ctx, rcc_ui_id id) {
 
33
    if (!ctx) return -1;
 
34
    
 
35
    switch (ctx->type) {
 
36
        case RCC_UI_MENU_OPTION:
 
37
            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ctx->widget),id);
 
38
        break;
 
39
        default:
 
40
            gtk_option_menu_set_history(ctx->widget, id);
 
41
    }
 
42
 
 
43
    return 0;
 
44
}
 
45
 
 
46
 
 
47
static int rccGtkMenuLanguageCB(GtkWidget * w, gpointer item) {
 
48
    rccUiRestoreLanguage(((rcc_ui_menu_context)item)->uictx);
 
49
}
 
50
 
 
51
int rccUiMenuConfigureWidget(rcc_ui_menu_context ctx) {
 
52
    unsigned int i;
 
53
    
 
54
    rcc_context rccctx;
 
55
    rcc_ui_context uictx;
 
56
 
 
57
    rcc_language_config config;
 
58
    rcc_language_ptr *languages;
 
59
    rcc_language_id language_id;
 
60
 
 
61
    rcc_charset *charsets;
 
62
    rcc_engine_ptr *engines;
 
63
 
 
64
    rcc_charset_id charset_id;
 
65
    rcc_engine_id engine_id;
 
66
 
 
67
    GtkWidget *list, *item, *menu;
 
68
 
 
69
    if (!ctx) return -1;
 
70
    
 
71
    uictx = ctx->uictx;
 
72
    rccctx = uictx->rccctx;
 
73
    
 
74
    switch (ctx->type) {
 
75
        case RCC_UI_MENU_LANGUAGE:
 
76
            list = gtk_menu_new();
 
77
 
 
78
            languages=rccGetLanguageList(rccctx);
 
79
            for (i=0; languages[i]; i++) {
 
80
                item = gtk_menu_item_new_with_label(rccUiGetLanguageName(uictx, languages[i]->sn));
 
81
                gtk_signal_connect(GTK_OBJECT(item), "activate", GTK_SIGNAL_FUNC(rccGtkMenuLanguageCB), ctx);
 
82
                gtk_menu_append(GTK_MENU(list), item);
 
83
                gtk_widget_show(item);
 
84
            }
 
85
 
 
86
            language_id = rccGetSelectedLanguage(rccctx);
 
87
            if (language_id < 0) language_id = 0;
 
88
 
 
89
            if (ctx->widget) menu = ctx->widget;
 
90
            else {
 
91
                menu = gtk_option_menu_new();
 
92
                ctx->widget = menu;
 
93
            }
 
94
            gtk_option_menu_remove_menu(GTK_OPTION_MENU(menu));
 
95
            gtk_option_menu_set_menu(GTK_OPTION_MENU(menu), list);
 
96
            gtk_option_menu_set_history(GTK_OPTION_MENU(menu), language_id);
 
97
            
 
98
            return 0;
 
99
        break;
 
100
        case RCC_UI_MENU_CHARSET:
 
101
            
 
102
            list = gtk_menu_new();
 
103
 
 
104
            language_id = (rcc_language_id)rccUiMenuGet(uictx->language);
 
105
            charsets = rccGetCharsetList(rccctx, language_id);
 
106
            
 
107
            for (i=0;charsets[i];i++) {
 
108
                list = gtk_menu_item_new_with_label(charsets[i]);
 
109
                gtk_widget_show(item);
 
110
                gtk_menu_append(GTK_MENU(list), item);
 
111
            }
 
112
 
 
113
            if (ctx->widget) menu = ctx->widget;
 
114
            else {
 
115
                menu = gtk_option_menu_new();
 
116
                ctx->widget = menu;
 
117
            }
 
118
    
 
119
            gtk_option_menu_remove_menu(GTK_OPTION_MENU(menu));
 
120
            gtk_option_menu_set_menu(GTK_OPTION_MENU(menu), list);
 
121
 
 
122
            config = rccGetConfig(rccctx, language_id);
 
123
            charset_id = rccConfigGetSelectedCharset(config, (rcc_class_id)ctx->id);
 
124
            if (charset_id < 0) charset_id = 0;
 
125
            gtk_option_menu_set_history(GTK_OPTION_MENU(menu), charset_id);
 
126
        break;
 
127
        case RCC_UI_MENU_ENGINE:
 
128
            list = gtk_menu_new();
 
129
 
 
130
            language_id = (rcc_language_id)rccUiMenuGet(uictx->language);
 
131
            engines = rccGetEngineList(rccctx, language_id);
 
132
            for (i=0;engines[i];i++) {
 
133
                list = gtk_menu_item_new_with_label(engines[i]->title);
 
134
                gtk_widget_show(item);
 
135
                gtk_menu_append(GTK_MENU(list), item);
 
136
            }   
 
137
 
 
138
            if (ctx->widget) menu = ctx->widget;
 
139
            else {
 
140
                menu = gtk_option_menu_new();
 
141
                ctx->widget = menu;
 
142
            }
 
143
 
 
144
            gtk_option_menu_remove_menu(GTK_OPTION_MENU(menu));
 
145
            gtk_option_menu_set_menu(GTK_OPTION_MENU(menu), list);
 
146
 
 
147
            config = rccGetConfig(rccctx, language_id);
 
148
            engine_id = rccConfigGetSelectedEngine(config);
 
149
            if (engine_id < 0) engine_id = 0;
 
150
            gtk_option_menu_set_history(GTK_OPTION_MENU(menu), engine_id);
 
151
                    
 
152
        break;
 
153
        case RCC_UI_MENU_OPTION:
 
154
            item = gtk_check_button_new_with_label(rccUiGetOptionName(uictx, (rcc_option)ctx->id));
 
155
            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), rccGetOption(rccctx, (rcc_option)ctx->id));
 
156
        break;
 
157
    }
 
158
 
 
159
    return 0;
 
160
}
 
161
 
 
162
 
 
163
rcc_ui_box rccUiBoxCreate(rcc_ui_menu_context ctx, const char *title) {
 
164
    GtkWidget *hbox, *label;
 
165
    hbox = gtk_hbox_new(FALSE, 10);
 
166
    gtk_container_border_width(GTK_CONTAINER(hbox), 5);
 
167
    if (ctx->type != RCC_UI_MENU_OPTION) {
 
168
        label = gtk_label_new(title);
 
169
        gtk_widget_set_usize(label, 120, 17);
 
170
        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
 
171
    }
 
172
    gtk_box_pack_start(GTK_BOX(hbox), (GtkWidget*)ctx->widget, TRUE, TRUE, 0);
 
173
    return (rcc_ui_box)hbox;
 
174
}
 
175
 
 
176
rcc_ui_frame rccUiFrameCreate(rcc_ui_context ctx, const char *title) {
 
177
    GtkWidget *frame, *box;
 
178
    frame = gtk_frame_new(title?title:"");
 
179
    gtk_container_border_width(GTK_CONTAINER(frame), 5);
 
180
 
 
181
    box = gtk_vbox_new(FALSE, 3);
 
182
    gtk_container_add(GTK_CONTAINER(frame), box);
 
183
    
 
184
    return (rcc_ui_frame)frame;
 
185
}
 
186
 
 
187
int rccUiFrameAdd(rcc_ui_frame frame, rcc_ui_box box) {
 
188
    GtkWidget *vbox;
 
189
    
 
190
    vbox = gtk_container_get_toplevels()->data;
 
191
    gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(box), FALSE, FALSE, 0);
 
192
    return 0;
 
193
}
 
194
 
 
195
rcc_ui_page rccUiPageCreate(rcc_ui_context ctx, const char *title) {
 
196
    return (rcc_ui_page)gtk_vbox_new(FALSE, 0);
 
197
}
 
198
 
 
199
int rccUiPageAdd(rcc_ui_page page, rcc_ui_frame frame) {
 
200
    if ((!page)||(!frame)) return -1;
 
201
    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(frame), FALSE, FALSE, 0);
 
202
    return 0;
 
203
}