ege-select-one-action.cpp revision 1f722049a2d5e841f11456674a44a2abcacce56d
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
*/
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is EGE Select One Action.
*
* The Initial Developer of the Original Code is
* Jon A. Cruz.
* Portions created by the Initial Developer are Copyright (C) 2010
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/* Note: this file should be kept compilable as both .cpp and .c */
#include <string.h>
#include <gtk/gtklabel.h>
#include <gtk/gtktoolitem.h>
#include <gtk/gtkcellrenderertext.h>
#include <gtk/gtkcellrendererpixbuf.h>
#include <gtk/gtkcelllayout.h>
#include <gtk/gtkradioaction.h>
#include <gtk/gtkradiomenuitem.h>
#include <gtk/gtktable.h>
#include "ege-select-one-action.h"
enum {
CHANGED = 0,
static void ege_select_one_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec );
static void ege_select_one_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec );
static gboolean combo_entry_focus_lost_cb( GtkWidget *widget, GdkEventFocus *event, gpointer data );
static void proxy_action_chagned_cb( GtkRadioAction* action, GtkRadioAction* current, gpointer user_data );
static GtkActionClass* gParentClass = 0;
enum {
APPEARANCE_UNKNOWN = -1,
APPEARANCE_NONE = 0,
APPEARANCE_FULL, /* label, then all choices represented by separate buttons */
APPEARANCE_COMPACT, /* label, then choices in a drop-down menu */
APPEARANCE_MINIMAL, /* no label, just choices in a drop-down menu */
};
enum {
SELECTION_UNKNOWN = -1,
SELECTION_CLOSED = 0,
};
struct _EgeSelectOneActionPrivate
{
};
#define EGE_SELECT_ONE_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), EGE_SELECT_ONE_ACTION_TYPE, EgeSelectOneActionPrivate ) )
enum {
PROP_MODEL = 1,
};
GType ege_select_one_action_get_type( void )
{
if ( !myType ) {
sizeof( EgeSelectOneActionClass ),
NULL, /* base_init */
NULL, /* base_finalize */
NULL, /* class_finalize */
NULL, /* class_data */
sizeof( EgeSelectOneAction ),
0, /* n_preallocs */
};
}
return myType;
}
}
{
if ( klass ) {
g_param_spec_object( "model",
"Tree Model",
"Tree model of possible items",
g_param_spec_int( "active",
"Active Selection",
"The index of the selected item",
-1, G_MAXINT, 0,
g_param_spec_int( "label-column",
"Display Column",
"The column of the model that holds display strings",
0, G_MAXINT, 0,
g_param_spec_int( "icon-column",
"Icon Column",
"The column of the model that holds display icon name",
g_param_spec_int( "tooltip-column",
"Tooltip Column",
"The column of the model that holds tooltip strings",
g_param_spec_int( "sensitive-column",
"Sensitive Column",
"The column of the model that holds sensitive state",
g_param_spec_string( "icon-property",
"Icon Property",
"Target icon property",
"",
g_param_spec_int( "icon-size",
"Icon Size",
"Target icon size",
g_param_spec_string( "appearance",
"Appearance hint",
"A hint for how to display",
"",
g_param_spec_string( "selection",
"Selection set open or closed",
"",
G_TYPE_NONE, 0);
}
}
{
/* g_signal_connect( action, "notify", G_CALLBACK( fixup_labels ), NULL ); */
}
{
"name", name,
"label", label,
"tooltip", tooltip,
"stock_id", stock_id,
"model", model,
"active", 0,
"icon-property", "stock-id",
NULL );
return action;
}
{
}
{
if ( gtk_tree_model_iter_nth_child( action->private_data->model, &iter, NULL, action->private_data->active ) ) {
-1 );
}
}
return str;
}
{
}
} else {
}
}
{
}
{
g_warning( "ege_select_one_action: Attempt to update sensitivity of item without sensitive column\n" );
return;
}
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
{
}
void ege_select_one_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec )
{
switch ( propId ) {
case PROP_MODEL:
break;
case PROP_ACTIVE:
break;
case PROP_LABEL_COLUMN:
break;
case PROP_ICON_COLUMN:
break;
case PROP_TOOLTIP_COLUMN:
break;
case PROP_SENSITIVE_COLUMN:
break;
case PROP_ICON_PROP:
break;
case PROP_ICON_SIZE:
break;
case PROP_APPEARANCE:
break;
case PROP_SELECTION:
break;
default:
}
}
void ege_select_one_action_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec )
{
switch ( propId ) {
case PROP_MODEL:
{
}
break;
case PROP_ACTIVE:
{
}
break;
case PROP_LABEL_COLUMN:
{
}
break;
case PROP_ICON_COLUMN:
{
}
break;
case PROP_TOOLTIP_COLUMN:
{
}
break;
case PROP_SENSITIVE_COLUMN:
{
}
break;
case PROP_ICON_PROP:
{
}
break;
case PROP_ICON_SIZE:
{
}
break;
case PROP_APPEARANCE:
{
} else {
}
}
break;
case PROP_SELECTION:
{
} else {
}
}
break;
default:
}
}
{
if ( IS_EGE_SELECT_ONE_ACTION(action) ) {
while ( valid ) {
-1 );
str = 0;
index++;
}
} else {
}
return item;
}
void ege_select_one_action_set_radio_action_type( EgeSelectOneAction* action, GType radioActionType )
{
(void)action;
} else {
g_warning("Passed in type '%s' is not derived from '%s'", g_type_name(radioActionType), g_type_name(GTK_TYPE_RADIO_ACTION) );
}
}
{
{
GtkRadioAction* ract = 0;
// If short_label not defined, g_object_get will return label.
// This hack allows a label to be used with a drop-down menu when
// no label is used with a set of icons that are self-explanatory.
}
while ( valid ) {
/*
gint size = 0;
*/
-1 );
-1 );
}
-1 );
}
-1 );
}
"name", "Name 1",
"label", str,
"tooltip", tip,
"value", index,
/*
"iconId", iconId,
"iconSize", size,
*/
NULL );
if ( iconId ) {
}
/* TODO get this string to be set instead of hardcoded */
}
}
} else {
}
}
}
index++;
}
} else {
GtkCellRenderer * renderer = 0;
if (GTK_IS_ENTRY(child)) {
GtkEntryCompletion *complete = 0;
}
} else {
/* "icon-name" */
gtk_cell_layout_add_attribute( GTK_CELL_LAYOUT(normal), renderer, "stock-id", act->private_data->iconColumn );
}
gtk_cell_layout_add_attribute( GTK_CELL_LAYOUT(normal), renderer, "text", act->private_data->labelColumn );
}
}
if (sss) {
}
}
{
}
}
} else {
}
return item;
}
{
}
{
}
{
while ( proxies ) {
/* Search for the things we built up in create_tool_item() */
}
if ( GTK_IS_COMBO_BOX(combodata) ) {
}
if ( data ) {
/*gtk_radio_action_set_current_value( oneAction, active );*/
while ( group ) {
/* Found the group member to set active */
break;
}
}
}
}
}
}
}
}
}
}
}
{
while ( proxies ) {
/* Search for the things we built up in create_tool_item() */
}
if ( GTK_IS_COMBO_BOX(combodata) ) {
/* Not implemented */
if ( data ) {
// List is backwards in group as compared to GtkTreeModel, we better do matching.
while ( group ) {
// Search for matching GtkTreeModel entry
while( valid ) {
-1 );
-1 );
break;
}
}
}
}
}
}
/* Not implemented */
}
}
}
{
if (newActive == -1) {
/* indicates the user is entering text for a custom aka "open" value */
if (act->private_data->pendingText && text && (strcmp(act->private_data->pendingText, text) == 0) ) {
/* The currently entered data matches the last seen */
} else {
}
text = 0;
}
}
}
if (text) {
text = 0;
}
}
{
(void)widget;
(void)event;
return FALSE;
}
{
(void)widget;
}
{
if (act->private_data->activeText && (strcmp(act->private_data->pendingText, act->private_data->activeText) == 0)) {
/* Was the same value */
} else {
}
if (matching >= 0) {
} else {
}
}
}
}
{
if (text) {
-1 );
}
str = 0;
curr++;
}
}
return index;
}
{
}
}
{
(void)current;
}
}
}
{
int maxUsed = 0;
while ( valid ) {
int count = 0;
labelColumn, &str,
-1 );
}
}
return maxUsed;
}