File: query.C

package info (click to toggle)
mixviews 1.20-4
  • links: PTS
  • area: main
  • in suites: slink
  • size: 2,920 kB
  • ctags: 5,958
  • sloc: cpp: 32,873; ansic: 2,110; makefile: 411; sh: 17
file content (106 lines) | stat: -rw-r--r-- 2,923 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// query.C

/******************************************************************************
 *
 *  MiXViews - an X window system based sound & data editor/processor
 *
 *  Copyright (c) 1993, 1994 Regents of the University of California
 *
 *  Author:     Douglas Scott
 *  Date:       December 13, 1994
 *
 *  Permission to use, copy and modify this software and its documentation
 *  for research and/or educational purposes and without fee is hereby granted,
 *  provided that the above copyright notice appear in all copies and that
 *  both that copyright notice and this permission notice appear in
 *  supporting documentation. The author reserves the right to distribute this
 *  software and its documentation.  The University of California and the author
 *  make no representations about the suitability of this software for any 
 *  purpose, and in no event shall University of California be liable for any
 *  damage, loss of data, or profits resulting from its use.
 *  It is provided "as is" without express or implied warranty.
 *
 ******************************************************************************/


#ifdef __GNUG__
#pragma implementation
#endif

#include <String.h>
#include "localdefs.h"
#include "query.h"
#include "queryvalue.h"

const char* QueryItem::separator = "|";

QueryItem::QueryItem(const char* lbl) {
	 myLabel = new String(lbl);
}

QueryItem::QueryItem(const char* beg, const char* end) {
	 myLabel = new String(beg);
	 *myLabel += end;
}

QueryItem::~QueryItem() {
	 delete myLabel;
}

const char*
QueryItem::label() { return *myLabel; }

/////////

QueryFile::QueryFile(String* path, const char* suffixes) : QueryItem(""),
	myPath(new QueryString("", path)),
	mySuffixes(new String(suffixes? suffixes : "")) {
}

QueryFile::~QueryFile() {
	delete myPath;
	delete mySuffixes;
}

/////////

QueryButton::QueryButton(const char *lbl, Response r)
	: QueryItem(lbl), myResponse(r) {}

QueryButton::~QueryButton() {}

/////////

QueryChoice::QueryChoice(const char *lbl, const char *list,
		ChoiceValue* states, boolean excl) : QueryItem(lbl),
	myList(list), statePtr(states), exclusive(excl) {}

QueryChoice::~QueryChoice() {}

void
QueryChoice::start() {			// initialize iterators
	iterator = myList;
	stateIterator = *statePtr;
	currentValue = 0x1;		// value of first button 	
}

boolean
QueryChoice::nextValue(int *value) {
	boolean isTrue = stateIterator & 0x1;	// this state currently true?
	*value = int(currentValue);		// value for this button
	stateIterator >>= 1;			// shift to next state
	currentValue <<= 1;			// shift value up to next slot
	return isTrue;
}

const char *
QueryChoice::nextLabel() {
//	iterator = iterator.after(separator);
//	currentLabel = iterator.before(separator);
	String a= iterator.after(separator);
	iterator = a;
	String b = iterator.before(separator);
	currentLabel = b;
	return currentLabel;	// must store into String to convert to char*
}